本帖最后由 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类中定义如下变量用于获取用户选择的图像位深 7. 双击“File”,在代码编辑模式中会出现如下事件: - private void imageBitChangeToolStripMenuItem_Click(object sender, EventArgs e)
- {
- }
复制代码
在该事件中添加如下代码 - theViewer1.Image = null;
- theViewer2.Image = null;
- txt2.Text = null;
- txt1.Text = null;
- // 显示打开文件对话框
- OpenFileDialog dlg = new OpenFileDialog();
- dlg.Filter = "All Files|*.*";
- if (dlg.ShowDialog(this) == DialogResult.OK)
- {
- try
- {
- // 载入图像
- Image = codecs.Load(dlg.FileName);
- theViewer1.Image = Image; //theViewer1控件显示原始图像
- int perpixel1 = Image.BitsPerPixel; //计算原始图像位深
- txt1.Text = "The image is " + perpixel1 + " bit"; //Textbox1显示原始图像位深
-
-
- }
- catch (Exception ex)
- {
- MessageBox.Show(this, ex.Message);
- }
- }
复制代码9. 在Form1 类中添加如下方法用于判断是否原始图像已载入,用户是否已选择目标图像位深 - private bool checking()
- {
- if (theViewer1.Image == null)
- {
- MessageBox.Show("Please load the Image");
- return false;
- }
- else if (this.List.SelectedIndex == -1)
- {
- MessageBox.Show("Please select the target image bit before");
- return false;
- }
-
- else
- {
- return true;
- }
- }
复制代码
9. 切换到窗体设计模式,双击”Choose Function”中的”Image Bit Change”,代码模式中会出现如下事件: - private void imageBitChangeToolStripMenuItem1_Click(object sender, EventArgs e)
- {
- }
复制代码
在该事件中添加如下代码: - bool result1;
- txt2.Text = null;
- theViewer2.Image = null;
- result1=checking();
- if (result1 == false)
- {
- return;
- }
- //将图像转换成新的位深
- ColorResolutionCommand cmd = new ColorResolutionCommand();
- cmd.Mode = ColorResolutionCommandMode.CreateDestinationImage;
- cmd.BitsPerPixel = bitperpixel;//用户选择的图像位深
- cmd.Order = RasterByteOrder.Bgr;
- cmd.DitheringMethod = RasterDitheringMethod.None;
- cmd.PaletteFlags = ColorResolutionCommandPaletteFlags.UsePalette;
- cmd.SetPalette(RasterPalette.Netscape());
- cmd.Run(Image);//执行命令
-
- RasterImage destImage = cmd.DestinationImage; //将转换的图像赋给destImage
- theViewer2.Image = destImage; //theViewer2显示处理过的图像
- int perpixel2 = destImage.BitsPerPixel; //计算处理过后的图像位深
- txt2.Text = "The image is " + perpixel2 + " bit"; //Textbox2显示处理后的图像位深
复制代码
10. 同9,双击”RGB To Gray”,并在事件中添加如下代码 - bool result2;
- txt2.Text = null;
- theViewer2.Image = null;
- result2=checking();
- if (result2==false)
- {
- return;
- }
-
- // 转换成灰度图像
- CreateGrayscaleImageCommand cmd = new CreateGrayscaleImageCommand();
- cmd.BitsPerPixel = bitperpixel; //灰度图像的位深
- cmd.Run(Image);
-
- RasterImage destImage = cmd.DestinationImage;
- theViewer2.Image =destImage;
- int perpixel2 = destImage.BitsPerPixel;
- txt2.Text = "The image is " + perpixel2 + " bit";
复制代码11.切换到窗体设计模式,双击"Combo Box"控件,代码模式中会出现如下事件,在该事件中添加如下代码用于获取用户选择目标图像位深 - private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
- {
- }
复制代码- bitperpixel = Convert.ToInt32((this.List.SelectedItem.ToString()));
复制代码12.生成解决方案,并运行程序 运行结果如下: 24bit 图像转8bit图像: 24bit图像转8bit灰度图像: 24bit图像转16bit灰度图像: 另外,感兴趣的各位也可以去官方文档查看这两个方法的详细信息,以下是链接: 可以直接搜索ColorResoultionCommond(图像位深转换)以及CreateGryascaleImageCommond(彩色图像灰度化)。 程序Demo: |