gpt4 book ai didi

cocoa - 使用解码数组创建 CGImage 时,输出的所有像素都会有少量偏移

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

非常奇怪的行为,但我认为我已经尽可能缩小了问题的范围

我有一个NSImage,我们称之为inputImage。它由 CGColorSpaceCreateDeviceGray 中的 NSBitmapImageRep 表示(如果重要的话)

我想从中创建一个 CGImageRef,但颜色反转。

  NSData *data = [inputImage TIFFRepresentation];
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);

NSBitmapImageRep *maskedRep = (NSBitmapImageRep*)[inputImage representations][0];
CGFloat decode[] = {0.0, 1.0};

maskRef = CGImageMaskCreate(maskedRep.pixelsWide,
maskedRep.pixelsHigh,
8,
maskedRep.bitsPerPixel,
maskedRep.bytesPerRow,
provider,
decode,
false);

NSImage *testImage = [[NSImage alloc] initWithCGImage:maskRef size:NSMakeSize(1280,1185)]; //the size of the image, hard-coded for testing
NSLog(@"testimage: %@", testImage);

问题是当我查看testImage时,所有像素都从原始图像稍微向右偏移。

输入图像:
enter image description here

测试图像:
enter image description here

如果保存图片,查看起来要容易得多,但您会注意到 testImage 中的所有内容都向右偏移了大约 5 个像素左右。您会在 testImage

中看到黑色内容左侧有一个白色间隙

在我的 5 行代码中的某个地方,我以某种方式移动了我的图像。有人知道这是怎么发生的吗?我目前怀疑 TIFFRepresentation

最佳答案

您传递给CGImageMaskCreate()的数据提供者应该是其他参数指定形式的原始像素,而不是图像文件格式。您不应该传递 TIFF 数据。坦率地说,我很惊讶你得到了与原始图像非常相似的东西,而不是噪音/垃圾。我猜测 TIFF 数据没有被压缩,这纯属偶然。实际上,您可以在蒙版的左上角看到一些噪声,这是解释为像素的 TIFF header 。

也许,您最好的选择是从您的 inputImage 创建一个 CGImage (或者,根据 inputImage 的创建方式,跳过 >NSImage 并使用 CGImageSource API 或 CGImageCreateWith{JPEG,PNG}DataProvider() 直接从文件创建 CGImage 。要从 NSImage 获取 CGImage,请使用 -CGImageForProfusedRect:context:hints:

然后,从该 CGImage 获取数据提供程序,并使用从中查询的各种属性(宽度、高度、bpp 等)从中创建掩码 CGImage第一个 CGImage 使用各种 CGImageGet... 函数。

关于cocoa - 使用解码数组创建 CGImage 时,输出的所有像素都会有少量偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38446458/

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