1. 程式人生 > >vc win32 gdi+ 怎麼顯示PNG圖片

vc win32 gdi+ 怎麼顯示PNG圖片

各位大哥看看,為什麼我顯示的PNG圖片有黑框???PNG圖片的邊緣為漸變透明的。漸變透明的地方變成了黑框

BOOL OnEraseBkgnd()
{

 HBITMAP hBitmap;
 BITMAP m_bitmap;


 hBitmap=LoadImgFormRs(IDR_PNG_StatusBar,L"PNG");
 GetObject(hBitmap,sizeof(BITMAP),&m_bitmap);


 HDC hDC,hDCmem;
 PAINTSTRUCT ps;


 hDC=BeginPaint(g_hWnd,&ps);
 hDCmem=CreateCompatibleDC(hDC);
 SelectObject(hDCmem,hBitmap);


 RECT rc;
 GetClientRect(g_hWnd,&rc);


 StretchBlt(hDC,0,0,rc.right,rc.bottom,hDCmem,0,0,m_bitmap.bmWidth,m_bitmap.bmHeight,SRCCOPY); 
 EndPaint(g_hWnd,&ps);
 DeleteDC(hDCmem);
 DeleteObject(hBitmap);
 return TRUE;
}

LoadImgFormRs函式返回HBITMAP 

HBITMAP  LoadImgFormRs(UINT pResourceID,LPCTSTR pResourceType)
{
 GdiplusStartupInput gdiplusStartupInput;
 ULONG_PTR  m_gdiplusToken;
 Gdiplus::GdiplusStartup(&m_gdiplusToken,&gdiplusStartupInput,NULL);//初始化GDI

 HBITMAP     hBitmap=NULL;
 HINSTANCE      hInstance;
 HRSRC          hResource;
 DWORD           dwRsSize;
 HGLOBAL           hRsBuf;
 const void*      pRsData;
 IStream* pIStream = NULL;


 hInstance=::LoadLibrary(L"Resources.dll");


  if(!hInstance)
  return NULL;

 hResource=FindResource(hInstance,MAKEINTRESOURCE(pResourceID),pResourceType);
 if(!hResource)
  return NULL;

 dwRsSize=SizeofResource(hInstance,hResource);
 if(!dwRsSize)
  return NULL;

 pRsData=LockResource(LoadResource(hInstance,hResource));
 if(!pRsData)
  return NULL;

 hRsBuf=GlobalAlloc(GMEM_MOVEABLE,dwRsSize);
 if (!hRsBuf)
 {
  GlobalFree(hRsBuf);
  return NULL;
 }


 void* pRsBuf = GlobalLock(hRsBuf);
 if(!pRsBuf)
 {
  GlobalUnlock(hRsBuf);
  GlobalFree(hRsBuf);
  return NULL;
 }

 CopyMemory(pRsBuf, pRsData, dwRsSize);

 if(CreateStreamOnHGlobal(hRsBuf, FALSE, &pIStream)==S_OK)
 {
  Gdiplus::Image *pImage = Gdiplus::Image::FromStream(pIStream);
  Gdiplus::Bitmap *pBitmap = Gdiplus::Bitmap::FromStream(pIStream);

  pIStream->Release();
  GlobalUnlock(hRsBuf);
  GlobalFree(hRsBuf);
  Gdiplus::Status result = pBitmap->GetLastStatus();


  if(result==Gdiplus::Ok)
  {
    pBitmap->GetHBITMAP(NULL, &hBitmap);

    
  }
  delete pBitmap;
 }
 GlobalUnlock(hRsBuf);
 GlobalFree(hRsBuf);
 FreeLibrary(hInstance);
 GdiplusShutdown(m_gdiplusToken);
 return hBitmap;
}

相關推薦

vc win32 gdi+ 怎麼顯示PNG圖片

