在c#中以像素级操作图像,如果它包含,则将其解码为文本信息?

时间:2012-04-16 13:45:40

标签: c# image encoding

  

如果通过计算包含图像,我们如何从图像中获取信息   没有像素和那种安排。

3 个答案:

答案 0 :(得分:2)

您可以使用.Net

中的Bitmap类

这是一个很好的例子:Image Processing for Dummies with C# and GDI+ Part 1 - Per Pixel Filters

以下 StackOverflow (Question: How to manipulate images at pixel level in C#) 也提供了答案:D

答案 1 :(得分:0)

您可以使用Bitmap (System.Drawing)课程。然后使用方法GetPixel()SetPixel()来操纵像素。但是如果你想要更快地访问像素,请阅读 Bob Powell 这个问题:Using the LockBits method to access image data那个探索指针,用unsafe code进行编译。

答案 2 :(得分:0)

以下是使用指针操作像素数据的示例。

unsafe
{
int red, blue, green;
editImage = new Bitmap("image.jpg");
editWidth = editImage.Width;
editHeight = editImage.Height;
data = editImage.LockBits(new Rectangle(0, 0, editWidth, editHeight), 
ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
byte* dataPtr = (byte*)data.Scan0;
h = trackBar1.Value / 60.0;
D = 1 - Math.Abs((h % 2) - 1);

if (h >= 0 && h < 1)
{
    for (int i = 0; i < editHeight; i++)
    {
        offsetStride = i * data.Stride;
        for (int j = 0; j < editWidth; j++)
        {
            blue = dataPtr[(j * 3) + offsetStride];
            green = dataPtr[(j * 3) + offsetStride + 1];
            red = dataPtr[(j * 3) + offsetStride + 2];

            if (green > blue) max = green;
            else max = blue;
            if (red > max) max = red;

            if (green < blue) min = green;
            else min = blue;
            if (red < min) min = red;

            s = (max == 0) ? 0 : 1d - (1d * min / max);
            v = max / 255d;

            C = v * s;
            X = C * D;
            E = v - C;

            dataPtr[(j * 3) + offsetStride] = (byte)(min);
            dataPtr[(j * 3) + offsetStride + 1] = (byte)((X + E) * 255);
            dataPtr[(j * 3) + offsetStride + 2] = (byte)(max);
        }
    }
}
}

这只会改变图像的色调。对于任何合理大的图像&gt; 100x100像素,除非性能无关紧要,否则不要使用GetPixel或SetPixel。