Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 解码CGCreateImage中忽略的值_Cocoa_Quartz Graphics_Quartz 2d_Cgimage - Fatal编程技术网

Cocoa 解码CGCreateImage中忽略的值

Cocoa 解码CGCreateImage中忽略的值,cocoa,quartz-graphics,quartz-2d,cgimage,Cocoa,Quartz Graphics,Quartz 2d,Cgimage,我正在使用以下代码创建单色图像: CGColorSpaceRef cgColorSpace = CGColorSpaceCreateDeviceGray(); CGImageRef cgImage = CGImageCreate (width, height, 1, 1, rowBytes, colorSpace, 0, dataProvider, decodeValues, NO, kCGRenderingIntentDefault); 其中,decodeValues是由2个CGFl

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

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

以下是一些用于创建和绘制单声道图像的代码。它与您的相同,但有更多的上下文(并且没有必要的清理):

如果我将解码数组更改为
CGFloat decode[]={0.0,0.0}我总是得到一个黑色的图像。

如果您尝试过,但没有任何效果(您说无论使用什么值,您都会得到相同的图像),或者:您实际上没有传递这些值,但您认为自己传递了这些值,或者:您实际上没有检查CGImageCreate的输出。

要反转黑白,只需交换解码值即可。而且它确实有效。您需要发布更多的真实代码,而不仅仅是函数声明并说“它不起作用”。请不要走错路,我很想知道是什么导致了你的问题。
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 );