2016-05-15 61 views
1

我試圖顯示一個32位的α通道的圖像,4個在我的窗口引導圖像。圖像中的第四個通道是一個alpha通道。作爲一個實驗,我創建了一個完全紅色的圖像,其中每個像素的RGB值爲:255,0,0。對於每一個像素我還加204顯示與在OSX

alpha值我期望看到什麼是有一些透明度完全紅色的形象,但我所看到的卻是與改變的價值觀完全不透明的圖像。

預期輸出: enter image description here

電流輸出: enter image description here

代碼我使用:

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類型

+0

你的窗口的alpha值是100%(1.0),所以嘗試設置爲80%'[m_NSWindow setAlphaValue:0.8];'... –

+0

哦,不,但會爲所有的像素。雖然,現在我使用的是恆定的alpha值,但我最終希望使用每像素的alpha值。 – TheBlueNotebook

+0

你的例子顯示了它的整個窗口,所以如果你想在圖像本身,然後在那裏設置阿爾法。 –

回答

1

窗口的內容視圖不是窗口內容的全部,因爲它是。即使是無邊框的窗口也有圍繞幷包含內容視圖的(私人)主題視圖。

特別地,該窗口具有一個淺灰色的背景色。這是「隱藏」在您的內容視圖之後,並且是不透明的。但是,您可以通過將窗口的backgroundColor屬性設置爲例如[NSColor clearColor]來更改它。這就是你應該做的,以達到你想要的效果。

+0

來自一個Windows背景,我沒有想到主題意見的存在。確實將它設置爲clearColor是缺失的部分。 – TheBlueNotebook