【问题标题】:Core image CIImage 8 bit grayscale核心图像 CIImage 8 位灰度
【发布时间】:2021-04-13 09:13:22
【问题描述】:

我想做两件事:
1) 将 8 位灰度图像加载为 8 但灰度图像
2) 保存为8位灰度图

我尝试通过 [CIImage imageWithContentsOfURL:options]` 将图像加载到 CIImage。 据我了解,我可以在项目选项中指定一些选项。但我没有找到任何信息如何做到这一点。在参考 CIImage 时,我发现只有这些像素格式:

extern CIFormat kCIFormatARGB8;
extern CIFormat kCIFormatRGBA16;
extern CIFormat kCIFormatRGBAf;
extern CIFormat kCIFormatRGBAh;

这是什么意思?无法通过 CIImage 加载和保存 8 位灰度图像?

【问题讨论】:

    标签: objective-c macos cocoa image-processing core-image


    【解决方案1】:

    不,没有 8 位灰度的格式。你想做什么?还有其他方法可以使用 8 位灰度创建图像,但如果没有更多信息,很难告诉您建议什么。

    如果您要使用 CoreImage 来操作它,您需要将其放入上述 RGB 格式之一。但是,如果您不打算使用 CoreImage 来操作它,您可能能够以您想要的格式创建一个 NSImage(通过创建一个 NSBitmapImageRep)或一个 CGImage(参见 CGImageCreate())。

    【讨论】:

    • 我想做 2 件事:1) 更改几何图形(如调整大小、裁剪和画布)2) 我想更改图像的亮度/对比度。对于第二个任务,我想在 Image Core 中使用过滤器。
    • 你是对的,CoreImage 是最简单的方法。您可以加载 RGB 图像并使用 CoreImage 进行操作,然后将其保存为灰度。 (您提到的那些操作都不应该添加颜色。)或者您可以使用 glsl 使用 OpenGL 来完成,这涉及更多。 (或者您可以编写自己的基于 CPU 的过滤器,这也是很多工作。)
    【解决方案2】:

    将 CIImage 保存为灰度图像格式就这么简单:

    CGColorSpaceRef cs = CGColorSpaceCreateWithName(kCGColorSpaceGenericGrayGamma2_2);
    NSData *outData = [ctx PNGRepresentationOfImage:input
                              format:kCIFormatL8
                              colorSpace:cs
                              options:@{}];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      • 2021-11-17
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多