⑴ 用mfc怎麼把點陣圖用背景色擦掉
畫一個長方形把它遮住。或者試試用刷新屏幕函數。
⑵ MFC中圖片處理問題:怎麼讓圖片中的白色部分設置為背景色
透明色問題,剛好我做過
先跟你說下步驟:
1、創建一張大小與需要繪制圖像相同的點陣圖作為「掩碼」點陣圖;
2、將新創建的「掩碼」點陣圖存儲至掩碼點陣圖的設備描述表中;
3、把點陣圖設備描述表的背景設置成「透明色」,即不需要顯示的顏色;
4、復制粘貼點陣圖到「掩碼」點陣圖的設備描述表中,這個時候「掩碼」點陣圖設備描述表中存放的點陣圖與點陣圖設備描述表中的點陣圖一樣;
5、把需要透明繪制的點陣圖與對話框繪圖相應區域的背景進行邏輯異或操作繪制到對話框上;
6、把「掩碼」點陣圖與這個時候對話框相應區域的背景進行邏輯與的操作;
7、最後一步重復步驟5的操作,把需要透明繪制的點陣圖與對話框繪圖相應區域的背景進行邏輯異或操作繪制到對話框上;
8、當然最後不要忘記了把系統的畫筆還給系統,刪除使用過的GDIObject,釋放非空的指針,最後把新建的設備描述表也刪除;
具體代碼如下顯示,這段代碼只是截取了在WM_PAINT消息中對話框客戶區畫圖的部分,點陣圖的載入和刪除分別寫在OnInitDialog()函數和析構函數中;
CDC imgDC, maskDC; //定義存儲點陣圖的點陣圖設備描述表imgDC和存儲掩碼點陣圖的掩碼點陣圖
//設備描述表maskDC
CRect rcWnd, rcPic;
imgDC.CreateCompatibleDC(NULL); //初始化設備描述表
maskDC.CreateCompatibleDC(NULL); //初始化設備描述表
CBitmap bmpMask;
BITMAP bm;
m_bmpSample.GetBitmap(&bm);
GetClientRect(rcWnd);
rcPic.left = (rcWnd.Width() - bm.bmWidth)/2;
rcPic.right = rcPic.left + bm.bmWidth;
rcPic.top = (rcWnd.Height() - bm.bmHeight)/2;
rcPic.bottom = rcPic.top + bm.bmHeight;
bmpMask.CreateBitmap(bm.bmWidth, bm.bmHeight, 1, 1, NULL); //初始化掩碼點陣圖
CBitmap * pOldBmp = imgDC.SelectObject(&m_bmpSample); //存儲點陣圖至點陣圖設備描述表
CBitmap * pOldMaskBmp = maskDC.SelectObject(&bmpMask); //存儲掩碼點陣圖至掩碼點陣圖
//設備描述表
imgDC.SetBkColor(RGB(255, 255, 0)); //設置點陣圖設備描述表的背景色為透明色
maskDC.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &imgDC, 0, 0, SRCCOPY);
dc.BitBlt(rcPic.left, rcPic.top, bm.bmWidth, bm.bmHeight, &imgDC, 0, 0, SRCINVERT);
dc.BitBlt(rcPic.left, rcPic.top, bm.bmWidth, bm.bmHeight, &maskDC, 0, 0, SRCAND);
dc.BitBlt(rcPic.left, rcPic.top, bm.bmWidth, bm.bmHeight, &imgDC, 0, 0, SRCINVERT);
imgDC.SelectObject(pOldBmp);
maskDC.SelectObject(pOldMaskBmp);
bmpMask.DeleteObject();
pOldBmp = NULL;
pOldMaskBmp = NULL;
DeleteDC(imgDC);
DeleteDC(maskDC);
⑶ MFC里的圖片顯示的顏色不對
看你的界面是經典的VC6啊。
在畫圖打開圖片另存為bmp。
然後在mfc資源中導入bmp圖片,ID為IDC_BITMAP
拖一個Picture控制項,選擇圖片ID為IDC_BITMAP就行了。
⑷ mfc如何給指定的區域圖形變色
在MFC填充矩形顏色方法如下:
//在界面內定義一個矩形,界面大小在框架類中已定義
RECT Rect1;
Rect1.left = 55;
Rect1.top = 40;
Rect1.right = 970;
Rect1.bottom = 290;
//定義一個畫刷
CBrush Brush(RGB(0,0,0));
//用畫刷填充矩形
pDC->FillRect (&Rect1,&Brush);
⑸ MFC的文件對話框過濾器怎麼設置
CFileDialog::CFileDialog
CFileDialog(BOOL bOpenFileDialog,
LPCTSTR lpszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
CWnd* pParentWnd = NULL
);
參數: bOpenFileDialg 如果為TRUE, 則創建文件打開對話框;如果為FALSE,則構造一個File Save As(另存為)對話框。
lpszDefExt 預設文件擴展名,如果用戶在文件名編輯框中不包含擴展名,則lpszDefExt定義的擴展名自動加到文件名後。如果為NULL,則不添加擴展名。
lpszFileName 初始顯示於文件名編輯框中的文件名,如果為NULL,則不顯示初始文件名。
dwFlags 一個或多個標志的組合,使你可定製對話框。要了解這些標志的描述,可參閱聯機文檔「Win32 SDK」中的OPENFILENAME結構。如果你改變m_ofn.Flags結構成員,在改變中用OR操作保持預設行為完整。
lpszFilter 一列字元串對,指定可以應用到文件的過濾器。如果指定過濾器,僅被選擇的文件顯示於文件列表框中。請參閱說明部分,了解如何使用過濾器。
pParentWnd 指向文件對話框對象的父窗口或擁有者窗口。
說明:
調用此成員函數構造一個標准Windows文件對話框對象,或構造一個打開對話框或構造一個存檔對話框,根據bOpenFileDialog的值決定。
OFN_ALLOWMULTISELECT標志。你應提供文件名緩沖區來放置返回的多個文件名的列表,這通過用一個分配了的緩沖區指針替換m_ofn.lpstrFile來實現,要在創建了CFileDialog之後調用DoModal之前進行此操作。另外,必須用m_ofn.lpstrFile指向的緩沖區位元組數來設置m_ofn.nMaxFile。
為使用戶用滑鼠或鍵盤改變一個Explorer風格對話框的大小,設置OFN_ENABLESIZING標志,這僅當你提供一個鉤子進程或定製模板時才有必要設置。此標志僅與一個Explorer風格的對話框一起工作,舊風格的對話框不可改變大小。
lpszFilter參數用於判斷文件名類型及文件列表框中哪些可被顯示。雙字元串的第一個字元串描述過濾器,第二個串表明使用的文件擴展名,多重擴展可用「;」來指定。字元串由兩個「|」字元結尾,最後是一個NULL。也可使用CString對象作為參數。
例如,Mirosoft Excel 允許用戶用.XLC擴展名(表)或.XLS(工作表)打開文件,Excel過濾器應如下:
static char BASED_CODE szFilter[] =
"Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";
⑹ MFC里的圖片顯示的顏色不對
直接讀取圖片的路徑然後顯示出來試試
⑺ MFC圖像處理中背景顏色設置的問題
因為透明背景,所以原來的繪圖不會被擦掉。
你先輸出幾個空格,把原來的擦掉,再輸出數字即可。