当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

<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++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .