我开发了适用于iPhone 3的平铺游戏应用程序。
我从我的资源中获取了一个图像,并使用CGImageCreateWithImageInRect ( originalImage.CGImage, frame );
函数将其划分为多个图块。
它适用于所有iPhone,但现在我希望它也适用于Retina显示器。
因此,根据this link我拍摄的图像尺寸是当前图像尺寸的两倍,并通过添加后缀@ 2x重命名。但问题是它只需要视网膜显示图像的上半部分。我认为这是因为我在使用CGImageCreateWithImageInRect
时设置了框架。那么应该做些什么呢。
任何形式的帮助都会非常感激。
提前致谢...
答案 0 :(得分:1)
问题可能是@ 2x图像比例只能自动为UIImage的某些初始值设置器正确设置... Try loading your UIImages using code like this from Tasty Pixel.该链接的条目更多地讨论了这个问题。
使用链接中的UIImage+TPAdditions
类别,您将像这样实现它(在确保图像及其@ 2x对应项在您的项目中之后):
NSString *baseImagePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSString *myImagePath = [baseImagePath stringByAppendingPathComponent:@"myImage.png"]; // note no need to add @2x.png here
UIImage *myImage = [UIImage imageWithContentsOfResolutionIndependentFile:myImagePath];
然后你应该可以使用CGImageCreateWithImageInRect(myImage.CGImage, frame);
答案 1 :(得分:0)
以下是我在应用程序中使用它的方法:
//this is a method that takes a UIImage and slices it into 16 tiles (GridSize * GridSize)
#define GridSize 4
- (void) sliceImage:(UIImage *)image {
CGSize imageSize = [image size];
CGSize square = CGSizeMake(imageSize.width/GridSize, imageSize.height/GridSize);
CGFloat scaleMultiplier = [image scale];
square.width *= scaleMultiplier;
square.height *= scaleMultiplier;
CGFloat scale = ([self frame].size.width/GridSize)/square.width;
CGImageRef source = [image CGImage];
if (source != NULL) {
for (int r = 0; r < GridSize; ++r) {
for (int c = 0; c < GridSize; ++c) {
CGRect slice = CGRectMake(c*square.width, r*square.height, square.width, square.height);
CGImageRef sliceImage = CGImageCreateWithImageInRect(source, slice);
if (sliceImage) {
//we have a tile (as a CGImageRef) from the source image
//do something with it
CFRelease(sliceImage);
}
}
}
}
}
诀窍是使用-[UIImage scale]
属性来确定你应该切割多大的矩形。