Значения декодирования игнорируются в CGCreateImage - PullRequest
2 голосов
/ 30 апреля 2011

Я создаю монохромное изображение со следующим кодом:

  CGColorSpaceRef cgColorSpace = CGColorSpaceCreateDeviceGray();
  CGImageRef cgImage = CGImageCreate (width, height, 1, 1, rowBytes, colorSpace, 0, dataProvider, decodeValues, NO, kCGRenderingIntentDefault);

, где decodeValues - массив из 2 CGFloat, равный {0,1}. Это дает мне прекрасное изображение, но, по-видимому, мои данные (которые получены из маски изображения PDF) являются черно-белыми, а не белыми на черном. Чтобы инвертировать изображение, я попытался установить значения decodeValues на {1,0}, но это ничего не изменило. На самом деле, какие бы бессмысленные значения я ни указывал в decodeValues, я получаю одно и то же изображение.

Почему decodeValues здесь игнорируется? Как инвертировать черно-белое?

1 Ответ

2 голосов
/ 02 сентября 2011

вот код для создания и рисования моно изображения.Это то же самое, что и у вас, но с большим контекстом (и без необходимой очистки):

size_t width = 200;
size_t height = 200;
size_t bitsPerComponent = 1;
size_t componentsPerPixel = 1;
size_t bitsPerPixel = bitsPerComponent * componentsPerPixel;
size_t bytesPerRow = (width * bitsPerPixel + 7)/8;
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceGray();
CGBitmapInfo bitmapInfo = kCGImageAlphaNone;
CGFloat decode[] = {0.0, 1.0};
size_t dataLength = bytesPerRow * height;
UInt32 *bitmap = malloc( dataLength );
memset( bitmap, 255, dataLength );

CGDataProviderRef dataProvider = CGDataProviderCreateWithData( NULL, bitmap, dataLength, NULL);

CGImageRef cgImage = CGImageCreate (
                          width,
                          height,
                          bitsPerComponent,
                          bitsPerPixel,
                          bytesPerRow,
                          colorspace,
                          bitmapInfo,
                          dataProvider,
                          decode,
                          false,
                          kCGRenderingIntentDefault
                          );  

CGRect destRect = CGRectMake(0, 0, width, height);
CGContextDrawImage( context, destRect, cgImage );

Если я изменю массив декодирования на CGFloat decode[] = {0.0, 0.0};, я всегда получаю черное изображение.Если вы пробовали это, и это не имело никакого эффекта (вы говорите, что получаете одно и то же изображение, какие бы значения вы не использовали), либо: вы на самом деле не передаете эти значения, но вы думаете, что это так, либоt фактически проверяет вывод CGImageCreate.

...