0
Verilen görüntünün 8, 24 veya 32bpp olması durumunda belirlenmiş bir piksel değerine erişebilen bir çalışma kodum var. İşte kod var:1,2,4 bpp görüntülerden piksellere nasıl erişebilirim?
Kullanarak 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);
}
Ve piksel değerini ayarlamak için:
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;
}
Yani
, ben nasıl erişebileceğini (almak set) 1,2 veya 4bpp piksel değerleri?
Sadece bir istisna atın. Bu piksel formatları 20 yıl önce modası geçmiş oldu. İyi kurtuluş, paletler büyük bir pide idi. 8bpp için de atın, böylece yanlış kodunuz herhangi bir hasar veremez. –
Ve hala 4bpp görüntüsüm var, soru değil * 1,2,4 ve 8bpp resimlerle nasıl karşı karşıyayım? *, Ama ** Pikselleri almak ve bu görüntüyle başka bir şey yapmak için nasıl ilerleyebilirim? ** . –