我正在使用以下代码创建单色图像:

  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?如何反转黑白?

最佳答案

这是一些用于创建和绘制单色图像的代码。与您的相同,但具有更多上下文(并且无需进行必要的清理):

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};,我总是会得到黑色图像。
如果您尝试过但没有任何效果(您说使用任何值都会得到相同的图像),或者:您实际上没有传递这些值,但您认为自己是,或者:某种程度上您不是。实际检查CGImageCreate的输出。

08-08 06:22