C# Bitmap객체를 8bit gray로 byte array에 담기
2021. 2. 5. 15:36ㆍ기타
맞는지 검증은 차차하기로...-_-;
public static byte[] ToGrayscale(Bitmap bmp)
{
int bpp = Image.GetPixelFormatSize(bmp.PixelFormat) / 8;
BitmapData src_data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.WriteOnly, bmp.PixelFormat);
byte[] src_bytes = new byte[src_data.Stride * src_data.Height];
Marshal.Copy(src_data.Scan0, src_bytes, 0, src_bytes.Length);
// Copy the bytes from the image into a byte array
byte[] dst_bytes = new byte[bmp.Height * bmp.Width];
for(int i=0; i<dst_bytes.Length; ++i)
dst_bytes[i] = (byte)((src_bytes[i * bpp + 0] + src_bytes[i * bpp + 1] + src_bytes[i * bpp + 2]) / 3);
bmp.UnlockBits(src_data);
#if DEBUG
/*
Bitmap result = new Bitmap(bmp.Width, bmp.Height, PixelFormat.Format8bppIndexed);
BitmapData dst_data = result.LockBits(new Rectangle(0, 0, result.Width, result.Height), ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);
Marshal.Copy(dst_bytes, 0, dst_data.Scan0, dst_bytes.Length);
result.UnlockBits(dst_data);
ColorPalette Palette = result.Palette;
for (int i = 0; i < Palette.Entries.Length; ++i)
{
Palette.Entries[i] = Color.FromArgb(i, i, i);
}
result.Palette = Palette;
result.Save("dst.jpg");
//*/
#endif
return dst_bytes;
}
'기타' 카테고리의 다른 글
Jetson Xavier boot from SSD (0) | 2021.03.24 |
---|---|
내 컴퓨터 바이트 오더 확인하기 (0) | 2021.03.05 |
Jetson TX2(5) (0) | 2020.05.27 |
Jetson TX2(4) - Tensorflow install (0) | 2020.05.27 |
Jetson TX2 설정(3) (0) | 2020.05.27 |