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


为解决的问题:

在同一个窗体中,对同一幅位图连续双击实现多种颜色的透明。

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值