加载TIFF时,NSImage initWithContentsOfURL缺少alpha通道

时间:2014-11-10 21:14:36

标签: macos tiff nsimage

在我的应用程序中,我使用initWithContentsOfURL将各种类型的图像(JPEG,TIFF,PNG,GIF等)加载到图像中,然后加载到OpenGL纹理中。

使用Alpha通道加载图像的唯一类型是png。 (在上面的列表中,只有PNG和TIFF 可以包含alpha数据。)如果我尝试加载.tiff图像,它会在没有Alpha通道的情况下加载(图像的图像代表报告) alpha = NO,它报告bitsPerPixel为24.

我可以在PS中编辑带有alpha的图像,将其保存为PNG和TFF,并且PNG在我的程序中加载alpha但不包含TIFF。此外,我可以打开PS中的TIFF图像并确认它确实有alpha数据。

我在这里缺少什么?为什么我的TIFF图像没有加载alpha通道?还有另一个appkit调用,我可以加载我的TIFF而不会丢弃地板上的alpha通道吗?

编辑:

自发布此问题以来,我发现某些4通道TIFF加载了alpha数据,而有些则没有。我还没有弄清楚哪种工作流程会产生不同的结果。

此文件在Photoshop中加载了Alpha通道,但如果您使用-[[NSImage alloc] initWithContentsOfURL]在Cocoa中加载它,则无法加载:

Image "Red Julia Seahorse crop"

同样具有alpha通道的图像使用上面的Cocoa调用加载alpha:

Image "Transparent Seahorses"

2 个答案:

答案 0 :(得分:2)

我刚试过(OSX 10.9.4)并且图片加载完成了渐变透明度。我使用的代码很简单:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Insert code here to initialize your application
    NSURL *imageURL = [NSURL URLWithString: @"file:/Users/john/Desktop/test.tiff"];
    NSImage *image = [[NSImage alloc] initWithContentsOfURL: imageURL];
    self.imageView.image = image;
}

我使用图层创建了一个TIFF,没有图层(两个测试)。两者都有效。我尝试了几个不同的NSImageView背景来验证渐变透明度是真实的。 (如果在IB中选择不同的图像视图边框样式,背景颜色也会发生变化)。

我使用Photoshop 12(CS5)创建图像,并在保存时手动选中“TIFF选项”对话框中的“保存透明度”复选框。

希望这里的某些内容可以帮助您解决问题。从我的测试来看,它都按预期工作。

答案 1 :(得分:1)

问题在于图像的保存方式,很可能是使用的TIFF选项。

使用你的两张照片," Red Julia Seahorse Crop"图像没有显示透明度,但是"透明海马"正确显示透明度。

我打开了红色茱莉亚海马作物"在Photoshop中重新保存图像(未更改),但确保"保存透明度"在" TIFF选项"中选择了复选框。对话框。保存后,该图像现在可以在应用程序中正确显示透明度。

screen shot TIFF options screen shot output from application