找回密码
 立即注册

QQ登录

只需一步,快速开始

Marco

中级会员

6

主题

11

帖子

832

积分

中级会员

积分
832
Marco
中级会员   /  发表于:2016-9-30 10:32  /   查看:3492  /  回复:1
本帖最后由 Marco 于 2016-9-30 10:30 编辑

在教程(二)中,主要和大家分享了LeadTools是如何获取,改变像素的。并且通过这一做法可以对图像进行操作,比如将彩色图像转为灰度图像等。然而,LeadTools也提供了一些最基本的对图像操作的方法,在这篇文章中主要想和大家分享其中的两种,改变图像位深以及彩色图像灰度化。通过这些方法,可以更加方便快捷地对图像预处理。
具体步骤如下:
1.   新建Windows窗体应用程序,命名为ChangeimageBit
2.  添加的引用,using代码,以及Public Form1Load()事件中的代码与教程(二)介绍的一样。这里不再详细介绍。
3.  在窗体应用程序中,拖入两个Image Viewer控件。另外还需要拖入两个工具箱——菜单工具栏中的“Menu Strip”控件,一个命名为“File”,另一个命名         为“Choose Function”,在”Choose Function”下新建两个分别为”Image Bit Change” , ”RGB To Gray” .然后再拖入一个“Combo Box”控件,在该控件的Item属性中添加“8,16,24”用于存放目标图像的位深。
4. 添加三个label控件,分别命名为”Choose Image bit”,”Before”,”After”.
5.   添加两个Textbox 控件,用于显示图像的位深,从而判断是否转换成功。
6.    在Form1类中定义如下变量用于获取用户选择的图像位深
  1.      int bitperpixel;
复制代码

7.   双击“File”,在代码编辑模式中会出现如下事件:
  1. private void imageBitChangeToolStripMenuItem_Click(object sender, EventArgs e)
  2.         {
  3. }
复制代码

在该事件中添加如下代码
  1. theViewer1.Image = null;
  2.             theViewer2.Image = null;
  3.             txt2.Text = null;
  4.             txt1.Text = null;
  5.             // 显示打开文件对话框
  6.             OpenFileDialog dlg = new OpenFileDialog();
  7.             dlg.Filter = "All Files|*.*";
  8.             if (dlg.ShowDialog(this) == DialogResult.OK)
  9.             {
  10.                 try
  11.                 {
  12.                     // 载入图像
  13.                     Image = codecs.Load(dlg.FileName);
  14.                     theViewer1.Image = Image;                   //theViewer1控件显示原始图像
  15.                     int perpixel1 = Image.BitsPerPixel;          //计算原始图像位深

  16.                     txt1.Text = "The image is " + perpixel1 + " bit";            //Textbox1显示原始图像位深
  17.               
  18.               
  19.                 }
  20.                 catch (Exception ex)
  21.                 {
  22.                     MessageBox.Show(this, ex.Message);
  23.                 }
  24.             }
复制代码
9.     在Form1 类中添加如下方法用于判断是否原始图像已载入,用户是否已选择目标图像位深
  1. private bool checking()
  2.         {
  3.             if (theViewer1.Image == null)
  4.             {
  5.                 MessageBox.Show("Please load the Image");
  6.                 return false;
  7.              }
  8.             else if (this.List.SelectedIndex == -1)
  9.             {
  10.                 MessageBox.Show("Please select the target image bit before");
  11.                  return false;
  12.             }
  13.       
  14.               else
  15.             {
  16.                  return true;
  17.             }
  18.         }
复制代码

9.     切换到窗体设计模式,双击”Choose Function”中的”Image Bit Change”,代码模式中会出现如下事件:
  1.    private void imageBitChangeToolStripMenuItem1_Click(object sender, EventArgs e)
  2.         {
  3.         }
复制代码

在该事件中添加如下代码:
  1. bool result1;
  2.             txt2.Text = null;
  3.             theViewer2.Image = null;
  4.             result1=checking();
  5.             if (result1 == false)
  6.             {
  7.                 return;
  8.             }
  9.             //将图像转换成新的位深
  10.             ColorResolutionCommand cmd = new ColorResolutionCommand();
  11.             cmd.Mode = ColorResolutionCommandMode.CreateDestinationImage;
  12.             cmd.BitsPerPixel = bitperpixel;//用户选择的图像位深
  13.             cmd.Order = RasterByteOrder.Bgr;
  14.             cmd.DitheringMethod = RasterDitheringMethod.None;
  15.             cmd.PaletteFlags = ColorResolutionCommandPaletteFlags.UsePalette;
  16.             cmd.SetPalette(RasterPalette.Netscape());
  17.             cmd.Run(Image);//执行命令
  18.             
  19.             RasterImage destImage = cmd.DestinationImage;  //将转换的图像赋给destImage
  20.             theViewer2.Image = destImage;                  //theViewer2显示处理过的图像
  21.             int perpixel2 = destImage.BitsPerPixel;        //计算处理过后的图像位深
  22.             txt2.Text = "The image is " + perpixel2 + " bit";        //Textbox2显示处理后的图像位深
复制代码

10.     同9,双击”RGB To Gray”,并在事件中添加如下代码
  1. bool result2;
  2.             txt2.Text = null;
  3.             theViewer2.Image = null;
  4.             result2=checking();
  5.             if (result2==false)
  6.             {
  7.                 return;
  8.             }
  9.             
  10.             // 转换成灰度图像
  11.             CreateGrayscaleImageCommand cmd = new CreateGrayscaleImageCommand();
  12.             cmd.BitsPerPixel = bitperpixel;       //灰度图像的位深
  13.             cmd.Run(Image);
  14.      
  15.             RasterImage destImage = cmd.DestinationImage;
  16.             theViewer2.Image =destImage;
  17.             int perpixel2 = destImage.BitsPerPixel;
  18.             txt2.Text = "The image is " + perpixel2 + " bit";
复制代码
11.切换到窗体设计模式,双击"Combo Box"控件,代码模式中会出现如下事件,在该事件中添加如下代码用于获取用户选择目标图像位深
  1. private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
  2.         {
  3. }
复制代码
  1.   bitperpixel = Convert.ToInt32((this.List.SelectedItem.ToString()));
复制代码
12.生成解决方案,并运行程序
运行结果如下:
24bit 图像转8bit图像:
24bit图像转8bit灰度图像:
24bit图像转16bit灰度图像:
另外,感兴趣的各位也可以去官方文档查看这两个方法的详细信息,以下是链接:
可以直接搜索ColorResoultionCommond(图像位深转换)以及CreateGryascaleImageCommond(彩色图像灰度化)。
程序Demo:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 1金币 +1000 收起 理由
gw0506 + 1000 很给力!

查看全部评分

1 个回复

倒序浏览
gw0506
超级版主   /  发表于:2016-9-30 11:07:40
沙发
牛!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部