用C++ Builder对图像进行特殊效果处理

在Windows编程中图像处理相对比较复杂,好在C++ Builder提供了一些图形类,它们通过对Windows中的图形对象进行包装,从而大大简化了图像操作的难度。下面就通过对图像进行柔化、锐化、浮雕效果等几个特殊效果处理来具体说明一下。

一、准备工作 位图图形实际上是像素的二维数组,它记录了每个像素的颜色信息,而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;
  }
}

二、图像的柔化处理

柔化就是对图像进行平滑处理,减少相邻像素间的颜色差别,一般选用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);
}

时间: 2024-09-16 04:14:42

用C++ Builder对图像进行特殊效果处理的相关文章

Borland C++ Builder专题

BCB中如何给Table减肥 C++ Builder开发经验几则 C++ Builder在运行时创建BDE别名 C++ Builder常用代码片断 C++ Builder实现在线接收电子邮件 C++ Builder动态设定odbc数据源 如何利用C++ Builder实现对Excel97 的调用 BCB创建基于Internet的点对点Chat 用C++ Builder开发Web程序 用BCB开发多层数据库应用程序 用C++ Builder编写自已的IE SKIN 用BCB5的打包程序打包BCB6

PS图层模式详解

  一.正常模式 : 编辑或绘制每个像素,使其成为结果色.这是默认模式.(在处理位图图像或索引颜色图像时,"正常"模式也称为阈值.) 二.溶解模式 : 编辑或绘制每个像素,使其成为结果色.但是,根据任何像素位置的不透明度,结果色由基色或混合色的像素随机替换. 三.变暗模式 : 查看每个通道中的颜色信息,并选择基色或混合色中较暗的颜色作为结果色.比混合色亮的像素被替换,比混合色暗的像素保持不变. 四.正片叠底 查看每个通道中的颜色信息,并将基色与混合色复合.结果色总是较暗的颜色.任何颜色

PHOTOSHOP中渲染滤镜的使用

滤镜 听到"渲染"这个词,用过PHOTOSHOP的人大概都不会太陌生. 它不但可以在图像中创建云雾.闪光和折射等等特殊的光线效果,而且还可以在图像中创建三维对象(立方体.球体和圆柱体)等等特殊效果,因此,可以说"渲染"是PHOTOSHOP中实用性较强的一组滤镜(今天我就利用它的光照效果给朋友处理了一张相片,倍受朋友的赞扬,呵呵,很有成就感哦.^_^). "渲染"滤镜共包含了六类子滤镜.从上到下它们依次是:3D变换.分层云彩.光照效果.镜头光晕.纹

Photoshop高级图层技巧进阶篇(下)

高级|技巧 Photoshop 6介绍了另一种对多层图像使用蒙版的方法--图层组,这个方法在Photoshop 7中得到了延伸.添加图层组,不仅仅是便于管理图层,而且可以创建影响多个图层的蒙版.举例来说,在下面的图像中,图层组中包含了4个图层(两个花朵层和两个边缘层).为了一次给这4个图层加上蒙版,以图层组为目标,选择图层>添加图层蒙版>显示全部.这个图层蒙版和其它任意一种图层蒙版一样(用黑色涂抹隐藏图层组中的信息,用白色涂抹则显示),但它并不针对于某个图层,而是作用于这个图层组内的所有图层.

Photoshop高级图层技巧进阶篇

高级|技巧 图层,是Photoshop最重要的内容之一.在许多人眼中,图层可能没有通道那么神秘莫测--毕竟,新建图层,在上面涂涂画画的,总要比费心去操作通道要容易一些.从Photoshop3.0开始出现的图层,发展至今,已有了强大的功能.如果你对图层的了解还仅仅限于分开描绘图像和简单的混合模式,那么未免有些大材小用.要知道,大量隐藏的秘密正有待于我们发现.这篇文章会涉及到图层方面的高级技巧,这些技巧将揭露关于图层蒙版.图层类型.编组以及图层混合选项的秘密.掌握了这些技巧会帮助你创作出以前你从未想

photoshop的滤镜作用详解(一)

  为了丰富照片的图像效果,摄影师们在照相机的镜头前加上各种特殊影片,这样拍摄得到的照片就包含了所加镜片的特殊效果.即称为"滤色镜". 特殊镜片的思想延伸到计算机的图像处理技术中,便在ps中产生了"滤镜(Filer)",也称为"滤波器",是一种特殊的图像效果处理技术.一般地,滤镜都是遵循一定的程序算法,对图像中像素的颜色.亮度.饱和度.对比度.色调.分布.排列等属性进行计算和变换处理,其结果便是使图像产生特殊效果. 滤镜菜单: 一.Artisti

PS滤镜插件说明

为了丰富照片的图像效果,摄影师们在照相机的镜头前加上各种特殊影片,这样拍摄得到的照片就包含了所加镜片的特殊效果.即称为"滤色镜". 特殊镜片的思想延伸到计算机的图像处理技术中,便产生了"滤镜(Filer)",也称为"滤波器",是一种特殊的图像效果处理技术.一般地,滤镜都是遵循一定的程序算法,对图像中像素的颜色.亮度.饱和度.对比度.色调.分布.排列等属性进行计算和变换处理,其结果便是使图像产生特殊效果. Filter(滤镜)菜单 一.Artist

054_《奇思异想编程序Delphi篇》

<奇思异想编程序Delphi篇> Delphi 教程 系列书籍 (054) <奇思异想编程序Delphi篇> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Pdf 作者: 蒋明礼 杨晓龙 出版社:国防工业出版社 ISBN:7118031690 上架时间:2004-1-29 出版日期:2004 年1月 开本:16开 页码:388 版次:1-1 内容简介 本书以通俗易懂的语言.列举大量的实例揭示了Delphi语言在系统编程.界面设计.组件编程.图像处理与多媒

多级下拉菜单

博士网代码 VB VB系统设置VB数字字符处理VB控制例子VB界面相关VB多媒体相关VB数据库相关VB网络相关VB文件相关VB游戏编程VB_另类其他 VC 控件控制高级编程技术打印及其它处理高级用户界面多媒体操作数据库操作网络编程DevStadio环境配置及调试系统编程DCOM及ActiveX 汇编 系统调试I/O操作汇编开发实例 C++ Builder 图形图像多媒体打印设置界面设置环境与系统数据库技术网络技术线程及异常组件及对象其他技巧 Delphi delphi多媒体编程delphi文件操