我必须从远程来源为我的应用程序加载图标,图像为50x50px,以25x25px显示在设备上。
目前,图标在视网膜设备上显示的尺寸正确,但非视网膜设备的尺寸是其两倍。
仅供参考:远程信号源无法提供非视网膜图像。
如何缩小非视网膜设备上的UIImage,以便所有设备显示相同的尺寸?
答案 0 :(得分:7)
首先检查你是否有Retina显示器
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2){
然后你需要设置图像的缩放选项:
UIImage * scaledImage = [UIImage alloc];
scaledImage = [[scaledImage initWithCGImage:[resourceImage CGImage] scale:2.0 orientation:UIImageOrientationUp] autorelease];
然后我相信imageView应该缩放它并正确显示
答案 1 :(得分:0)
试试这个:
+ (UIImage *) onScaleImage:(UIImage *)image width:(int)width
{
CGImageRef imageRef = image.CGImage;
NSUInteger nWidth = CGImageGetWidth(imageRef);
if (nWidth == width)
return (nil);
double dScaleFactor = (double)width / (double)nWidth;
NSUInteger nHeight = (int)((double)CGImageGetHeight(imageRef) * dScaleFactor);
CGContextRef context = CGBitmapContextCreate(NULL, width, nHeight, CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), CGImageGetColorSpace(imageRef), CGImageGetBitmapInfo(imageRef));
CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
CGContextSetShouldAntialias(context, true);
CGContextDrawImage (context, CGRectMake(0, 0, width, nHeight), imageRef);
CGImageRef imageRefScaled = CGBitmapContextCreateImage(context);
// caller must retain
UIImage *imageScaled = [[UIImage alloc] initWithCGImage:imageRefScaled];
CGContextRelease (context);
CGImageRelease (imageRefScaled);
return (imageScaled);
}
答案 2 :(得分:0)
好吧,您可以在if语句中包含对它的每次调用,如下所示:
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
//do scale stuff here
}
为避免每次都输入此内容,您可以在UIScreen上声明一个类别,该类别在-realScale方法或其他内容中使用此代码。