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 );