0

ピクセル数とその配置を計算することにより、画像に含まれている場合、画像から情報を取得するにはどうすればよいですか。

4

3 に答える 3

2

.Net で Bitmap クラスを利用できます

ここに良い例があります: C# と GDI+ を使用したダミーの画像処理パート 1 - ピクセルごとのフィルター

また、次のStackOverflow(質問:C#でピクセルレベルで画像を操作する方法)はすでに答えを提供しています:D

于 2012-04-16T13:51:44.803 に答える
0

Bitmap (System.Drawing)クラスを使用できます。次に、ピクセルを操作するには、メソッドGetPixel()およびSetPixel()を使用します。しかし、ピクセルへのより高速なアクセスが必要な場合は、次の記事をお読みください:ポインターを悪用するBob PowellによるLockBits メソッドを使用して画像データにアクセスし、安全でないコードでコンパイルする.

于 2012-04-16T14:15:10.000 に答える
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);
        }
    }
}
}

これは、画像の色合いを変更するだけです。100x100 ピクセルを超えるかなり大きな画像の場合は、パフォーマンスが問題にならない限り、GetPixel や SetPixel を使用しないでください。

于 2012-04-17T00:25:17.487 に答える