首先我应该注意,我花了4个小时探索这个问题的各种变化。大多数答案都引用了MSDN上的教程,这些教程涉及获取一块颜色并绘制一个具有不同色调的新矩形。这与我的目标非常不同。我想在图片框中拍摄图像并旋转整个图像的色调(从1到359度)。
这个问题完全展示了我想要做的事:Rotate Hue in C#。不幸的是,答案引用了C / C ++,而不是C#。这是第一个,我没有代码可以发布,因为没有什么能接近完成我想要完成的任务。谢谢。
编辑:我只是处理了一些我认为不成功的代码,事实证明我的结果只是隐藏,正在进行一些色调变化,而且很快,只是不正确。这就是我到目前为止所做的: private void ColorRotation_Click(object sender, EventArgs e)
{
if (pictureBoxMain.Image != null)
{
Bitmap image = new Bitmap(pictureBoxMain.Image);
ImageAttributes imageAttributes = new ImageAttributes();
int width = image.Width;
int height = image.Height;
float degrees = 60f;
double r = degrees * System.Math.PI / 180; // degrees to radians
float[][] colorMatrixElements = {
new float[] {(float)System.Math.Cos(r), (float)System.Math.Sin(r), 0, 0, 0},
new float[] {(float)-System.Math.Sin(r), (float)-System.Math.Cos(r), 0, 0, 0},
new float[] {0, 0, 2, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {0, 0, 0, 0, 1}};
ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);
imageAttributes.SetColorMatrix(
colorMatrix,
ColorMatrixFlag.Default,
ColorAdjustType.Bitmap);
Graphics myGraphics = CreateGraphics();
Rectangle myRectangle = new Rectangle();
pictureBoxMain.Image = image;
myRectangle.Width = pictureBoxMain.Width;
myRectangle.Height = pictureBoxMain.Height;
myGraphics.DrawImage(pictureBoxMain.Image, myRectangle, 30, 50, myRectangle.Width, myRectangle.Height, GraphicsUnit.Pixel, imageAttributes);
pictureBoxMain.Refresh();
}
}
这里有两个问题:
我以为“浮动度= 60f;”会给我60度旋转,结果我得到大约180度的旋转。我如何纠正这个问题,以便获得正确的色调旋转量?我期待60度并获得180度是一个巨大的错误。
结果未作为新图像添加到pictureBox中。它在表单上绘制为矩形。我找不到“myGraphics.DrawImage()”的重载(我试过全部30个),它接受一个pictureBox以及所需的“GraphicsUnit.Pixel”和“imageAttributes”。如何更新此代码以便更改图片框中的图像而不是在表单上绘制?也许myGraphics.DrawImage()不是答案。
非常感谢