欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

VC++圖片透明技術(shù)原理

透明效果

創(chuàng)新互聯(lián)專注于大渡口網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供大渡口營銷型網(wǎng)站建設(shè),大渡口網(wǎng)站制作、大渡口網(wǎng)頁設(shè)計、大渡口網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)公司服務(wù),打造大渡口網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供大渡口網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

由于所有的圖文件都是以矩形來儲存的,我們也許會需要把一張易拉罐圖片貼到窗口的背景圖上,而這種情況下如果直接進(jìn)行貼圖,結(jié)果如下圖:

VC++圖片透明技術(shù)原理

這似乎不是我們想要的結(jié)果。

為了得到透明效果,我們需要運(yùn)用到BitBlt()貼圖函數(shù)以及其參數(shù)Raster的值來將圖片中不必要的部分去掉(又稱去背),使得圖中的主題可以與背景完美融合。

制作透明效果有很多種方法,但是基本上都是利用貼圖時不同的Raster運(yùn)算,通過轉(zhuǎn)換而產(chǎn)生相同的透明效果。在這里先來介紹一種透明運(yùn)算的方法。

我們以圖中的易拉罐為例子,首先準(zhǔn)備一張位圖,如下圖。

VC++圖片透明技術(shù)原理

圖中的左邊的圖是要去背并貼到背景上的前景圖。右邊的黑白圖稱為“屏蔽圖”,在透明的過程中會用到它。要把去背的位圖與屏蔽圖合并成同一張圖,透明的時候再按照需要來進(jìn)行裁切。可以把它分成兩張圖,但是這樣程序必須運(yùn)行兩次圖文件加載的操作。

有了屏蔽圖就可以利用貼圖函數(shù)來產(chǎn)生透明效果了,所需的貼圖步驟如下:

<1>將屏蔽圖與背景圖做"AND"運(yùn)算,Raster值為SRCAND,貼到目的地DC中。

<2>將前景圖與背景圖做"OR"運(yùn)算,Raster值為SRCPAINT,貼到目的地DC中。

為什么經(jīng)過上面兩個操作就能產(chǎn)生透明的效果呢?看下圖就理解了:

VC++圖片透明技術(shù)原理

下面具體說明上面兩個步驟所產(chǎn)生的圖點(diǎn)色彩的變化。

1.屏蔽圖與背景圖做"AND"運(yùn)算

<1>屏蔽圖中的黑色部分與背景圖做"AND"運(yùn)算:

VC++圖片透明技術(shù)原理

<2>屏蔽圖中的白色部分與背景圖做"AND"運(yùn)算:

VC++圖片透明技術(shù)原理

進(jìn)過這一運(yùn)算所產(chǎn)生的結(jié)果如下圖

VC++圖片透明技術(shù)原理

2.前景圖與背景圖做"OR"運(yùn)算

<1>前景圖中的彩色部分與圖第一步得到的“黑色易拉罐”圖做"OR"運(yùn)算:

VC++圖片透明技術(shù)原理

<2>前景圖中的黑色部分與第一步得到的“黑色易拉罐”圖做"OR"運(yùn)算:

VC++圖片透明技術(shù)原理

經(jīng)過這一運(yùn)算后所顯示的畫面就是所需的透明圖了,如下圖所示:

VC++圖片透明技術(shù)原理

下面我們來看看實(shí)現(xiàn)上述透明貼圖效果的源代碼

