ubuntu下codeblocks起步(八)

ubuntucodeblocks起步-圖像處理


這是一個簡單的圖像處理程序,實現了位圖的透明處理。有時候我們希望只獲得一幅圖片的部分內容,而將其他部分進行透明處理。當然,現在的很多圖像處理軟件(如PhotoShop)等都能很簡單地實現透明處理。下面是用程序來將一幅位圖透明化的過程。

繪製"透明"位圖是指繪製某一位圖中除指定顏色外的其餘部分,我們稱這種顏色爲"透明色"。通過將位圖的背景色指定爲"透明色",在繪製時,不繪製這部分背景,而僅繪製圖像,這樣就可以將位圖中圖像透明地繪製到窗口上。

繪製"透明"位圖的關鍵是創建一個"掩碼"位圖(mask bitmap)"掩碼"位圖是一個單色位圖,它是位圖中圖像的一個單色剪影。下面的程序中,我們通過雙擊位圖實現對某一顏色的透明化。主要的實現過程如下:

1、雙擊位圖,獲得該像素點的顏色信息。相關函數:bool GetPixel(wxCoord x, wxCoord y, wxColour *colour)xy爲像素點的座標,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添加OnPaintOnLeftDClick事件。函數如下:

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


爲解決的問題:

在同一個窗體中,對同一幅位圖連續雙擊實現多種顏色的透明。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章