我想知道我裝入的QImage
是否包含alpha通道。我已經知道QImage::hasAlphaChannel()
可以告訴我,如果我使用的圖像格式支持alpha通道,但有沒有辦法知道它是否實際上在加載的圖像中使用?檢查QImage是否有alpha通道
回答
這裏你有我的代碼來檢查alpha是否真的被使用。當圖像位於ARGB32時非常有用。
bool useAlpha = false;
const uchar* pixelData = image.bits();
int bytes = image.byteCount();
for (const QRgb* pixel = reinterpret_cast<const QRgb*>(pixelData); bytes > 0; pixel++, bytes -= sizeof(QRgb)) {
if (qAlpha(*pixel) != UCHAR_MAX) {
useAlpha = true;
break;
}
}
還記得還有format()方法。
我讀過你應該儘可能使用'static_cast'而不是'reinterpret_cast'。我的編譯器不會讓我在這種情況下使用'static_cast'。你能解釋一下在這種情況下使用'reinterpret_cast'是什麼,以及爲什麼'static_cast'不起作用? – Pieter 2011-05-28 09:23:57
@Pieter [QRgb](http://doc.qt.nokia.com/4.7/qcolor.html#QRgb-typedef)('unsigned int')與uchar('unsigned char')是不同的類型,因此指針是不相容。 'static_cast'只對相關類型(如類及其子類)有用。檢查:http://www.cplusplus.com/doc/tutorial/typecasting/。 [bits()](http://doc.qt.nokia.com/4.7/qimage.html#bits)返回指向第一個像素數據的指針,正如我之前所說的,我認爲該圖像是32bpp格式,到QRgb *是安全的並且實際上是必需的,正如[scanline()](http://doc.qt.nokia.com/4.7/qimage.html#scanLine)說明所解釋的那樣。 – przemoc 2011-05-28 09:40:21
感謝您的幫助! – Pieter 2011-05-28 10:59:32
如果將加載QImage
的格式設爲Alpha通道,則您的QImage
具有Alpha通道。
如果您正在檢查圖像中任何具有Alpha通道的像素實際上是否將任何像素設置爲不透明的像素,您可以嘗試使用QImage::createAlphaMask()
生成Alpha遮罩並檢查其像素值。
[createAlphaMask()](http://doc.qt.nokia.com/4.7/qimage.html#createAlphaMask)在這裏沒有任何理由。 IOW:沒有理由爲了檢查其內容而創建另一個QImage,因爲您可以在原始圖像中執行此操作。重要的是,這種方法的圖像是1bpp,因此會丟失信息。 – przemoc 2011-05-27 22:00:27
- 1. 模糊QImage alpha通道
- 2. 如何檢測位圖是否具有.NET中的Alpha通道
- 3. 如何檢查加載到FMX.TBitmap的PNG圖像是否有alpha通道?
- 4. 檢測系統是否支持alpha通道(通過wxWidgets)
- 5. 是否有可能知道DOM/JavaScript圖像是否具有Alpha通道
- 6. HDC是否使用alpha通道?
- 7. delphi TBitmap是否支持alpha通道
- 8. 在QImage中設置每個像素的alpha通道
- 9. QT更改QImage alpha
- 10. 是否有可能使24 bpp和沒有alpha通道的NSBitmapImageRep?
- 11. 如何檢測QImage是否爲動畫?
- 12. 在Windows/D3D中檢測.png alpha通道
- 13. Alpha通道模糊
- 14. 這段代碼爲什麼會讓QImage失去它的alpha通道?
- 15. Qt -QImage是否有將Qimage粘貼到另一個Qimage中的方法?
- 16. 檢查是否有等待通知
- 17. 檢查是否有
- 18. 是否將ARGB_8888加載JPEG圖像時使用了alpha通道?
- 19. 是否可以將Windows位圖與Alpha通道轉換爲MagickImage?
- 20. 確定是否alpha通道,在影像中使用
- 21. OpenCV - 如何檢測帶有alpha通道的標記
- 22. SetPixelFormat沒有爲OpenGL創建Alpha通道
- 23. wxImage在win32上沒有alpha通道
- 24. 只有alpha通道的GetPixels和SetPixels
- 25. 帶有Alpha通道的WPF 3D紋理
- 26. WCF雙工通道:檢查回調通道是否仍然可用
- 27. AVFoundation(OS X)是否支持透明回放帶有Alpha通道的視頻?
- 28. 清除NSImage的alpha通道
- 29. 24位Alpha通道中BASE64_ENCODE
- 30. StretchBlt和過濾alpha通道
「二手」是什麼意思?至少有一個像素與alpha不同,不透明? – vines 2011-05-27 20:34:14
@vines是的,這就是我的意思。 – Pieter 2011-05-28 10:48:53