[cpp] view plaincopy

  1. #include "stdafx.h"  

  2. //全局變量聲明  

  3. HINSTANCE hInst;  

  4. HBITMAP bg,sprite;        //聲明兩個位圖對象,分別存儲背景圖與前景易拉罐  

  5. HDC  mdc;       //聲明一個內(nèi)存DC"mdc",用來暫存位圖  

  6. //全局函數(shù)聲明  

  7. ATOM     MyRegisterClass(HINSTANCE hInstance);  

  8. BOOL     InitInstance(HINSTANCE, int);  

  9. LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);  

  10. void     MyPaint(HDC hdc);  

  11. ////****Winmain函數(shù),程序入口點(diǎn)函數(shù)**************************************  

  12. int APIENTRY WinMain(HINSTANCE hInstance,  

  13.                      HINSTANCE hPrevInstance,  

  14.                      LPSTR     lpCmdLine,  

  15.                      int       nCmdShow)  

  16. {  

  17. MSG msg;  

  18. MyRegisterClass(hInstance);  

  19. if (!InitInstance (hInstance, nCmdShow))   

  20. {  

  21. return FALSE;  

  22. }  

  23. //消息循環(huán)  

  24. while (GetMessage(&msg, NULL, 0, 0))   

  25. {  

  26. TranslateMessage(&msg);  

  27. DispatchMessage(&msg);  

  28. }  

  29. return msg.wParam;  

  30. }  

  31. //****設(shè)計一個窗口類,類似填空題,使用窗口結(jié)構(gòu)體*************************  

  32. ATOM MyRegisterClass(HINSTANCE hInstance)  

  33. {  

  34. WNDCLASSEX wcex;  

  35. wcex.cbSize = sizeof(WNDCLASSEX);   

  36. wcex.style   = CS_HREDRAW | CS_VREDRAW;  

  37. wcex.lpfnWndProc    = (WNDPROC)WndProc;  

  38. wcex.cbClsExtra  = 0;  

  39. wcex.cbWndExtra  = 0;  

  40. wcex.hInstance   = hInstance;  

  41. wcex.hIcon   = NULL;  

  42. wcex.hCursor     = NULL;  

  43. wcex.hCursor     = LoadCursor(NULL, IDC_ARROW);  

  44. wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);  

  45. wcex.lpszMenuName   = NULL;  

  46. wcex.lpszClassName  = "canvas";  

  47. wcex.hIconSm     = NULL;  

  48. return RegisterClassEx(&wcex);  

  49. }  

  50. //****初始化函數(shù)*************************************  

  51. // 1.建立與窗口DC兼容的內(nèi)存DC  

  52. // 2.從文件加載背景圖與恐龍圖  

  53. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)  

  54. {  

  55. HWND hWnd;  

  56. HDC hdc;  

  57. hInst = hInstance;  

  58. hWnd = CreateWindow("canvas", "繪圖窗口" , WS_OVERLAPPEDWINDOW,  

  59. CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);  

  60. if (!hWnd)  

  61. {  

  62. return FALSE;  

  63. }  

  64. MoveWindow(hWnd,10,10,600,450,true);  

  65. ShowWindow(hWnd, nCmdShow);  

  66. UpdateWindow(hWnd);  

  67. hdc = GetDC(hWnd);                     //獲得窗口DC  

  68. mdc = CreateCompatibleDC(hdc);           //創(chuàng)建與窗口兼容的內(nèi)存DC(mdc)  

  69. bg = (HBITMAP)LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,600,450,LR_LOADFROMFILE);   

  70. //J加載背景圖到bg中  

  71. sprite = (HBITMAP)LoadImage(NULL,"sprite.bmp",IMAGE_BITMAP,170,99,LR_LOADFROMFILE);   

  72. //加載易拉罐圖到sprite中  

  73. MyPaint(hdc);  

  74. ReleaseDC(hWnd,hdc);  

  75. return TRUE;  

  76. }  

  77. //****自定義繪圖函數(shù)*********************************  

  78. //透明貼圖  

  79. void MyPaint(HDC hdc)  

  80. {  

  81. SelectObject(mdc,bg);  

  82. BitBlt(hdc,0,0,600,450,mdc,0,0,SRCCOPY);    //先將背景圖貼到顯示窗口中  

  83. SelectObject(mdc,sprite);                      //選用易拉罐圖到"mdc"中  

  84. BitBlt(hdc,50,50,225,225,mdc,225,0,SRCAND);//進(jìn)行制作貼圖的第一步驟,即將屏蔽圖與背景圖做"AND"運(yùn)算,屏蔽圖在整張易拉罐圖中,最左上角起始位置點(diǎn)得坐標(biāo)為(225,0),BitBlt()函數(shù)中最后一個Raster參數(shù)值設(shè)置為SRCAND。  

  85. BitBlt(hdc,50,50,225,225,mdc,0,0,SRCPAINT);//進(jìn)行制作透明貼圖的第二步驟,即將前景圖與背景圖做"OR"運(yùn)算,前景圖在整張易拉罐圖中,最左上角起始位置的坐標(biāo)為(0,0),BitBlt()函數(shù)最后一個參數(shù)值設(shè)置為SRCPAINT。  

  86. }  

  87. //****消息處理函數(shù)**********************************  

  88. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)  

  89. {  

  90. PAINTSTRUCT ps;  

  91. HDC hdc;  

  92. switch (message)  

  93. {  

  94. case WM_PAINT:   //窗口重繪消息  

  95. hdc = BeginPaint(hWnd, &ps);  

  96. MyPaint(hdc);  

  97. EndPaint(hWnd, &ps);  

  98. break;  

  99. case WM_DESTROY:     //窗口結(jié)束消息  

  100. DeleteDC(mdc);  

  101. DeleteObject(bg);  

  102. DeleteObject(sprite);  

  103. PostQuitMessage(0);  

  104. break;  

  105. default:     //其他消息  

  106. return DefWindowProc(hWnd, message, wParam, lParam);  

  107.    }  

  108.    return 0;  

  109. }  



最后程序的運(yùn)行結(jié)果為:

VC++圖片透明技術(shù)原理

通過BitBlt()貼圖函數(shù)及Raster運(yùn)算值的設(shè)定,很簡單地就做出了想要的透明效果,這種方法在設(shè)計2D游戲的一些畫面內(nèi)容時使用相當(dāng)頻繁。

本文名稱:VC++圖片透明技術(shù)原理
當(dāng)前地址:http://chinadenli.net/article28/jeiicp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作全網(wǎng)營銷推廣、品牌網(wǎng)站建設(shè)定制開發(fā)、動態(tài)網(wǎng)站ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司
日韩不卡一区二区在线| 午夜资源在线观看免费高清| 青青免费操手机在线视频| 操白丝女孩在线观看免费高清| 99久久人妻中文字幕| 亚洲欧美日韩在线看片| 丝袜破了有美女肉体免费观看| 99一级特黄色性生活片| 少妇淫真视频一区二区| 久久中文字幕中文字幕中文| 91人妻久久精品一区二区三区| 国产午夜福利在线观看精品| 国产视频福利一区二区| 日韩中文字幕欧美亚洲| 激情内射日本一区二区三区| 激情少妇一区二区三区| 国产传媒一区二区三区| 免费亚洲黄色在线观看| 色无极东京热男人的天堂| 精品视频一区二区三区不卡| 精品人妻av区波多野结依| 国产精品熟女乱色一区二区 | 日本不卡一本二本三区| 久久国产人妻一区二区免费| 搡老熟女老女人一区二区| 国产小青蛙全集免费看| 一级欧美一级欧美在线播| 午夜福利黄片免费观看| 高清不卡视频在线观看| 国产成人精品99在线观看| 精品女同一区二区三区| 98精品永久免费视频| 亚洲欧美天堂精品在线| 日韩成人高清免费在线| 91久久精品中文内射| 亚洲日本久久国产精品久久| 91精品蜜臀一区二区三区| 大香蕉网国产在线观看av| 久久精品国产亚洲av麻豆| 国产精品视频一级香蕉| 老熟妇2久久国内精品|