vb.net 教程 5-16 图像处理之ImageAttributes 类1 颜色矩阵2

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
上一节讲了原理,本节主要讲颜色矩阵的运用。

首先学习ColorMatrix (颜色矩阵)类

ColorMatrix是一个包含 RGBAW 空间坐标的 5 x 5 矩阵,关于RGBAW这5个分量的含义在上一节《vb.net 教程 5-16 图像处理之ImageAttributes 类1 颜色矩阵1》已经说明了,这里不再累述。

它的构造函数包括

1、ColorMatrix()

2、ColorMatrix(Single()())

属性包括

Item:ColorMatrix 中位于指定的行和列的元素

Matrix00:Single,单精度浮点数。 ColorMatrix 第 0行第 0 列的元素 (注意,同数组,矩阵行列的起始从0开始)

Matrix01:Single,单精度浮点数。ColorMatrix 第 0行第 1 列的元素

……

Matrix44:Single,单精度浮点数。ColorMatrix 第 4行第4 列的元素

Matrix00-Matrix44的位置如下图:

具体在使用颜色矩阵的时候也是两种方法

第一种方法是声明一个ColorMatrix实例,然后使对它的属性Matrix00-Matrix44赋值。

常用的是第二种,定义并初始化一个二位数组,然后用构造函数 ColorMatrix(Single()()) 直接初始化一个Matrix:

        Dim imgMatrixElement()() As Single = {
          New Single() {1, 0, 0, 0, 0},
          New Single() {0, 0, 0, 0, 0},
          New Single() {0, 0, 0, 0, 0},
          New Single() {0, 0, 0, 1, 0},
          New Single() {0, 0, 0, 0, 0}
        }
        Dim imgMatrix As New ColorMatrix(imgMatrixElement)
然后使用imageAttributes.SetColorMatrix()方法,为指定类别设置颜色调整矩阵,例如:

imageAttributes.SetColorMatrix(imgMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap)
第一个参数是要进行颜色调整的矩阵
第二个参数是ColorMatrixFlag 枚举,包含:
    AltGrays:仅调整灰色底纹。
    Default:指定所有的颜色值(包括灰色底纹)都由同样的颜色调整矩阵来调整。
    SkipGrays:指定调整所有颜色,但不调整灰色底纹。 灰色底纹是指其红色、绿色和蓝色分量的值都相同的任何颜色。
  通常情况下使用的是 ColorMatrixFlag.Default。
第三个参数是ColorAdjustType 枚举,包括:
    Any:指定的类型的数目。
    Bitmap:Bitmap 对象的颜色调整信息。
    Brush:Brush 对象的颜色调整信息。
    Count:指定的类型的数目。
    Default:自身没有颜色调整信息的所有 GDI+ 对象所使用的颜色调整信息。
    Pen:Pen 对象的颜色调整信息。
    Text:文本的颜色调整信息。
  通常情况下我们对图像的颜色进行调整,使用ColorAdjustType.Bitmap。

以仅保留红色分量为例,看看具体代码,注意:使用代码前,必须 Imports System.Drawing.Imaging

   '矩阵
    Private Sub btnDraw_Click(sender As Object, e As EventArgs) Handles btnDraw.Click
        Dim imageAttributes As New ImageAttributes()
 
        '仅红色分量
        Dim imgMatrixElement()() As Single = {
          New Single() {1, 0, 0, 0, 0},
          New Single() {0, 0, 0, 0, 0},
          New Single() {0, 0, 0, 0, 0},
          New Single() {0, 0, 0, 1, 0},
          New Single() {0, 0, 0, 0, 0}
        }
 
        Dim imgMatrix As New ColorMatrix(imgMatrixElement)
        imageAttributes.SetColorMatrix(imgMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap)
 
        Dim destImg As New Bitmap(sourceImg.Width, sourceImg.Height)
        Dim g As Graphics = Graphics.FromImage(destImg)
        g.DrawImage(sourceImg, New Rectangle(0, 0, sourceImg.Width, sourceImg.Height), 0, 0, sourceImg.Width, sourceImg.Height,
                    GraphicsUnit.Pixel, imageAttributes)
 
        picDest.Image = destImg
    End Sub

运行效果如下:

由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供参考。

