国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
圖像與文字的合成

圖像與文字的合成

作者:kylin

下載本文示例工程

前幾天要做一段程序,把文字和位圖圖像合成并保存為位圖文件。但問了好久都沒人給一個(gè)滿意的答復(fù),只好在黑暗中摸索,費(fèi)了一番功夫,實(shí)現(xiàn)了圖像與文字的合成,并且可用鼠標(biāo)拖動(dòng)文字?,F(xiàn)在我把代碼貼出,希望能給需要的朋友以幫助。

一、關(guān)鍵函數(shù)

1.
int SetDIBits(HDC hdc,                  // 兼容DC的句柄HBITMAP hbmp,             // 兼容位圖的句柄UINT uStartScan,          // 掃描起始行的編號(hào)UINT cScanLines,          // 掃描的行的數(shù)目CONST VOID *lpvBits,      // 位圖緩沖區(qū)的指針,要求已經(jīng)分配空間CONST BITMAPINFO *lpbmi,  // 位圖信息UINT fuColorUse           // 顏色格式);

這個(gè)函數(shù)把位圖數(shù)據(jù)一個(gè)像素一個(gè)像素的貼到一個(gè)兼容位圖上,hdc是選擇了兼容位圖的兼容DC。

2.
int GetDIBits(HDC hdc,           // 兼容DC的句柄HBITMAP hbmp,      // 兼容位圖的句柄UINT uStartScan,   // 掃描起始行的編號(hào)UINT cScanLines,   // 掃描的行的數(shù)目LPVOID lpvBits,    // 位圖緩沖區(qū)的指針,要求已經(jīng)分配空間LPBITMAPINFO lpbi, // 位圖信息UINT uUsage        // 顏色格式);

這個(gè)函數(shù)的作用和SetDIBits剛好相反,它把兼容位圖內(nèi)已存在的數(shù)據(jù)一個(gè)像素一個(gè)像素的拷貝到數(shù)據(jù)緩沖區(qū)(lpvBits)中。這樣程序的實(shí)現(xiàn)就比較明朗了,首先根據(jù)位圖的尺寸,創(chuàng)建一個(gè)兼容位圖,然后把圖片繪制到兼容位圖,接著把文字也寫到兼容位圖上,然后再?gòu)募嫒菸粓D得到合成的數(shù)據(jù)。

二、關(guān)鍵程序段
CreateMemObject(CDC *pDC, BITMAPINFO *lpbmi, int* pnLineChar){if (NULL == m_pMemDC){m_pMemDC = new CDC();m_pMemDC->CreateCompatibleDC(pDC);}if (m_pMemBmp != NULL){m_pMemDC->SelectObject(m_pOldBmp);delete m_pMemBmp;m_pMemBmp = NULL;}m_pMemBmp = new CBitmap();       //根據(jù)圖片的大小創(chuàng)建一個(gè)兼容位圖m_pMemBmp->CreateCompatibleBitmap(pDC, m_lpBMPHdr->biWidth, m_lpBMPHdr->biHeight);m_pOldBmp = m_pMemDC->SelectObject(m_pMemBmp);m_pMemDC->FillSolidRect(0, 0, m_lpBMPHdr->biWidth, m_lpBMPHdr->biHeight, RGB(255, 255, 255));//把圖像的數(shù)據(jù)繪制到兼容位圖上SetDIBits(m_pMemDC->GetSafeHdc(), (HBITMAP)m_pMemBmp->m_hObject,0, m_lpBMPHdr->biHeight, (LPVOID)m_lpDIBits, (BITMAPINFO*)m_lpBMPHdr, DIB_RGB_COLORS);}
SetBmpText(const CString &strText, BOOL bRepaint){//本函數(shù)在位圖上添加文本m_strBmpText = strText;SetDIBits(m_pMemDC->GetSafeHdc(), (HBITMAP)m_pMemBmp->m_hObject,0, m_lpBMPHdr->biHeight, (LPVOID)m_lpDIBits, (BITMAPINFO*)m_lpBMPHdr, DIB_RGB_COLORS);if (m_strBmpText.GetLength() > 0){//制造透明和重影效果m_pMemDC->SetBkMode(TRANSPARENT);m_pMemDC->SetTextColor(RGB(0, 0, 0));m_pMemDC->TextOut(10, 10, m_strBmpText);m_pMemDC->SetTextColor(RGB(255, 255, 255));m_pMemDC->TextOut(11, 11, m_strBmpText);}if (bRepaint){Invalidate();}}
SetSaveBmpPath(LPCTSTR pszPath){//從兼容位圖中取出合成的數(shù)據(jù)BYTE *pTemp = new BYTE[m_dwImageSize];ZeroMemory(pTemp, m_dwImageSize);int nCount = GetDIBits(m_pMemDC->GetSafeHdc(),(HBITMAP)m_pMemBmp->m_hObject, 0, m_lpBMPHdr->biHeight,(LPVOID)pTemp, (BITMAPINFO*)m_lpBMPHdr, DIB_RGB_COLORS);}

三、圖例


添加文字的效果圖

四、結(jié)束語(yǔ)

有關(guān)位圖的讀寫,參考了VC知識(shí)庫(kù)在線雜志第21期中胡卓瑋朋友寫的《位圖文件讀寫綜述》一文。
本程序在win2000、vc6、174*218 24位真彩色圖片下調(diào)試通過(guò)。

本程序存在以下問題:

1.不能在兼容DC里選擇畫筆、字體;
2.從兼容位圖里取數(shù)據(jù),僅對(duì)真彩色位圖有效。

如果您知道如何解決以上問題,歡迎賜教。

地址:南京世紀(jì)新訊科技有限公司;msn:kylin_wei@hotmail.com
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
BITMAPINFO結(jié)構(gòu)體
抓窗口的圖片
IplImage格式轉(zhuǎn)換成HBITMAP
DIB
【青風(fēng)帶你學(xué)stm32f051系列教程】第16課 TFT LCD顯示圖片 | 愛板網(wǎng)
位圖文件(BMP)格式分析以及程序?qū)崿F(xiàn)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服