如何将视网膜捕获的图像绘制回视网膜并保持高质量?

时间:2012-07-19 01:13:30

标签: ios uiimage retina-display

我有一个应用程序可以在视网膜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...

我最终得到了图片的低rez(锯齿状对角线和文字)版本。

所以我的问题是:为了在屏幕上显示该图像并让它显示@ 2x-DPI,我需要做些什么,所以它具有漂亮的视网膜外观?

谢谢!

2 个答案:

答案 0 :(得分:1)

这是Quartz(即真实数据)和UIImage(单板)碰撞的地方。所以你得到了你创造的东西的UIImage。询问CGImage,然后查看该图像。宽度和高度最好是2048x1536或者有些不对劲。

一旦你弄清楚如何获得“真实”大小的图像,你可以将其保存为“foo@2x.png”,然后将其调整为一半,并将其保存为“foo.png”。

UIImage让人物变得非常容易,但是当你需要真正的控制时,你必须深入石英并在橡胶上路的地方工作。

我的猜测是你认为你有一个视网膜图像,但没有,然后当你去显示它的半个rez。

答案 1 :(得分: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 ...
祝你好运!

编辑(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];
    }
}