当前位置: 首页> 文旅> 美景 > dyndns免费域名_乌鲁木齐网站设计定制_网页设计个人主页模板_宁波百度关键词推广

dyndns免费域名_乌鲁木齐网站设计定制_网页设计个人主页模板_宁波百度关键词推广

时间:2025/8/26 6:56:14来源:https://blog.csdn.net/ljygood2/article/details/144338187 浏览次数:0次
dyndns免费域名_乌鲁木齐网站设计定制_网页设计个人主页模板_宁波百度关键词推广

此示例产生了一些令人印象深刻的结果,但实际上非常简单。
它使用其他几个示例演示的 ImageAttribute 技术来快速操作图像的颜色。
下面的AdjustColor方法启动图像着色的过程。

// Adjust the image's colors.
private Image AdjustColor(Image image)
{// Make the ColorMatrix.ColorMatrix cm = GetColorMatrix();ImageAttributes attributes = new ImageAttributes();attributes.SetColorMatrix(cm);// Make the result image.return image.CopyImage(attributes);
}


此方法调用稍后描述的GetColorMatrix方法来获取一个ColorMatrix对象,该对象保存您在文本框中输入的值。然后,它创建一个ImageAttribute对象,并使用其SetColorMatrix方法将ColorMatrix存储在ImageAttribute对象中。最后,它调用CopyImage扩展方法(稍后描述)将颜色矩阵应用于图像并返回结果。

以下代码显示GetColorMatrix方法。
// Return the matrix entered by the user.
private ColorMatrix GetColorMatrix()
{float[][] values = GetMatrix();if (values == null) return null;return new ColorMatrix(values);
}

GetColorMatrix 方法调用GetMatrix方法来获取一个float[][],其中包含您在程序的文本框中输入的值。以下代码显示GetMatrix方法。

private float[][] GetMatrix()
{float[][] values = new float[][]{new float[5],new float[5],new float[5],new float[5],new float[5],};for (int i = 0; i < 5; i++){for (int j = 0; j < 5; j++){float value;if (!float.TryParse(TextBoxes[i][j].Text, out value)){MessageBox.Show("Invalid entry");TextBoxes[i][j].Focus();return null;}values[i][j] = value;}}return values;
}

此方法创建一个float[][] ,然后通过循环遍历TextBoxes数组的行和列来填充它,该数组保存对程序的TextBox控件的引用。


以下代码显示程序如何初始化TextBoxes数组。

private TextBox[][] TextBoxes;// Display the image converted to sepia tone.
private void Form1_Load(object sender, EventArgs e)
{TextBoxes = new TextBox[][]{new TextBox[] {txt00, txt01, txt02, txt03, txt04},new TextBox[] {txt10, txt11, txt12, txt13, txt14},new TextBox[] {txt20, txt21, txt22, txt23, txt24},new TextBox[] {txt30, txt31, txt32, txt33, txt34},new TextBox[] {txt40, txt41, txt42, txt43, txt44},};
}

 

程序在类级别声明了TextBoxes数组。其Form_Load事件处理程序初始化该数组。

快速回顾一下,GetColorMatrix调用GetMatrix来获取您输入的浮点值,并使用该数组创建和返回ColorMatrix对象。GetMatrix方法循环遍历TextBoxes数组以填充它返回的数组。


复制图像
.NET Image类提供了几种创建图像副本的方法。最省事的方法是调用其Clone方法。不幸的是,该方法返回一个通用oobject ,因此如果您想将其用作Image,则需要将其转换为Image。

复制图像是我经常做的事情,所以我决定创建以下两种扩展方法来使其更容易。

public static class Extensions
{public static Image CopyImage(this Image image){return (Image)image.Clone();}public static Image CopyImage(this Image image, ImageAttributes attributes){Bitmap result = new Bitmap(image.Width, image.Height);using (Graphics gr = Graphics.FromImage(result)){Rectangle rect = new Rectangle(0, 0, image.Width, image.Height);gr.DrawImage(image, rect,0, 0, image.Width, image.Height,GraphicsUnit.Pixel, attributes);}return result;}
}

第一个方法克隆图像,将结果重新转换为Image并返回结果。您可以像以下代码一样使用它。

Image copy_of_image = original_image.CopyImage();

第二种方法复制图像,同时将ImageAttributes对象应用于该图像。这就是本示例为图像着色的方式。

第二种方法创建一个与原始图像大小相同的新Bitmap对象,并创建一个关联的Graphics对象。它创建一个大小适合图像的Rectangle ,然后调用Graphics对象的DrawImage方法将图像绘制到新的Bitmap上。(这就是我想要制作扩展方法的原因之一。将图像绘制到另一幅图像上的方法很不方便。使用这种方法,我不必费心创建一个Rectangle并将坐标、宽度和高度传递给DrawImage方法。)

前面显示的AdjustColor 方法在以下语句中 使用了CopyImage的第二个版本。

// Make the result image.
return image.CopyImage(attributes);

示例程序还包括其他一些细节,例如打开和保存文件的代码,以及填充特定颜色(例如红色、绿色、棕褐色等)矩阵值的菜单项。(文章顶部的图片显示了转换为棕褐色调的图像。)

完整源码:
https://download.csdn.net/download/ljygood2/90104001

关键字:dyndns免费域名_乌鲁木齐网站设计定制_网页设计个人主页模板_宁波百度关键词推广

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: