<b>用C++ Builder对图象举行特别效果处理</b>[VC/C++编程]
本文“<b>用C++ Builder对图象举行特别效果处理</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在Windows编程中图象处理相对对比复杂,好在C++ Builder供应了一些图形类,它们通过对Windows中的图形对象举行包装,从而大大简化了图象操作的难度.下面就通过对图象举行柔化、锐化、浮雕效果等几个特别效果处理来具体阐明一下.
1、预备工作 位图图形实际上是像素的二维数组,它记录了每个像素的颜色信息,而TCanvas类供应了Pixels属性,用它可以存取指定像素的颜色值,通过这个属性将位图图形的部份或全部像素的颜色值举行呼应的变更处理,便可以实现图象的特别效果处理.在Windows中颜色是按照红、绿、蓝三种颜色的饱和度来定义的,在这里我们要将像素颜色值的红、绿、蓝份量从像素值中别离出来,辨别加以保存,所以需求定义一个构造来存放颜色份量:
struct rgb_str
{
unsigned char r_color;
unsigned char g_color;
unsigned char b_color;
};
rgb_str rgb[2000][2000];
成立全局变量:Graphics::TBitmap *bitmap;
//用来存放变更后的位图
int i,j,width,height;
在窗体上安排一个TImage组件和OpenPictureDialog组件,将TImage的AutoSize属性设为true,将OpenPictureDialog的Filter设为*.bmp.当用户挑选Open号令后,翻开呼应的对话框,让用户挑选要处理的图象文件,然后程序将图象的全部像素的颜色份量保存到rgb数组中:
void __fastcall TForm1::mnuFileOpenClick(TObject *Sender)
{
TColor color;
if(OpenPictureDialog1- >Execute())
{
Image1- >Picture->LoadFromFile(OpenPictureDialog1- >FileName);
width=Image1- >Picture- >Width; height=Image1->Picture->Height;
for(i=0;i< width-1;i++)
for(j=0;j< height-1;j++)
{
color=Image1- >Canvas->Pixels[i][j];
rgb[i][j].r_color=GetRValue(color);
rgb[i][j].g_color=GetGValue(color);
rgb[i][j].b_color=GetBValue(color);
}
bitmap=new Graphics::TBitmap;
bitmap->Width=width;
bitmap->Height=height;
}
}
2、图象的柔化处理
柔化就是对图象举行平滑处理,削减相邻像素间的颜色差别,普通选用3*3像素块,将中间的像素值改成这9个像素的平均像素值,从而到达柔化效果.其代码以下:
void __fastcall TForm1::btnSmoothClick(TObject *Sender)
{
int red,green,blue;
for(i=1;i< width-2;i++)
for(j=1;j< height-2;j++)
{
red=rgb[i-1][j-1].r_color+rgb[i][j-1].r_color+rgb[i+1][j-1].r_color+rgb[i-1][j].r_color+rgb[i][j].r_color+rgb[i+1][j].r_color+
rgb[i-1][j+1].r_color+rgb[i][j+1].r_color+rgb[i+1][j+1].r_color;
green=rgb[i-1][j-1].g_color+rgb[i][j-1].g_color+rgb[i+1][j-1].g_color+rgb[i-1][j].g_color+rgb[i][j].g_color+rgb[i+1][j].g_color+
rgb[i-1][j+1].g_color+rgb[i][j+1].g_color+rgb[i+1][j+1].g_color;
blue=rgb[i-1][j-1].b_color+rgb[i][j-1].b_color+rgb[i+1][j-1].b_color+rgb[i-1][j].b_color+rgb[i][j].b_color+rgb[i+1][j].b_color +
rgb[i-1][j+1].b_color+rgb[i][j+1].b_color+rgb[i+1][j+1].b_color;
bitmap->Canvas->Pixels[i][j]=RGB(red/9,green/9,blue/9);
}
Image1- >Picture- >Bitmap- >Assign(bitmap);
}
以上是“<b>用C++ Builder对图象举行特别效果处理</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |