我有一个应用程序可以在视网膜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,我需要做些什么,所以它具有漂亮的视网膜外观?
谢谢!
答案 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];
}
}