Почему iphone CGImageCreate с данными из стандартных битов BMP дает неправильный результат? - PullRequest
0 голосов
/ 16 апреля 2009

У меня есть движок gdi, который приводит к стандартному потоку битов BMP, и теперь я хочу отобразить его с помощью компьютерной графики в iphone, я использую его так:

// size  -> image size 
// rect  -> current view rect
// pBits -> the BITMAPINFO image bits stream

long imgSizePerRow = ((long)(24 * size.width + 31) / 32) * 4;
CGDataProviderRef providerRef = CGDataProviderCreateWithData(NULL, pBits,
                                          imgSizePerRow * size.height, NULL);

CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();

CGImageRef imageRef = CGImageCreate(size.width, size.height, 8, 24,
                                    imgSizePerRow, colorSpaceRef,
                                    kCGBitmapByteOrderDefault, providerRef,
                                    NULL, YES, kCGRenderingIntentDefault);

CGContextDrawImage(context, rect, imageRef);

CGImageRelease(imageRef);
CGColorSpaceRelease(colorSpaceRef);
CGDataProviderRelease(providerRef);

внимание: я проверяю соответствие пикселя строки временам 4

Мой gdi генерирует поток битов, в данном случае, формат R8G8B8, без альфа-канала, я использую это для CGDataProviderRef и рисую CGImage на мой взгляд. Странно, что цвет изображения кажется измененным, но в целом форма выглядит нормально, я сохраняю поток битов с помощью BITMAP FORMAT в файл раньше и делаю контраст, все выглядит нормально, только все цветовое пространство.

МОЖЕТ кто-нибудь сказать мне, где моя ошибка в коде, или я пропущу какой-то пункт. установка?

Ответы [ 2 ]

3 голосов
/ 16 апреля 2009

CGImageCreate принимает необработанные пиксели, которых нет в файле .bmp (он имеет заголовок «BITMAPINFO»). Вместо этого создайте UIImage с данными .bmp, затем получите CGImage из этого объекта.

1 голос
/ 17 апреля 2009

Я упустил важный момент: мой битовый поток GDI упорядочен по B8-> G8-> R8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...