2016-04-02 6 views
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ピクセル値?

+0

例外をスローします。これらのピクセル形式は20年前に廃止されました。良い余韻、パレットは大きなピタだった。あなたの間違ったコードが損傷を与えることができないように8bppのために投げる。 –

+0

まだ、私は4bppイメージを持っていますが、質問はありません。* 1,2,4,8bイメージにどうやって対処すればいいですか?*、**どうやってピクセルを取得し、そのイメージで他のことをすることができますか? 。 –

答えて

0

現在、ピクセル値を読み取ろうとする前に画像を他のFormatに変換しています。それは私の問題を解決します。