Bir dosyadan PNG'yi Win32 GDI işlevlerini kullanarak bir HBITMAP'e yüklemek mümkün mü? Eğer değilse, dış kütüphaneleri (libpng gibi) kullanmadan en hafif çözüm ne olurdu?Win32/GDI kullanarak bir PNG görüntüsünü nasıl yüklerim (mümkünse GDI + yok)?
cevap
PNG dosyalarını yüklemek için (Windows XP SP2 ve sonraki sürümlerinde) Windows Imaging Component kullanabilirsiniz. API'nin nasıl kullanılacağına ilişkin bir giriş ve bir IStream'den bir PNG yükleyen ve bir HBITMAP'e dönüştüren bir kod örneği için MSDN Magazine'a bakın.
Merhaba Bradley, MSDN dergisinin bağlantısı kesilmiş gibi görünüyor, bağlantıyı güncelleyebilir ve belki de bazı örnek kodları makalenin cevabına ekler misiniz? Teşekkürler! – jrh
@jrh Evet, Microsoft bu sayfayı çekti, ancak arşivlenmiş bir kopya var gibi görünüyor: http://web.archive.org/web/20080507014245/http://msdn.microsoft.com/en-us/magazine /cc500647.aspx –
Microsoft'un [eski sorunları chm biçimine dönüştürdüğünü] unutmayın (http://download.microsoft.com/download/3/A/7/3A7FA450-1F33-41F7-9E6D-3AA95B5A6AEA/MSDNMagazineApril2008en-us. chm) - isterseniz, cevaba kod ekleyen bir düzenleme önerebilirim. – jrh
Sen StretchDIBits
API ile bunu yapabilir baktı ama OS/sürücü kullanılabilirliği ile sınırlıdır, GDI png destekler düşünmeyin.
http://msdn.microsoft.com/en-us/library/dd145121(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/dd145107(VS.85).aspx
Umarım bu konuda ilgilenen adamlar yanıltıcı için özür dileriz. Hatamı düzeltmeme izin verin. PNG çizim için Hayır StretchDIBits
. WIC yöntemini denemeli veya projelerinizde GDI + 'yı entegre etmeyi düşünmelisiniz.
+1 ... kafamı duvara defalarca vurduktan sonra, sonunda bu cevabı gördüğüme sevindim! :) – Mehrdad
+1 İyi biri. Şeffaflığı koruyor mu? – jnm2
Ooch! Bu konuda biraz araştırma yaptım. Aslında GDI cihaz içeriğine PNG resmi çeken bir çalışma kodu yok gibi görünüyor. Birçok StretchDIBits PNG desteği tamamen işe yaramaz işaret ediyor. – 9dan
Windows Görüntüleme Bileşenini, GDI + veya PNG kitaplığını kullanmanıza gerek yoktur. Simge işlevselliğini kullanabilirsiniz.
özel Genişlik ve Yükseklik (Kaynak Editör-> Resim-> Yeni Görüntü Türü) ile VC proje kaynaklarına yeni simgesine (ICO_PNG) ekleyin. Png resminizi buraya kopyalayın ve simgeyi saydamlaştırmak için Doldurma Aracı + saydam rengi kullanın.
- İletişim Kutunuza Picture Control (IDC_PNG) ekleme
Diyalog prosedür kodu:
switch (msg)
{
...
case WM_DRAWITEM:
{
LPDRAWITEMSTRUCT pDIS = (LPDRAWITEMSTRUCT)lParam;
if (pDIS->CtlID == IDC_PNG)
{
HICON hIcon = (HICON)LoadImage(GetModuleHandle(0), MAKEINTRESOURCE(ICO_LOGO), IMAGE_ICON, 0, 0, LR_LOADTRANSPARENT);
DrawIconEx(pDIS->hDC, 0, 0, hIcon, 0, 0, 0, NULL, DI_NORMAL);
DestroyIcon(hIcon);
return TRUE;
}
}
}
Benzer: [LoadImage ve StretchDIBits kullanarak bir PNG görüntüsünü nasıl çekerim?] (Http://stackoverflow.com/questions/4568057/how-would-i-draw-a-png-image-using-loadimage-and- StretchDIBits). Bu cevabın sadece png bir * kaynak * olduğunda işe yaradığını göz önünde bulundurduğumda, bir png dosyasını bağımsız bir dosyadan (ör., Myimage.png) doğrudan yükleyemedim. 'LoadImage' sadece dosyadan .ico simgelerini yüklemeyi destekliyor gibi görünüyor. – jrh
- 1. GDI +? Kullanarak PNG görüntüsünü Alfa kanalları ile yeniden boyutlandırma?
- 2. PNG görüntüsünü NSImage'a nasıl okuyabilirim?
- 3. Gdi +
- 4. Java, GIF görüntüsünü PNG biçimine dönüştürür
- 5. GDI +
- 6. GDI +
- 7. GDI +
- 8. Imagick olmadan PHP'de bir TIFF görüntüsünü PNG/JPG/GIF'e dönüştürme
- 9. Kakao, amaç-c png görüntüsünü yeniden boyutlandırma?
- 10. Png görüntüsünü yeniden boyutlandırma neden şeffaflığı kaybediyor?
- 11. Php görüntü arka plan png görüntüsünü birleştirme
- 12. GDI +? Kullanarak bir görüntünün arka plan rengini nasıl değiştirebilirim?
- 13. Bu PNG sahip bir PNG sprite
- 14. php ve mysql kullanarak müzik nasıl yüklerim
- 15. Codeigniter kullanarak .docx dosyasını nasıl yüklerim? (PHP)
- 16. Özel bir yükleme formunu kullanarak bir dosyayı nasıl wordpress'e yüklerim?
- 17. css kullanarak elemanın duyarlı arka plan görüntüsünü nasıl belirleyebilirim?
- 18. PNG görüntüsünü neden orijinal görüntüden çok daha büyük boyutlandırılıyor?
- 19. Baz64 görüntüsünü nasıl dönüştürebilirim?
- 20. Base64'de kodlanmış bir png görüntüsünü nasıl çözebilirim ve bunu bir ImageView'da görebilir miyim?
- 21. Bir PNG görüntüsünü (bellek akışı olarak) bir .NET ReportViewer rapor yüzeyine nasıl oluşturabilirim?
- 22. Windows'da emacs'i nasıl yüklerim?
- 23. Albümde ffmpeg kullanarak albüm görüntüsünü nasıl alırsınız?
- 24. jpg resmi, PHP kullanarak gif, png & bmp biçimine dönüştürme
- 25. d3heatmap görüntüsünü bir dosyaya kaydetme
- 26. Bir WiX yükleyici kullanarak yükseltilmiş izinlerle nasıl yüklerim?
- 27. Bir png kaynağını CBitMap içine yükleme
- 28. Win32/C++ Kullanarak PNG Okuma
- 29. Png'yi web'den TImage kontrolüne nasıl yüklerim?
- 30. Mümkünse, Python dict'ı JSON'a nasıl dönüştürülür
Sadece küçük ve hızlı olarak mümkün olan her şeyi tutmaya çalışıyorum. Geçmişte GDI + 'nın hızı ile ilgili kötü deneyimler yaşadım. Bir HBITMAP'a ihtiyacım var ve GDI + doğrudan bir HBITMAP'e yüklenmiyor, bu yüzden başka bir kopyasını gerektiriyor. GDI + bir seçenek, en sevdiğim değil. – jnm2