Ich versuche, ein 32bit, 4-Kanal-Bild in meinem Fenster anzuzeigen. Der vierte Kanal im Bild ist ein Alpha-Kanal. Als Experiment erstelle ich ein komplett rotes Bild, bei dem jedes Pixel den RGB-Wert hat: 255,0,0. Für jeden Pixel füge ich auch einen Alpha-Wert von 204 hinzu.Anzeigen eines Bildes mit Alpha-Kanal auf OSX
Was ich erwartet habe, war ein komplett rotes Bild mit etwas Transparenz, aber was ich stattdessen sehe, ist ein völlig undurchsichtiges Bild mit den geänderten Werten.
Der Code Ich verwende:
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];
wo m_paintBuffer.data
Punkte auf die rohen Pixeldaten für das Bild. Nicht sicher, ob es für die Frage relevant ist, aber m_paintBuffer ist vom Typ Mat von OpenCV
Der Alpha-Wert Ihres Fensters ist 100% (1.0), also versuchen Sie es auf 80% '[m_NSWindow setAlphaValue: 0.8];' ... –
Oh nein, aber das wird diesen konstanten Alpha-Wert für alle setzen Pixel. Obwohl ich gerade einen konstanten Alpha-Wert verwende, möchte ich irgendwann einen pro-Pixel-Alpha-Wert verwenden. – TheBlueNotebook
Ihr Beispiel zeigt es für das gesamte Fenster, also wenn Sie es auf dem Bild selbst wollen, dann legen Sie dort alpha. –