当前位置: 首页 > article >正文

17.3.3 ImageAttributes类

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

ImageAttributes类包含有关在呈现时如何操作位图和图元文件颜色的信息,它维护多个颜色调整设置,包括颜色调整矩阵、 灰度调整矩阵、 灰度校正值、 颜色映射表和颜色阈值的值。ImageAttributes是在System.Drawing.Imaging命名空间下,建议在所有代码前加上:

using System.Drawing.Imaging;

ImageAttributes常用方法:

  1. SetNoOp:关闭颜色调整。 可以调用 ClearNoOp 方法恢复在调用 SetNoOp 方法前已存在的颜色调整设置。
  2. ClearNoOp:清除NoOp 设置。
  3. SetGamma:设置伽玛值。参数是大于0的浮点数,典型值是从1.0 到 2.2。
  4. ClearGamma:清除伽玛值。
  5. SetThreshold:设置阈值,参数值介于0和1。使用阈值乘以255得到一个数值,颜色的红绿蓝三个分量的值如果小于数值,那么该分量值设置为0,否则设置为255。
  6. ClearThreshold:清除阈值。
  7. SetRemapTable:设置颜色重新映射表,参数是一个ColorMap结构的数组。每个ColorMap结构具有NewColor和OldColor两个属性,分别表示新的颜色和旧的颜色。使用SetRemapTable方法后,旧颜色都被替换成新颜色。
  8. ClearRemapTable:清除颜色重新映射表。
  9. SetOutputChannel:设置CMYK输出通道。参数是一个ColorChannelFlag 枚举,包含以下成员:
    1. ColorChannelC 青色通道。
    2. ColorChannelM 洋红色通道。
    3. ColorChannelY 黄色通道。
    4. ColorChannelK 黑色通道。
  10. ColorChannelLast 应使用上次选择的通道。 
  11. ClearOutputChannel:清除CMYK输出通道设置。
  12. SetColorKey:设置颜色键(透明范围)。通过参数设置颜色上限和下限,以便可以多种颜色变为透明。
  13. ClearColorKey:清除颜色键(透明范围)。
  14. SetColorMatrix:设置颜色调整矩阵。
  15. ClearColorMatrix:清除颜色调整矩阵。

ImageAttributes使用简单,先是通过ImageAttributes 提供的方法快速处理图片颜色,再使用Graphics的DrawImage()方法指定imageAttributes参数即可。

【项目:code17-034】使用ImageAttributes类处理图像。

为确保代码顺利运行,请在所有代码前加入:

Imports System.Drawing.Imaging

窗体级变量、窗体载入、载入图片的代码请参看第17.3.1节【项目:code17-031】。

【例 17.52改变图像伽玛值。

        //伽玛

        private void btnGamma_Click(object sender, EventArgs e)

        {

            Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);

            //这里设置伽玛值为2.2

            ImageAttributes imageAttributes = new ImageAttributes();

            imageAttributes.SetGamma(2.2F);

            Graphics g = 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;

        }

运行结果如下图所示:

图17-51 图像伽玛值改为2.2F

【例 17.53改变图像阈值。

       //阈值

        private void btnThreshold_Click(object sender, EventArgs e)

        {

            Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);

            //这里设置阈值为0.7

            ImageAttributes imageAttributes = new ImageAttributes();

            imageAttributes.SetThreshold(0.7F);

            Graphics g = 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;

        }

运行结果如下图所示:

图17-52图像阈值改为0.7F

【例 17.54颜色重映射。

      //颜色重映射

        private void btnRemapTable_Click(object sender, EventArgs e)

        {

            Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);

            //这里设置使用红色替换黑色

            ColorMap[] mycolormap = new ColorMap[1];

            mycolormap[0] = new ColorMap();

            mycolormap[0].OldColor = Color.Black;

            mycolormap[0].NewColor = Color.Red;

            ImageAttributes imageAttributes =new ImageAttributes();

            imageAttributes.SetRemapTable(mycolormap);

            Graphics g = 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;

        }

运行结果如下图所示:

图17-53 使用红色替换黑色

【例 17.55CMYK输出

      //CMYK输出

        private void btnOutputChannel_Click(object sender, EventArgs e)

        {

            Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);

            //这里输出M通道

            ImageAttributes imageAttributes = new ImageAttributes();

            imageAttributes.SetOutputChannel(ColorChannelFlag.ColorChannelM);

            Graphics g = 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;

        }

运行结果如下图所示:

图17-54 输出图像的M通道

【例 17.56设置颜色键

      //设置颜色键

        private void Button2_Click(object sender, EventArgs e)

        {

            Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);

            //这里将红色设置为透明

            Color lowerColor = Color.FromArgb(230, 0, 0);

            Color upperColor = Color.FromArgb(255, 20, 20);

            ImageAttributes imageAttributes = new ImageAttributes();

            imageAttributes.SetColorKey(lowerColor, upperColor);

            Graphics g = 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;

        }

运行结果如下图所示:

图17-55 将红色设置为透明

 

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

学习更多C#知识,请参看C#教程 目录


http://www.kler.cn/a/528991.html

相关文章:

  • 蓝桥杯嵌入式赛道备考1 —— 基础GPIO实战
  • Python NumPy(11):NumPy 排序、条件筛选函数
  • No.8十六届蓝桥杯备战|C++输入输出|printf|scanf(C++)
  • 一、html笔记
  • LS和MMSE信道估计
  • 程序代码篇---Numpyassert迭代器
  • inquirer 一款命令行交互依赖
  • MINIRAG: TOWARDS EXTREMELY SIMPLE RETRIEVAL-AUGMENTED GENERATION论文翻译
  • leetcode 2080. 区间内查询数字的频率
  • 将markdown文件和LaTex公式转为word
  • 如何编写地信测绘信息相关的综述论文-总结版本
  • 6.攻防世界php_rce
  • 【华为OD-E卷 - 连续出牌数量 100分(python、java、c++、js、c)】
  • 洛谷P2660 zzc 种田
  • 看深度求索如何思索自己的未来
  • 大模型培训讲师老师叶梓分享:DeepSeek多模态大模型janus初探
  • 并发模式:驾驭多线程的艺术
  • 修改题注标签
  • 架构技能(四):需求分析
  • linux为什么不是实时操作系统