2009-10-07 14 views
6

में चित्र नियंत्रण में पीएनजी को प्रोग्रामेटिक रूप से सेट करना मैं विजुअल स्टूडियो 2008 का उपयोग करता हूं, मेरे पास संसाधन दृश्य में लोड की गई पीएनजी फ़ाइल है, इसे आईडीबीबीएएनजीजीएनजी असाइन किया गया है।Win32 एपीआई

चित्र नियंत्रण आईडीसी_STATIC15 कहा जाता है।

मुझे तस्वीर नियंत्रण में पीएनजी लोड करने की कोशिश करने में परेशानी हो रही है।

LRESULT CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 
{ 

// Way of loading a bmp with a mask perhaps? Or a PNG file programatically? 

static HBRUSH hBrushStatic; 
HBITMAP hBmp = LoadBitmap(hDlg,MAKEINTRESOURCE(IDB_BANG_PNG)); 

switch(message) 
{ 
case WM_INITDIALOG:  
    CheckDlgButton(hDlg, IDC_CHECK, FALSE); 
    EnableWindow(GetDlgItem(hDlg, IDOK), FALSE); 
    // Bitmap version is IDB_BANG, PNG is at IDB_BANG_PNG 
    // IDC_STATIC15 is the picture frame 
    HWND item = GetDlgItem(hDlg,IDC_STATIC15); 
    SendMessage(item,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)hBmp); 
    return TRUE; 

// .... snip 

मैं नहीं बल्कि अनुभवहीन हूँ जब यह, Win32/जीयूआई विकास की बात आती है एक त्वरित प्रोजेक्ट कर और उसे अटक गया, किसी भी मदद की सराहना की है।

+0

आपको बिटमैप फ़ाइल की आवश्यकता है। आप पीएनजी छवि को बीएमपी छवि में कनवर्ट करना चाहते हैं। – anno

+0

मैंने पढ़ा है कि आप पीएनजी का समर्थन कर सकते हैं लेकिन आपको इसे प्रोग्रामिक रूप से करना है। जब मैं एचटीई छवि फ़िल्टर का उपयोग कर छवियों को जोड़ता हूं, * .png सूचीबद्ध वस्तुओं में से एक है। –

+0

समस्या यह है कि, मैं पारदर्शी पृष्ठभूमि को बनाए रखना चाहता हूं, इसलिए मैं पीएनजी का उपयोग क्यों करना चाहता हूं। जब तक, मैं बीएमपी का उपयोग करके एक मुखौटा बना सकता हूं, या आईसीओ फ़ाइल को 32x32 के बजाय बड़े आकार के आइकन का उपयोग करने की अनुमति नहीं देता। –

उत्तर

0

व्यक्तिगत रूप से, मैं CPictureEx कक्षा का उपयोग करता हूं। मुझे लगता है कि यह पीएनजी का समर्थन नहीं करता है, लेकिन बीएमपी, जेपीईजी और एनिमेटेड gif।

मैं विशेष प्रतिपादन के लिए Cairo ग्राफिक्स का भी उपयोग करता हूं। काहिरा पीएनजी प्रारूप का समर्थन करता है।
बेशक काहिरा उपयोग करने में थोड़ा मुश्किल है।

+0

इस परियोजना पर मैं काम कर रहा हूं सी में, सी ++ नहीं है। कक्षाएं, सीआईएमएज, एमएफसी, एट कैटेरा संभव नहीं होगा और संकलित नहीं होंगे। रनटाइम पर एक संवाद में, मैं चित्र नियंत्रण में बीएमपी का उपयोग कैसे करूं? –

4

यह GDI+ का उपयोग कर काम करता है और bitmap class:

Bitmap oBmp(L"D:\\test.png"); 
HBITMAP hBmp; 
oBmp.GetHBITMAP(0, &hBmp); 
SendMessage(item,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)hBmp); 

कुछ caveats.Your नियंत्रण एक SS_BITMAP शैली की जरूरत है। Gdiplus.h और इसकी लाइब्रेरी को शामिल करना न भूलें। आपको प्रारंभ करने की आवश्यकता है (GdiplusStartup) और बंद करें GDI +। सभी सिस्टम संसाधनों को मुक्त करना आपके ऊपर है।

0

क्या आपने देविल/ओपनआईएल लाइब्रेरी की जांच की है? यह फ़ंक्शन नामकरण की ओपनजीएल शैली का पालन करता है और अच्छे ओएल 'सी

में लिखा गया है, मैंने पहले से ही सफलतापूर्वक उपयोग किया है। यह भी बहुत पोर्टेबल है।

यहाँ देखें: http://openil.sourceforge.net/features.php

2

मैं LoadBitmap नहीं लगता कि या किसी अन्य सादा GDI समारोह (जैसे LoadImage) एक PNG लोड होगा।

आप अपने संसाधन को एक 32 संपादन बीएमपी में एक छवि संपादन उपकरण के साथ सहेज सकते हैं और फिर LR_CREATEDIBSECTION के साथ उपयोग कर सकते हैं।

या आप एक लाइब्रेरी का उपयोग कर सकते हैं जो पीएनजी फ़ाइल को DIBSECTION में लोड करेगा। जीडीआई + बीएमपी के अलावा पीएनजी और जेपीजी लोड करेगा।

ओएलई स्वचालन पुस्तकालयों में एक आईपिक्चर इंटरफेस भी है जो आप विभिन्न छवि प्रकारों के साथ तत्काल कर सकते हैं और फिर अंतर्निहित DIBSECTION प्राप्त कर सकते हैं। यह उपयोग करने के लिए अजीब है, खासकर अगर आप COM से परिचित नहीं हैं। शुरुआती बिंदु के लिए OleLoadPicture देखें।