如何在图片框图像中旋转色调?

时间:2015-04-22 03:36:20

标签: c# picturebox hue

首先我应该注意,我花了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(); 
            }        
    }

这里有两个问题:

  1. 我以为“浮动度= 60f;”会给我60度旋转,结果我得到大约180度的旋转。我如何纠正这个问题,以便获得正确的色调旋转量?我期待60度并获得180度是一个巨大的错误。

  2. 结果未作为新图像添加到pictureBox中。它在表单上绘制为矩形。我找不到“myGraphics.DrawImage()”的重载(我试过全部30个),它接受一个pictureBox以及所需的“GraphicsUnit.Pixel”和“imageAttributes”。如何更新此代码以便更改图片框中的图像而不是在表单上绘制?也许myGraphics.DrawImage()不是答案。

  3. 非常感谢

0 个答案:

没有答案