学习更多vb.net知识,请参看 vb.net教程 目录

 
————————————————
版权声明:本文为CSDN博主「VB.Net」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
书描述】: GDI+是新一代的形接口。如果要设计.NET Framework形应用程序,就必须使用GDI+。本书是一本为.NET开发人员讲授如何编写Windows和Web形应用程序的专著,书中全面介绍了GDI+和Windows形程序设计的基本知识和GDI+形程序设计的各个方面。 本书适合于开发GDI+形应用程序的初、中级程序员阅读,书中给出了大量用C#语言编写的可重用示例代码,可以使读者更快地掌握书中所介绍的各种知识和概念。本书也可以作为大专院校相关课程的重要辅导教材。 【编辑推荐】: 《GDI+形程序设计》是为.NET开发人员介绍如何编写Windows和Web形应用程序的指南用书。通过大量详尽的实例,本书使有经验的程序员可以更深入地理解在.NET Framework库中定义和整个GDI+API。   本书从介绍GDI+Windows形程序设计的基本知识开始,其核心是对一些实际问题的指导,包括如何使用Windows Forms及如何优化GDI+的性能。本书通过一些例子来说明如何开发真实世界的工具,如GDI+Painter、GDI+Editro、ImageViewer和ImageAnimator等。另外,作者还给出了大量使用C#语言编写的可重用示例代码,读者可从网上下载完整的C#和Visual Basic.NET源代码,并可通过这些源代码查看书中各的彩色效果 第1章 GDI+ ——下一代形接口 1.1 理解GDI+ 1.2 探索GDI+ 的功能 1.3 从GDI的角度学习GDI+ 1.4 .NET中的GDI+ 名称空间和 总结 第2章 第一个GDI+ 应用程序 2.1 绘制表面 2.2 坐标系统 2.3 指南——第一个GDI+ 应用程序 2.4 一些基本的GDI+ 对象 总结 第3章 Graphics 3.1 Graphics的属性 3.2 Graphics的方法 3.3 GDI+ Painter应用程序 3.4 绘制饼 总结 第4章 使用画笔和钢笔 4.1 理解和使用画笔 4.2 在GDI+ 中使用钢笔 4.3 使用钢笔进行变形 4.4 使用画笔进行变形 4.5 系统钢笔和系统画笔 4.6 一个真实世界的例子 ——在GDI+ Painter应用程序中添加颜色、钢笔和画笔 总结 第5章 颜色、字体和文本 5.1 访问Graphics对象 5.2 使用颜色 5.3 使用字体 5.4 使用文本和字符串 5.5 渲染文本的质量和性能 5.6 高级版式 5.7 一个简单的文本编辑器 5.8 文本变形 总结 第6章 矩形和区域 6.1 Rectangle结构体 6.2 Region 6.3 区域和剪辑 6.4 剪辑区域示例 6.5 区域、非矩形窗体和控件 总结 第7章 图像处理 7.1 光栅像和矢量像 7.2 使用像 7.3 操作像 7.4 在GDI+ 中播放动画 7.5 使用位 7.6 使用标 7.7 扭曲像 7.8 绘制透明的形对象 7.9 查看多个像 7.10 使用片框查看像 7.11 使用不同的大小保存像 总结 第8章 高级图像处理 8.1 渲染位的一部分 8.2 使用元文件 8.3 使用颜色对象应用颜色映射 8.4 像属性和ImageAttributes 8.5 编码器参数与像格式 总结 第9章 高级二维形 9.1 线帽和线条样式 9.2 理解并使用形路径 9.3 形容器 9.4 读取像的元数据 9.5 混合 9.6 Alpha混合 9.7 其他高级二维主题 总结 第10章 变形 10.1 坐标系统 10.2 变形的型 10.3 Matrix与变形 10.4 Graphics与变形 10.5 全局变形、局部变形和复合变形 10.6 像变形 10.7 颜色变形和颜色矩阵 10.8 图像处理中的矩阵操作 10.9 文本变形 10.10 变形顺序的重要性 总结 第11章 打印 11.1 简要地回顾使用Microsoft Windows进行打印的历史 11.2 打印过程概述 11.3 第一个打印应用程序 11.4 打印机的设置 11.5 PrintDocument和Print事件 11.6 打印文本 11.7 打印形 11.8 打印对话框 11.9 自定义页面设置 11.10 打印多个页面 11.11 页边打印——注意事项 11.12 进入细节——自定义控制和打印控制器 总结 第12章 开发GDI+ Web应用程序 12.1 创建第一个ASP.NET Web应用程序 12.2 第一个形Web应用程序 12.3 绘制简单的形 12.4 在Web上绘制像 12.5 绘制曲线 12.6 绘制饼 总结 第13章 GDI+ 的最佳实践及性能技术 13.1 理解渲染过程 13.2 双缓存和无抖动绘 13.3 理解SetStyle方法 13.4 绘过程的质量与性能 总结 第14章 GDI互操作性 14.1 在受控环境中使用GDI 14.2 在受控代码中使用GDI的注意事项 总结 第15章 其他GDI+ 示例 15.1 设计交互式GUI应用程序 15.2 绘制具有形状的窗体和Windows控件 15.3 为绘制的像添加版权信息 15.4 从流或数据库读取及写入像 15.5 创建自绘制的列表控件 总结 附录A .NET中的异常处理
c#形书中最经典的一本书当中包括饼,条形,绘制作等 第1章 GDI+ ——下一代形接口 1.1 理解GDI+ 1.2 探索GDI+ 的功能 1.3 从GDI的角度学习GDI+ 1.4 .NET中的GDI+ 名称空间和 总结 第2章 第一个GDI+ 应用程序 2.1 绘制表面 2.2 坐标系统 2.3 指南——第一个GDI+ 应用程序 2.4 一些基本的GDI+ 对象 总结 第3章 Graphics 3.1 Graphics的属性 3.2 Graphics的方法 3.3 GDI+ Painter应用程序 3.4 绘制饼 总结 第4章 使用画笔和钢笔 4.1 理解和使用画笔 4.2 在GDI+ 中使用钢笔 4.3 使用钢笔进行变形 4.4 使用画笔进行变形 4.5 系统钢笔和系统画笔 4.6 一个真实世界的例子 ——在GDI+ Painter应用程序中添加颜色、钢笔和画笔 总结 第5章 颜色、字体和文本 5.1 访问Graphics对象 5.2 使用颜色 5.3 使用字体 5.4 使用文本和字符串 5.5 渲染文本的质量和性能 5.6 高级版式 5.7 一个简单的文本编辑器 5.8 文本变形 总结 第6章 矩形和区域 6.1 Rectangle结构体 6.2 Region 6.3 区域和剪辑 6.4 剪辑区域示例 6.5 区域、非矩形窗体和控件 总结 第7章 图像处理 7.1 光栅像和矢量像 7.2 使用像 7.3 操作像 7.4 在GDI+ 中播放动画 7.5 使用位 7.6 使用标 7.7 扭曲像 7.8 绘制透明的形对象 7.9 查看多个像 7.10 使用片框查看像 7.11 使用不同的大小保存像 总结 第8章 高级图像处理 8.1 渲染位的一部分 8.2 使用元文件 8.3 使用颜色对象应用颜色映射 8.4 像属性和ImageAttributes 8.5 编码器参数与像格式 总结 第9章 高级二维形 9.1 线帽和线条样式 9.2 理解并使用形路径 9.3 形容器 9.4 读取像的元数据 9.5 混合 9.6 Alpha混合 9.7 其他高级二维主题 总结 第10章 变形 10.1 坐标系统 10.2 变形的型 10.3 Matrix与变形 10.4 Graphics与变形 10.5 全局变形、局部变形和复合变形 10.6 像变形 10.7 颜色变形和颜色矩阵 10.8 图像处理中的矩阵操作 10.9 文本变形 10.10 变形顺序的重要性 总结 第11章 打印 11.1 简要地回顾使用Microsoft Windows进行打印的历史 11.2 打印过程概述 11.3 第一个打印应用程序 11.4 打印机的设置 11.5 PrintDocument和Print事件 11.6 打印文本 11.7 打印形 11.8 打印对话框 11.9 自定义页面设置 11.10 打印多个页面 11.11 页边打印——注意事项 11.12 进入细节——自定义控制和打印控制器 总结 第12章 开发GDI+ Web应用程序 12.1 创建第一个ASP.NET Web应用程序 12.2 第一个形Web应用程序 12.3 绘制简单的形 12.4 在Web上绘制像 12.5 绘制曲线 12.6 绘制饼 总结 第13章 GDI+ 的最佳实践及性能技术 13.1 理解渲染过程 13.2 双缓存和无抖动绘 13.3 理解SetStyle方法 13.4 绘过程的质量与性能 总结 第14章 GDI互操作性 14.1 在受控环境中使用GDI 14.2 在受控代码中使用GDI的注意事项 总结 第15章 其他GDI+ 示例 15.1 设计交互式GUI应用程序 15.2 绘制具有形状的窗体和Windows控件 15.3 为绘制的像添加版权信息 15.4 从流或数据库读取及写入像 15.5 创建自绘制的列表控件 总结 附录A .NET中的异常处理
WinCE5.0下实现透明背景按钮(.net C#) 需要在wince5.0下实现形化界面,用于功能导航,用过GPS导航就知道了,似的界面。众所周知gif,PNG等片,都是可以实现透明背景的,在win下这应该不是个问题。但在ce5.0下,无论是透明背景的ICON、PNG、GIF都无法简单实现透明背景,alpha通道会丢失。网上搜索了些资料,当然也有办法解决,大家可以查一下,但性能较低。最终按微软SDK自带的一个计算器的源码思路解决了透明背景按钮问题。 要点: 1.如何画透明背景的BMP 2.如何画按钮并实现事件 思路及解决: 1.画按钮的思路:   ImageAttributes imageAttr=new ImageAttributes();   imageAttr.SetColorKey(Color.FromArgb(255, 0, 255),Color.FromArgb(255, 0, 255));   然后使用Graphics.DrawImage(,,,,,imageAttr)函数在指定的位置上画出透明的片。   2. 事件驱动的思路: 事先定义好各按钮的指令   public enum Command { cmd1 = 0,//无操作 cmd2,//第一项操作 cmd3,//第二项操作 cmd4,//可自己扩展 max } 在创建按钮的同时明确以下几个参数 容器控件、资源存放的目录、X坐标、Y坐标、背景片、按钮的标题、非激活时的文字颜色、激活时的文字颜色、触发的指令。创建窗口,针对窗体事件做如下定义 •在Form_Load时生成按钮, •在Form_OnPaint时使用按钮自身的Render函数根据自己状态(有没有被点中)重画, •在MouseDown时判断点击位置是否在某个按钮的内部,如果是在它内部就改变它的状态,设置状态的同时调用窗口控件的Graphics局部重画这个按钮,     •在Form_MouseUp时判断现在的位置是不是在按钮内部,如果按下了,抬起时又移出了范围则不处理。如果按下与抬起都是在同一个按钮的边界内部则执行这个按钮所设置的指令。 以下是我使用的资源,将作为按钮的片需要透明的部分设置成RGB(255,0,255),那种非常刺眼的颜色。以下片可以另存为BMP使用,设置的分辨是800*600的CE设备。
以下是使用 tesseract 进行 OCR 的 VB.NET 代码示例: ```vb Imports System Imports System.IO Imports System.Drawing Imports System.Drawing.Imaging Imports System.Diagnostics Imports System.Runtime.InteropServices Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim inputFile As String = "test.png" Dim outputFile As String = "output.txt" Dim tesseractPath As String = "C:\Program Files (x86)\Tesseract-OCR\tesseract.exe" ' Convert the input image to grayscale Dim bmp As New Bitmap(inputFile) Dim grayBmp As New Bitmap(bmp.Width, bmp.Height, Imaging.PixelFormat.Format8bppIndexed) Using g As Graphics = Graphics.FromImage(grayBmp) Dim colorMatrix As New ColorMatrix(New Single()() _ {New Single() {0.3F, 0.3F, 0.3F, 0, 0}, New Single() {0.59F, 0.59F, 0.59F, 0, 0}, New Single() {0.11F, 0.11F, 0.11F, 0, 0}, New Single() {0, 0, 0, 1, 0}, New Single() {0, 0, 0, 0, 1}}) Dim ia As New ImageAttributes() ia.SetColorMatrix(colorMatrix) g.DrawImage(bmp, New Rectangle(0, 0, bmp.Width, bmp.Height), _ 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel, ia) End Using ' Save the grayscale image to a file grayBmp.Save("temp.tif", Imaging.ImageFormat.Tiff) ' Run tesseract on the grayscale image Dim processInfo As New ProcessStartInfo() processInfo.FileName = tesseractPath processInfo.Arguments = "temp.tif " & outputFile & " -l eng" processInfo.CreateNoWindow = True processInfo.UseShellExecute = False processInfo.RedirectStandardOutput = True processInfo.RedirectStandardError = True Dim process As Process = Process.Start(processInfo) process.WaitForExit() ' Load the output text file and display the result Dim outputText As String = File.ReadAllText(outputFile) MessageBox.Show(outputText) ' Delete the temporary files File.Delete("temp.tif") File.Delete(outputFile) End Sub End Class ``` 请注意,您需要在计算机上安装 tesseract OCR 引擎,并相应地更新 `tesseractPath` 变量。此外,您也可以根据需要更改语言设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值