在 OSX 上显示带 alpha 通道的图像

Displaying an image with alpha channel on OSX

我正在尝试在 window 中显示 32 位、4 通道图像。图像中的第四个通道是 alpha 通道。作为实验,我创建了一个完全红色的图像,其中每个像素都具有 RGB 值:255,0,0。对于每个像素,我还添加了 204 的 alpha 值。

我希望看到的是具有一定透明度的完全红色图像,但我看到的是具有更改值的完全不透明图像。

预期输出:

当前输出:

我使用的代码:

NSRect windowRect = {0,0,200,200};

m_NSWindow = [[NSWindow alloc] initWithContentRect:windowRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];

[m_NSWindow setTitle:@"overlayWindow"];

[m_NSWindow makeKeyAndOrderFront:nil];

g_imageView = [[NSImageView alloc] initWithFrame:NSMakeRect(0,0,200,200)];

[m_NSWindow.contentView addSubview:g_imageView];



[m_NSWindow setOpaque:NO];

[m_NSWindow setAlphaValue:1.0];



NSBitmapImageRep* imageRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:nil

                                                                     pixelsWide:200

                                                                     pixelsHigh:200

                                                                  bitsPerSample:8

                                                                samplesPerPixel:4

                                                                       hasAlpha:YES

                                                                       isPlanar:NO

                                                                 colorSpaceName:NSDeviceRGBColorSpace

                                                                bitmapFormat:NSAlphaNonpremultipliedBitmapFormat

                                                                    bytesPerRow:(200*4)

                                                                   bitsPerPixel:32];



memcpy(imageRep.bitmapData,m_paintBuffer.data,160000);

NSSize imageSize = NSMakeSize(200,200);

NSImage* myImage = [[NSImage alloc] initWithSize: imageSize];

[myImage addRepresentation:imageRep];

[g_imageView setImage:myImage];

其中 m_paintBuffer.data 指向图像的原始像素数据。 不确定它是否与问题相关,但是 m_paintBuffer 是来自 OpenCV

的 Mat 类型

window 的内容视图并不是 window 的全部内容。即使是无边界的 window 也有围绕和包含内容视图的(私有)主题视图。

特别是,window 的背景颜色为浅灰色。这是绘制的 "behind" 您的内容视图并且是不透明的。但是,您可以通过将 window 的 backgroundColor 属性 设置为 [NSColor clearColor] 来更改它。这就是你应该做的来达到你想要的效果。