2

Retina-iPad (iPad3) でスクリーン キャプチャを実行するアプリを持っています。または、HOME + POWER でスクリーン キャプチャを実行し、その方法で画像を取得することもできますが、問題ではありません。最終的に、キャプチャした画像は 2048x1536 で、1024x768 @2x です。

ここで、この画像 (この 2048x1536 の画像) を画面に表示し直したいと思います。その美しい網膜らしさを維持したいと考えています。

私がこのようなことをすると(ウェブブラウザに入力されたコード)

UIImage *myImage = [UIImage imageWithContentsOfFile: pathToMyHiresImage];
UIImageView *myImageView = [[UIImageView alloc] initWithImage: myImage];
myImageView.frame = screenBounds;  // make it fit
// etc...

画像の低解像度 (ジャギーな斜めの線とテキスト) バージョンになります。

だから私の質問は、その画像を画面に表示して @2x-DPI を表示させるにはどうすればよいのでしょうか?

ありがとう!

4

2 に答える 2

1

ここで、実際のデータである Quartz とベニアである UIImage が衝突します。したがって、作成したものの UIImage を取得します。CGImage を要求してから、その画像を見てください。幅と高さは 2048x1536 にするか、何かが間違っています。

「実際の」サイズの画像を取得する方法がわかったら、それを「foo@2x.png」として保存し、半分にサイズ変更して「foo.png」として保存します。

UIImage は誰にとっても非常に簡単ですが、実際の制御が必要な場合は、Quartz に飛び込んで、ゴムが道路にぶつかる場所で作業する必要があります。

私の推測では、あなたは網膜画像を取得したと思いますが、そうではなかったので、それを見せに行くとその半分の rez です。

于 2012-07-19T01:39:50.833 に答える
1

これでうまくいくはずです:

UIImage *myImage = [UIImage imageWithContentsOfFile: pathToMyHiresImage];
// *****Added Code*****
myImage = [UIImage imageWithCGImage:myImage.CGImage scale:2 orientation:myImage.imageOrientation];
// ********************
UIImageView *myImageView = [[UIImageView alloc] initWithImage: myImage];
myImageView.frame = screenBounds;  // make it fit
// etc ...

幸運を!

EDIT(Olie)DavidHの提案を考慮した最終的なコードは次のとおりです。

UIImage *myImage = [[UIImage alloc] initWithContentsOfFile: path];

if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)])
{
    float screenScale = [[UIScreen mainScreen] scale];
    if (screenScale > 1.)
    {
        id oldImage = myImage;
        myImage = [[UIImage imageWithCGImage: myImage scale: screenScale orientation: myImage.imageOrientation] retain];
        [oldImage release];
    }
}
于 2012-07-19T03:55:25.927 に答える