Я пытаюсь создать тестовый шаблон UIImage для устройства iOS 5.1. Целевой UIImageView имеет размер 320x240, но я пытался создать тестовый шаблон UIImage 160x120 (будущие изображения нетестовых шаблонов будут такого размера). Я хотел, чтобы верхняя половина поля была синей, а нижняя красной, но я получаю то, что выглядит как неинициализированная память, искажающая нижнюю часть изображения. Код выглядит следующим образом:
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];
Это должно выглядеть как другой пример переполнения стека. Во всяком случае, я обнаружил, что по мере уменьшения размера тестового шаблона увеличивается «поврежденная» часть изображения. Что также странно, так это то, что я вижу красные линии в «поврежденной» части, поэтому не похоже, что я просто путаю размеры компонентов. Что мне не хватает? Чувствуется что-то в провайдере, но я его не вижу.
Спасибо!
Добавлены скриншоты. Вот как это выглядит с набором kCGImageAlphaNoneSkipFirst:
А вот как это выглядит с kCGImageAlphaFirst: