IPicture、BITMAP、HBITMAP和CBitmap的關係
1、有關IPicture載入圖片後直接Render到記憶體DC的問題(HBITMAP 轉換 IPicture)
Picture的方法get_Handle可以直接得到圖片的控制代碼
IPicture *pIPicture;
HBITMAP hBitmap;
...
pIPicture->get_Handle((OLE_HANDLE *)&hBitmap);
2、CBitmap 轉換 HBITMAP
CBitmap m_bitMap;
HBITMAP m_hBitMap;
m_bitMap.LoadBitmap(IDB_BITMAP);
m_hBitMap=(HBITMAP)m_bitMap.GetSafeHandle();
3、HBITMAP 轉換 CBitmap
CBitmap cbMMyBitmap;//用來顯示動畫的點陣圖
HBITMAP hMMyHBitmap;//用來顯示動畫的點陣圖的控制代碼
BITMAP bMMyBitmapInfo;//點陣圖資訊
cbMMyBitmap.Attach(hMMyHBitmap);
cbMMyBitmap.GetBitmap(&bMMyBitmapInfo);
4、DrawDibDraw 和AlphaBlend
一:這兩個函式都是繪製 DIB 的。
我在使用過程中發現這兩個函式對於 32 位的點陣圖,Alpha通道不能正確顯示。就是說,該透明的地方不透明。
說明一下,點陣圖沒有問題的,用看圖軟體或PS之類的都可以正確顯示。
我想問一下,是我的原因還是這兩個函式本來就不支援32位點陣圖?
ps.顯示32位點陣圖可以用AlphaBlend實現的,但是這個函式是繪製場景裡的 DDB 的。由於我想顯示的是 DIB,不想轉來轉去的,所以這個函式先不考慮。
二:StretchDIBits 或 DrawDibDraw 就沒法顯示帶透明屬性的圖片
要顯示帶透明屬性的圖片只能用別的方法 例如 GDI+
回答(1)
CBitmap::GetBitmap
回答人:軟界網友
回答(2)
每個成員變數都賦值。
回答人:軟界網友
回答(3)
CBitmap::GetBitmap是把CBitmap的資訊賦給BITMAP結構
我問的是BITMAP賦給CBitmap
回答人:軟界網友
回答(4)
建立CBitmap物件時,採用BITMAP指定資訊
回答人:軟界網友
回答(5)
是用建構函式嗎?
CBitmap::CBitmap(BITMAP bitmap)好像沒有這個建構函式
回答人:軟界網友
回答(6)
CBitmap::FromHandle(HBITMAP hBitmap )
回答(7)
HBITMAP CreateBitmapIndirect(
CONST BITMAP *lpbm // bitmap data
);
6、用GDI實現點陣圖透明顯示
下面是實現中幾個關鍵的地方:
//////////////////////////////////////////////////////////////////////////
////把點陣圖bmpFile的特定矩形區域rtWant上的所有畫素的資料讀取到緩衝區pBuf中
int CChildView::GetPixFromBmp(CString fileName,CRect rtWant,BYTE *pBuf)
{
BITMAPINFOHEADER headInfo;
ZeroMemory(&headInfo,sizeof(headInfo));
int imageHeight;
int imageWidth;
CFile file;
file.Open(fileName, CFile::modeRead);
file.Seek(14, CFile::begin);
file.Read(&headInfo, 40); ///-- 從檔案中讀去點陣圖的BITMAPINFOHEADER資訊
imageWidth = headInfo.biWidth;
imageHeight = headInfo.biHeight;
if(headInfo.biBitCount!=32)
{
MessageBox(fileName+"不是32位點陣圖");
}
for(int i=0;i< P>
{
file.Seek(54+(imageHeight- rtWant.bottom+i)*imageWidth*headInfo.biBitCount/8+rtWant.left*headInfo.biBitCount/8,CFile::begin);
file.Read(pBuf+i*rtWant.Width()*headInfo.biBitCount/8,rtWant.Width()*headInfo.biBitCount/8);
}
file.Close();
return 0;
}
//////////////////////////////////////////////////////////////////////////
//// pDesBuf:目的表面緩衝區,W,H--目的表面的寬和高
//// pSrcBuf: 源表面緩衝區
//// pRetBuf:結果儲存到這個緩衝區中,與pDesBuf相容
//// rtBlend:源表面緩衝區與目的表面緩衝區進行alpha混合的矩形區域
//// alpha : 需要透明的百分比,0---完全透明 ,1 -- 完全不透明
void CChildView::MyBlend(BYTE* pDesBuf,BYTE* pSrcBuf,BYTE* pRetBuf,CRect rtBlend,int W,int H,float alpha)
{
memcpy(pRetBuf,pDesBuf,W*H*4);
for(int i=0;i< P>
{
for(int j=0;j< P>
{
long posDesPix = ((H-rtBlend.bottom+i)*W+rtBlend.left+j)*4;
long posSrcPix = (i*rtBlend.Width()+j)*4;
pRetBuf[posDesPix+0] = BYTE(pDesBuf[posDesPix+0]*(1-alpha) + pSrcBuf[posSrcPix+0]*(alpha));
pRetBuf[posDesPix+1] = BYTE(pDesBuf[posDesPix+1]*(1-alpha) + pSrcBuf[posSrcPix+1]*(alpha));
pRetBuf[posDesPix+2] = BYTE(pDesBuf[posDesPix+2]*(1-alpha) + pSrcBuf[posSrcPix+2]*(alpha));
pRetBuf[posDesPix+3] = BYTE(pDesBuf[posDesPix+3]*(1-alpha) + pSrcBuf[posSrcPix+3]*(alpha));
}
}
}
{
///-- 設定點陣圖的BITMAPINFOHEADER資訊
ZeroMemory(&m_headInfo,sizeof(m_headInfo));
m_headInfo.biSize = sizeof(m_headInfo);
m_headInfo.biPlanes = 1;
m_headInfo.biBitCount = 32; // 24
m_headInfo.biCompression = BI_RGB;
m_headInfo.biWidth = m_rtShow.Width();
m_headInfo.biHeight = m_rtShow.Height();
m_headInfo.biSizeImage = m_nLen;
}
void CChildView::OnPaint()
{
CPaintDC dc(this); // device context for painting
StretchDIBits(m_MemDC.GetSafeHdc(),0,0,m_rtShow.Width(),m_rtShow.Height(),
0,0,m_rtShow.Width(),m_rtShow.Height(),(void*)m_pCurrBuf,(BITMAPINFO*)&m_headInfo,NULL,SRCCOPY);
dc.BitBlt(m_rtShow.left,m_rtShow.top,m_rtShow.Width(),m_rtShow.Height(),
&m_MemDC,0,0,SRCCOPY);
}
相關推薦
IPicture、BITMAP、HBITMAP和CBitmap的關係
1、有關IPicture載入圖片後直接Render到記憶體DC的問題(HBITMAP 轉換 IPicture) Picture的方法get_Handle可以直接得到圖片的控制代碼 IPicture *pIPicture; HBITMAP hBitmap; ... pIPicture->get_Hand
Drawable、Bitmap、Canvas和Paint的關係
首先讓我們理解下Android平臺中的顯示類是View,但是還提供了底層圖形類android.graphics,今天所說的這些均為graphics底層圖形介面。 Bitmap - 稱作點陣圖,一般點陣圖的檔案格式字尾為bmp,當然編碼器也有很多如RGB565、RGB88
【Redis學習筆記三】慢查詢、pipeline、釋出訂閱、Bitmap、HyperLogLog、GEO
目錄 慢查詢 pipeline 釋出訂閱 Bitmap HyperLogLog GEO 慢查詢 生命週期 傳送命令 --> 排隊 --> 執行命令 --> 返回結
android Canvas、Bitmap、Paint
Canvas 畫家、繪製工具 1.drawBitmap /** * bitmap 要繪製的點陣圖物件 * src 要裁切的位置,若是null則
flex中針對Image、Bitmap、BitmapData相互轉化
flex中針對Image、Bitmap、BitmapData的操作支援非常靈活,簡單整理下: 1、 設定Image元件的source(指定圖片路徑)屬性引入圖片,當圖片載入完成後,Image.content即為Bitmap物件例項 2、 使用資源類的方式[Embed(source=”sample.
伯努利分佈、二項分佈、Beta分佈、多項分佈和Dirichlet分佈與他們之間的關係,以及在LDA中的應用
在看LDA的時候,遇到的數學公式分佈有些多,因此在這裡總結一下思路。 一、伯努利試驗、伯努利過程與伯努利分佈 先說一下什麼是伯努利試驗: 維基百科伯努利試驗中: 伯努利試驗(Bernoulli trial)是隻有兩種可能結果的單次隨機試驗。 即:對於一個隨機變數而言,P(X
IP地址(A、B、C、D和E類)、網路地址、主機地址、子網掩碼與閘道器之間的關係
“IP地址”就相當於“電話號碼”,而Internet中的路由器,就相當於電信局的“程控式交換機”。 點分十進位制數表示的IPv4地址被分為幾類,以適應大型、中型、小型的網路。這些類的不同之處在於不同類別的網路地址所佔位數。 **IP地址是一個32位的二進位制數,通常被分
幾張圖看明白VAO、VBO、EBO的關係和程式碼順序
0.詳細教程可看https://learnopengl-cn.github.io/01%20Getting%20started/04%20Hello%20Triangle/ 1.可以簡單地認為VAO的作用是這樣的: 由於每渲染一次物體就要用一個VBO,而每次繫結一次VBO就要設定各個的頂點的屬性,啟動各個
LoRa關鍵引數 1、擴頻因子(SF) 2、編位元速率(CR) 3、訊號頻寬(BW) 4、LoRa訊號頻寬BW、符號速率Rs和資料速率DR的關係
LoRa學習:LoRa關鍵引數(擴頻因子,編位元速率,頻寬)的設定及解釋 1、擴頻因子(SF) 2、編位元速率(CR) 3、訊號頻寬(BW) 4、LoRa訊號頻寬BW、符號速率Rs和資料速率DR的關係 5、 LoRa訊號頻寬、擴頻
SQL條件放在on、where、having的區別和關係
參考文章: SQL中ON和WHERE的區別 在寫SQL語句的時候,我們經常會用到各種表連線(left join, right join, inner join, full join),還有各種分組聚合函式(sum, min, max, avg, count),那麼我們在寫SQL的時候
CGI、fastcgi、WSGI、uwsgi和uWSGI的關係
1.CGI(Common Gateway Inteface) 通用閘道器介面,是外部應用程式與Web伺服器之間的介面標準,用來規定一個程式該如何與web伺服器程式之間通訊 從而可以讓這個程式跑在web伺服器上。 2.fastcgi fastcgi是Web伺服器(ex:nginx)和語言直
uCOS的軟體定時器、uCOS時鐘節拍和滴答定時器的關係
uCOS2.81後的版本中有軟體定時器的概念,如果要開啟定時器任務,需要在OS_CFG.H檔案中 #define OS_TMR_EN 1 軟體定時器其實跟硬體中斷
==、equals()、hashcode()的關係和區別
==、equals()、hashcode()概念 ==:它的作用是判斷兩個物件的地址是不是相等。即,判斷兩個物件是不試同一個物件。 equals():它的作用也是判斷兩個物件是否相等。但它一般有兩種使用情況: 情況1,類沒有覆蓋equals()方法。則通過equals()比較該類的兩個物件時,等價於
位元組、字、位、位元的概念和關係
1、位(bit) 來自英文bit,音譯為“位元”,表示二進位制位。位是計算機內部資料儲存的最小單位,11010100是一個8位二進位制數。一個二進位制位只可以表示0和1兩種狀態(21);兩個二進位制位可以表示00、01、10、11四種(22)狀態;三位二進位制數可表示八種狀態(23)……
域名、瀏覽器、HSTS和HTTPS的關係
1.瀏覽器的轉換: 大家可以找一個瀏覽器試驗一下,我用的是谷歌的chrome瀏覽器,當你在位址列輸入 baidu.com,然後你再按回車,你發現了什麼? 對,位址列已經把地址自動轉換為 https://www.baidu.com了。這種第一種可能是伺服器的重定向導致的,第二
dubbo中registry、route、directory、cluster、loadbalance、route的關係以及一個引用操作和呼叫操作到底幹了啥
zk是比較典型場景,所以註冊中心都是以zk作為例子的 1 對於registry,提供者沒有這個,消費者才有。為什麼? 因為只有消費者才需要去註冊中心拿到provide的資訊,而provider是不需要關注的,provider只需要去註冊就好。在RegistryProtocol的export方
電腦結構和CPU、記憶體、硬碟三者之間的關係
電腦結構和CPU、記憶體、硬碟三者之間的關係 電腦結構和CPU、記憶體、硬碟三者之間的關係 前面提到了,電腦之父——馮·諾伊曼提出了計算機的五大部件:輸入裝置、輸出裝置、儲存器、運算器和控制器。 我們看一下現在我們電
詳解 HTTPS、TLS、SSL、HTTP區別和關係
一、什麼是HTTPS、TLS、SSL HTTPS,也稱作HTTP over TLS。TLS的前身是SSL,TLS 1.0通常被標示為SSL 3.1,TLS 1.1為SSL 3.2,TLS 1.2為SSL 3.3。下圖描述了在TCP/IP協議棧中TLS(各子協議)和HTT
秒懂JS物件、構造器函式和原型物件之間的關係
一、基本概念 1、物件:屬性和方法的集合,即變數和函式的封裝。每個物件都有一個__proto__屬性,指向這個物件的建構函式的原型物件。 2、構造器函式:用於建立物件的函式,通過new關鍵字生成物件。函式名一般首字母大寫的。 3、原型物件:每個函式都有一個prototype屬性,它是一個指向
Java物件和例項的關係、Java資料封裝、Java繼承和多型、Java抽象類和介面、Java靜態欄位和方法、Java包和作用域、Java的classpath和jar、Java核心類
Java物件和例項的關係: 面向物件程式設計(Object-Oriented Programming),是對現實世界建立計算機模型的一種方法。 class是物件的模板,它定義瞭如何建立例項,class的名字就是資料型別。一個class裡可以有多個欄位(field),欄位用