ubuntu下codeblocks起步-圖像處理
這是一個簡單的圖像處理程序,實現了位圖的透明處理。有時候我們希望只獲得一幅圖片的部分內容,而將其他部分進行透明處理。當然,現在的很多圖像處理軟件(如PhotoShop)等都能很簡單地實現透明處理。下面是用程序來將一幅位圖透明化的過程。
繪製"透明"位圖是指繪製某一位圖中除指定顏色外的其餘部分,我們稱這種顏色爲"透明色"。通過將位圖的背景色指定爲"透明色",在繪製時,不繪製這部分背景,而僅繪製圖像,這樣就可以將位圖中圖像透明地繪製到窗口上。
繪製"透明"位圖的關鍵是創建一個"掩碼"位圖(mask bitmap),"掩碼"位圖是一個單色位圖,它是位圖中圖像的一個單色剪影。下面的程序中,我們通過雙擊位圖實現對某一顏色的透明化。主要的實現過程如下:
1、雙擊位圖,獲得該像素點的顏色信息。相關函數:bool GetPixel(wxCoord x, wxCoord y, wxColour *colour)。x、y爲像素點的座標,colour用來保存該像素點的顏色值。
2、爲圖像創建一個"掩碼"位圖(mask bitmap)。相關函數:bool Create(const wxBitmap& bitmap, const wxColour& colour)。
3、應用mask到圖像。相關函數:void SetMask(wxMask* mask)。注意:一旦這個函數被調用,位圖就擁有了這個mask。
4、圖像顯示時會顯示經過處理後的圖像。
創建wxWindgets的對話框(Dialog)工程,命名爲picture2。
爲此Dialog添加控件,如下:
在編譯器的wxSmith選項中添加一“Dialog”類。命名爲“ShowDialog”。
爲showDialog添加OnPaint和OnLeftDClick事件。函數如下:
void ShowDialog::OnPaint(wxPaintEvent& event)
{
wxPaintDC dc(this);
dc.DrawBitmap(m_bmp, 70, 70, true); //顯示圖片
}
void ShowDialog::OnLeftDClick(wxMouseEvent& event)
{
wxPaintDC dc(this);
PointX = event.GetX();
PointY = event.GetY(); //獲得座標
dc.GetPixel( PointX, PointY,&colour); //獲得像素信息
mask.Create(m_bmp,colour); //創建“掩碼”位圖
m_bmp.SetMask(&mask); //激活mask
m_bmp.SaveFile(_T("./pictures/pro.bmp"),wxBITMAP_TYPE_BMP,NULL); //保存圖片
Refresh();
Update();
}
頭文件:
#include <wx/wx.h>
#include <wx/colour.h>
#include <wx/bitmap.h>
#include "picture2Main.h"
在showDialog.h文件中,爲ShowDialog類添加成員變量:
public:
wxBitmap m_bmp;
int PointX,PointY;
wxColour colour;
wxMask mask;
wxString picture; //保存圖片路徑
並在ShowDialog的構造函數中初始化:
PointX = 0;
PointY = 0;
colour = wxColour(0,0,0);
頭文件:#include <wx/wx.h>
爲picture2Dialog的兩個按鈕添加響應,函數如下:
“選擇”按鈕:
void picture2Dialog::OnButton1Click(wxCommandEvent& event)
{
ShowDialog MyShowDialog(this); //創建 ShowDialog類的對象
MyShowDialog.picture = TextCtrl1->GetValue();
MyShowDialog.picture = _T("./pictures/")+MyShowDialog.picture;
(MyShowDialog.m_bmp).LoadFile( MyShowDialog.picture,wxBITMAP_TYPE_BMP); //裝載圖片
MyShowDialog.ShowModal(); //顯示子窗體
}
“讀入”按鈕:
void picture2Dialog::OnButton2Click(wxCommandEvent& event)
{
ShowDialog MyShowDialog(this);
(MyShowDialog.m_bmp).LoadFile( _T("./pictures/pro.bmp"),wxBITMAP_TYPE_BMP); //裝載圖片
MyShowDialog.ShowModal(); //顯示子窗體
}
最後,頭文件:#include "ShowDialog.h",編譯運行。
程序所用的圖片都保存在同文件下的“pictures”文件夾中(需要自己創建)。處理後的位圖保存爲“pro.bmp”。點擊“選擇”,顯示你選擇的圖片。下次打開程序時點擊“讀入”,會自動讀入上次處理過的位圖。
參考:
http://www.wxwidgets.org/manuals/2.8.0/wx_wxbitmap.html#wxbitmapsavefile
http://www.wxwidgets.org/manuals/2.8.0/wx_wxmask.html#wxmask
http://www.wxwidgets.org/manuals/2.8.0/wx_wxcolour.html#wxcolourconstr
爲解決的問題:
在同一個窗體中,對同一幅位圖連續雙擊實現多種顏色的透明。