【发布时间】:2015-05-01 19:08:15
【问题描述】:
我想学习如何在 Visual Studio 中编写一些非常基本的图像编辑。我正在使用 openFileDialog 将图片加载到图片框中。我在互联网上发现了一些循环,这些循环旨在逐个像素地转换颜色,但由于各种原因(每个代码示例不同)都不起作用。添加(或减去)红色值的正确方法是什么,例如更改图片框中图像的色调?我正在使用 C#。
谢谢
编辑:这是一个至少是一个起点的例子:
Bitmap bmp = (Bitmap)Bitmap.FromFile(pictureBox1.ImageLocation);
for (int x = 0; x < bmp.Width; x++)
{
for (int y = 0; y < bmp.Height; y++)
{
bmp.GetPixel(x, y);
bmp.SetPixel(x, y, Color.FromArgb(128, 0, 128));
}
}
pictureBox1.Image = bmp;
MessageBox.Show("Done");
这允许我逐个像素地获取图像,并将颜色更改为紫色,在本例中为紫色。当然,这不是我想做的。我想要做的是获取每个像素的原始RGB值,并增加或减少这些值。换句话说,执行一些非常基本的颜色校正。
如何获取每个像素的当前 RGB,并设置新像素的 RGB?
我也看到此贴作为示例。问题是,我看不到如何使用 ModifyHue:
var bmp = new Bitmap(pictureBox1.ImageLocation);
for (int x = 0; x < bmp.Width; x++)
{
for (int y = 0; y < bmp.Height; y++)
{
Color oldColor = bmp.GetPixel(x, y);
Color newColor = ModifyHue(oldColor);
bmp.SetPixel(x, y, newColor);
}
}
pictureBox1.Image = bmp;
我意识到我应该第一次发布代码示例。谢谢
【问题讨论】:
-
您应该尝试发布您的尝试之一,以便我们可以更好地帮助您。为了速度,您最终应该使用
LockBits,但现在要了解基础知识,使用SetPixel对Bitmap中的像素进行常规循环就可以了。之后,您需要将更改后的位图重新分配到PictureBox.Image! -
一个简单的问题:如何重新分配更改的位图?不这样做可能是我没有看到任何结果的原因。我正在刷新图片框,但这并没有完成。谢谢
-
完成对
Bitmap bmp的更改后,您只需编写picturebox1.Image = bmp; -
PS:我正在尝试 pictureBox1.Image = null;图片框1.Image = bmp;图片框1.Refresh();但没有看到结果。删除 null 也不起作用。谢谢
-
现在得到一些结果,我需要稍后微调此代码,然后将其发布,以便每个人都可以按照您的建议提供更多帮助。谢谢你
标签: c# image-processing picturebox openfiledialog