0
私は、与えられたイメージが8,24、または32bppを持つ場合、決定されたピクセル値にアクセスできる作業コードを持っています。ここでのコードは次のとおりです。1,2,4 bppイメージからピクセルにアクセスするにはどうすればよいですか?
BitmapSource
を使用する:
// Get width and height of bitmap
Width = _source.PixelWidth;
Height = _source.PixelHeight;
// Get total locked pixels count
int pixelCount = Width * Height;
// Get source bitmap pixel format size
Depth = _source.Format.BitsPerPixel;
// Create byte array to copy pixel values
int step = Depth/8;
Pixels = new byte[pixelCount * step];
_iptr = _data.BackBuffer;
// Copy data from pointer to array
Marshal.Copy(_iptr, Pixels, 0, Pixels.Length);
int count = Depth/8;
if (count == 0)
count = 1;
//Get start index of the specified pixel
int i = ((y * Width) + x) * count;
if (i > Pixels.Length - count)
throw new IndexOutOfRangeException();
if (Depth == 32) //For 32 bpp get Red, Green, Blue and Alpha
{
byte b = Pixels[i];
byte g = Pixels[i + 1];
byte r = Pixels[i + 2];
byte a = Pixels[i + 3]; // a
clr = Color.FromArgb(a, r, g, b);
}
else if (Depth == 24) //For 24 bpp get Red, Green and Blue
{
byte b = Pixels[i];
byte g = Pixels[i + 1];
byte r = Pixels[i + 2];
clr = Color.FromRgb(r, g, b);
}
else if (Depth == 8) //For 8 bpp get color value (Red, Green and Blue values are the same)
{
byte c = Pixels[i];
clr = Color.FromRgb(c, c, c);
}
画素値を設定するには:だから
if (Depth == 32) //For 32 bpp set Red, Green, Blue and Alpha
{
Pixels[i] = color.B;
Pixels[i + 1] = color.G;
Pixels[i + 2] = color.R;
Pixels[i + 3] = color.A;
}
else if (Depth == 24) //For 24 bpp set Red, Green and Blue
{
Pixels[i] = color.B;
Pixels[i + 1] = color.G;
Pixels[i + 2] = color.R;
}
else if (Depth == 8) //For 8 bpp set color value (Red, Green and Blue values are the same)
{
Pixels[i] = color.B;
}
を、どのように私は(設定、取得)にアクセスすることができ、1,2またはところ4bppピクセル値?
例外をスローします。これらのピクセル形式は20年前に廃止されました。良い余韻、パレットは大きなピタだった。あなたの間違ったコードが損傷を与えることができないように8bppのために投げる。 –
まだ、私は4bppイメージを持っていますが、質問はありません。* 1,2,4,8bイメージにどうやって対処すればいいですか?*、**どうやってピクセルを取得し、そのイメージで他のことをすることができますか? 。 –