各位大哥看看,為什麼我顯示的PNG圖片有黑框???PNG圖片的邊緣為漸變透明的。漸變透明的地方變成了黑框 BOOL OnEraseBkgnd(){  HBITMAP hBitmap; BITMAP m_bitmap;  hBitmap=LoadImgFormRs(IDR_PN

vc資源中載入png圖片以及顯示

因要做一個小的登陸客戶端,所用圖片格式為png.但較少,所以想直接放到資源中.碰到的第一個問題是.net2003中載入png圖片到資源中總是不成功.試了下發現jpg也不行,jpg圖片會提示"不是正確的JPEG格式",後來用vc6.0開啟資原始檔載入成功的.vs2003中原因還未找到,有知道

win32GDI+載入png圖片作為背景圖

#include <windows.h> #include <gdiplus.h> /* GDI+ startup token */ ULONG_PTR gdiplusStartupToken; /* Declare Windows procedure */ LRESULT CA

android顯示png圖片,原來透明的地方都變成黑色的了

bitmap儲存成圖片的時候要判斷下圖片的格式,之前統一用的Bitmap.CompressFormat.JPEG儲存的。 if(!url.substring(url.lastIndexOf("/") + 1).toUpperCase().contains("PNG")){        bm.compr

mfc picture控制元件顯示png圖片

onpaint函式裡新增程式: CClientDC *pDC = new CClientDC(GetDlgItem(IDC_LIGHT));CRect rect;GetDlgItem(IDC_LIGH

GDI操作PNG圖片

這兩天在做UI,以前做過一點,但是不太熟悉,於是乎就遇到很多的問題。 以前用BITMAP的時候,做的就是畫素COPY,再多一點就是畫素運算,這一切的東西都是有自己控制的。也就是說不參雜alpha通道。 話說今天我用PNG圖片,但是用到一個小圖片的時候,圖片總是不能正常顯示。

基於GDI顯示png圖像

clas mat 錯誤 api 尺寸 cat www. mds rbac intro 先前基於GDI已經能夠顯示BITMAP圖像:windows下控制臺程序實現窗口顯示 ,其中BMP圖像是使用LoadImage()這一Win32 API函數來做的。考慮到LoadImage(

Win32從資源中載入PNG圖片,然後建立GDI+的Image物件

void LoadPNGFromStaticRes(HMODULE hModule, UINT nResId, Image** ppImg) { HRSRC hRes = FindResource(hModule, MAKEINTRESOURCE(nResId), TEXT("PNG"))

vc++載入透明png圖片方法——GDI+和CImage兩種

先看看GDI+的方法 方法1: 1.GDI+畫透明圖層(alpha)的png圖片 stdafx加入如下: #include <comdef.h>//初始化一下com口 #include "GdiPlus.h" using namespace Gdiplus; #pragma commen

nginx+gridfs+mongodb 配置訪問png圖片顯示無法加載問題

nginx配置文件 做了 nginx配置 副本 server port 問題 模塊 bject 上傳文件後,瀏覽器中請求:http://&lt;nginx server ip>:<port>/gfs/<my file> 瀏覽器出現“無法

VC 下加載 JPG / JPEG / GIF / PNG 圖片最簡單的方法

png 最簡 api dsm () load div mod bind VC MFC 提供的 API LoadBitmap / LoadImage 類 CBitmap 等都只能操作 BMP 位圖,圖標。對於其他常用的 JPG / JPEG / GIF / PNG 格式,

【html+css3】在一張jpg圖片上,顯示多張透明的png圖片

*** 放置 技術分享 一個 col 標簽 ech 透明 image 1、需求:在一個div布局裏面放置整張jpg圖片,然後在jpg圖片上顯示三張水平展示的透明png圖片,且png外層用a標簽包含菜單 2、效果圖: 3、上圖,底層使用藍色jpg圖片,【首頁】、【購物車】、【

vs2010 MFC使用GDI+顯示圖片

轉載:https://blog.csdn.net/yal179/article/details/32726925 推薦:已程式設計驗證,小錯誤已修正,值得學習,也可以看下原文,修改後的文章比原文容易讀一些。 1、配置GDI+ VS2010自帶GDI+,直接使用。 (

Windows7無法顯示.png、.jpg圖片縮圖的問題

實驗環境(藍色粗體字為特別注意內容) 1,環境:Windows 7 Ultimate 2,參考文獻http://www.xiazaizhijia.com/rjjc/20481.html 今天開啟電腦的時候突然發現電腦的.png檔案和.jpg檔案的圖示都無法正常顯示,其他格式的縮圖比如wo

emWin - png圖片壓縮與不壓縮顯示速度

原文連結:png圖片壓縮與不壓縮顯示速度 背景:圖片是通過BmpCvtST工具生成dta檔案放到外部FLASH中。 下圖第一部分是從外部FLASH中讀取圖片的資料,第一個引數是讀取資料存放到一個數組,第二個引數是該圖片在FLASH中的起始地址,第三個引數是讀取多少位元組數,也就是圖片的資

圖片播放器(七):PNG圖片顯示函式

1.思路分析 (1)png更像是jpg而不像是bmp (2)png和jpg都是壓縮格式的圖片,都是二進位制檔案,不同之處是壓縮和解壓縮的演算法不同。 (3)通過libjpeg來編解碼jpg圖片,那麼同樣有一個libpng用來編解碼png圖片。 (4)工作思路和順序:找到並移植並部署libpn

用CImage類來顯示PNG JPG等圖片

系統環境:Windows 7 軟體環境:Visual Studio 2008 SP1 本次目的:實現VC單文件、對話方塊程式顯示圖片效果       CImage 是VC.NET中定義的一種MFC/ATL共享類,也是ATL的一種工具類,它提供增強型的

關於png圖片在AndroidStudio上顯示有白色邊框的解決辦法

這幾天正在開發我自己做的一款APP,手機桌布類的,然後要在歡迎頁上加上一個按鈕圖片 看是不是非常的不美觀,根本就達不到自己的要求,然後就不斷的百度啊,PS我是學過一點的,對於一般的摳圖,還是沒有問題的,可是無論習存什麼樣的圖片格式,屏png,gif支援透明背景的放在這個位置都不行,頭痛了一

使用GDI+和CImage類載入png圖片

    本文的方法可以載入bmp、jpg、png等多種格式的圖片,但由於大多軟體都使用可帶透明色的png圖片,所以以載入png圖片為研究切入點,找到對應的載入辦法。本文結合TrueLink程式碼的實際使用情況,分別講述使用GDI+和CImage來載入png圖片的方法,並對

網頁PNG圖片顯示

具體症狀是:以IE為核心的瀏覽器包括ie都打不開png格式的網頁圖片,如果以純連結開啟網路png圖片則提示下載或無法開啟。 可能原因是: 1.解除安裝了Kmplayer 2.裝了quiktime等軟體改寫了登錄檔 3.自己的檔案設定有問題 具體解決辦法: