gpt4 book ai didi

cocoa - 使用 CGBitmapContextCreate 始终为黑色的 32 位灰度图像

转载 作者:行者123 更新时间:2023-12-03 17:16:22 25 4
gpt4 key购买 nike

我使用以下代码来显示 32 位灰度图像。即使我明确地将每个像素设置为 4294967297(应该是白色),最终结果始终是黑色。我在这里做错了什么?该图像只有 64x64 像素。

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
ptr = (float*)malloc(4*xDim*yDim);
for(i=0;i<yDim;i++)
{
for(j=0;j<xDim;j++)
{
ptr[i*xDim + j] = 4294967297;
}
}
CGContextRef bitmapContext = CGBitmapContextCreate(
ptr,
xDim,
yDim,
32,
4*xDim,
colorSpace,
kCGImageAlphaNone | kCGBitmapFloatComponents);

//ptr = CGBitmapContextGetData(bitmapContext);


//NSLog(@"%ld",sizeof(float));

CGImageRef cgImage = CGBitmapContextCreateImage(bitmapContext);

NSRect drawRect;
drawRect.origin = NSMakePoint(1.0, 1.0);
drawRect.size.width = 64;
drawRect.size.height = 64;
NSImage *greyscale = [[NSImage alloc] initWithCGImage:cgImage size:NSZeroSize];
[greyscale drawInRect:drawRect
fromRect:NSZeroRect
operation:NSCompositeSourceOver
fraction:1.0];

最佳答案

如果不指定字节序,Quartz 将默认为大字节序。如果您使用的是 Intel Mac,则这是错误的。您需要显式设置字节顺序,最好的方法是将您的标志更改为:

kCGImageAlphaNone | kCGBitmapFloatComponents | kCGBitmapByteOrder32Host

无论您的 CPU 是什么,这都可以正常工作(为了将来的兼容性!)。您可以在这里找到更多详细信息:http://lists.apple.com/archives/Quartz-dev/2011/Dec/msg00001.html

关于cocoa - 使用 CGBitmapContextCreate 始终为黑色的 32 位灰度图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5464784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com