मुझे अल्फा चैनल के साथ बीएमपी छवियों को प्रदर्शित करने के लिए कस्टम नियंत्रण बनाने की आवश्यकता है। पृष्ठभूमि को विभिन्न रंगों में चित्रित किया जा सकता है और छवियों में छाया होती है इसलिए मुझे अल्फा चैनल को वास्तव में "पेंट" करने की आवश्यकता होती है।32-बिट अल्फा चैनल बिटमैप्स कैसे आकर्षित करें?
क्या कोई जानता है कि यह कैसे करें?
मैं यह भी जानना चाहता हूं कि अल्फा चैनल जानकारी का उपयोग करके मास्क बनाना संभव है या नहीं, यह जानने के लिए कि माउस छवि पर या पारदर्शी क्षेत्र पर क्लिक किया गया है या नहीं।
किसी भी प्रकार की सहायता की सराहना की जाएगी!
धन्यवाद।
संपादित (जेडीपेड्रो): जैसा कि आप में से कुछ ने सुझाव दिया है कि मैं अल्फा चैनल के साथ बिटमैप पेंट करने के लिए अल्फा मिश्रण का उपयोग करने का प्रयास कर रहा हूं। यह सिर्फ एक परीक्षण मैं क्रियान्वित किया है, जहां मैं संसाधनों से एक 32-बिट बिटमैप लोड और मैं AlphaBlend समारोह का उपयोग कर इसे पेंट करने के लिए प्रयास करें:
void CAlphaDlg::OnPaint()
{
CClientDC dc(this);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP);
BITMAP BitMap;
bitmap.GetBitmap(&BitMap);
int nWidth = BitMap.bmWidth;
int nHeight = BitMap.bmHeight;
CBitmap *pOldBitmap = dcMem.SelectObject(&bitmap);
BLENDFUNCTION m_bf;
m_bf.BlendOp = AC_SRC_OVER;
m_bf.BlendFlags = 0;
m_bf.SourceConstantAlpha = 255;
m_bf.AlphaFormat = AC_SRC_ALPHA;
AlphaBlend(dc.GetSafeHdc(), 100, 100, nWidth, nHeight, dcMem.GetSafeHdc(), 0, 0,nWidth, nHeight,m_bf);
dcMem.SelectObject(pOldBitmap);
CDialog::OnPaint();
}
यह सिर्फ एक परीक्षण तो मैं की OnPaint में कोड डाल है संवाद (मैंने सीडीसी ऑब्जेक्ट के अल्फाब्लेंड फ़ंक्शन का भी प्रयास किया)।
गैर-पारदर्शी क्षेत्रों को सही ढंग से चित्रित किया जा रहा है लेकिन मुझे सफेद मिलता है जहां बिटमैप पारदर्शी होना चाहिए।
कोई मदद ???
यह एक screenshot..it को देखने के लिए आसान नहीं है लेकिन वहाँ नीले वृत्त के चारों ओर एक सफेद आयत है: alt text http://img385.imageshack.us/img385/7965/alphamh8.png
ठीक है। मैं समझ गया! मुझे अल्फा मान के लिए प्रत्येक पिक्सेल को पूर्व-गुणा करना होगा। कोई ऐसा करने के लिए अनुकूलित तरीका सुझा सकता है?
हाय मार्क, की अगर देखते हैं मैं अपने सुझाव को समझें। कल्पना कीजिए कि मैं CSTatic/CWnd से अपना नियंत्रण प्राप्त करता हूं और मैं सदस्य के रूप में एक सीबीआईटीमैप जोड़ता हूं। फिर हर बार जब नियंत्रण पेंट किया जा रहा है (ऑनपेंट विधि में) मुझे पृष्ठभूमि प्राप्त करना है और मेरी छवि के साथ मिश्रण बनाना है? –
(जारी रखें) क्या मैं सही हूँ? क्या मुझे अपने आप से सब कुछ करना है? ऐसा लगता है क्योंकि इसमें उच्च प्रदर्शन लागत हो सकती है ... क्या आप (कोई भी) मुझे ऐसा करने का सबसे अच्छा तरीका (अधिक इष्टतम) बता सकता है? शायद कुछ भयानक लेख या यहां तक कि codenippet? धन्यवाद। –