我正在尝试为 iOS 5.1 设备创建 UIImage 测试模式。目标 UIImageView 的大小为 320x240,但我试图创建一个 160x120 UIImage 测试模式(未来,非测试模式图像将是这个大小)。我希望框的上半部分为蓝色,下半部分为红色,但我得到了看起来像未初始化的内存破坏了图像底部的东西。代码如下:
int width = 160;
int height = 120;
unsigned int testData[width * height];
for(int k = 0; k < (width * height) / 2; k++)
testData[k] = 0xFF0000FF; // BGRA (Blue)
for(int k = (width * height) / 2; k < width * height; k++)
testData[k] = 0x0000FFFF; // BGRA (Red)
int bitsPerComponent = 8;
int bitsPerPixel = 32;
int bytesPerRow = 4 * width;
CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, &testData, (width * height * 4), NULL);
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
CGBitmapInfo bitmapInfo = kCGImageAlphaNoneSkipFirst;
CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;
CGImageRef imageRef = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow,
colorSpaceRef, bitmapInfo, provider, NULL, NO,renderingIntent);
UIImage *myTestImage = [UIImage imageWithCGImage:imageRef];
这应该看起来像 Stack Overflow 上的另一个示例。无论如何,我发现当我减小测试图案的大小时,图像的“损坏”部分会增加。同样奇怪的是,我在“损坏”部分看到了红色线条,所以看起来我只是在弄乱组件的大小。我错过了什么?感觉就像提供者中的某些东西,但我没有看到。
谢谢!
添加了屏幕截图。这是设置 kCGImageAlphaNoneSkipFirst 的样子:
这是 kCGImageAlphaFirst 的样子: