Marshall.Copy로 바이트를 복사하려고합니다. 내 코드는 작동하지만 바이트는 이상하다. 제 생각에는, 실제 바이트가 아닌 인덱스가 있습니다. 이 계산하고 다시 저장하면 훨씬 더 큰 바이트 크기 (이미지 크기가 동일합니다) 이미지에서 다른 색상 있어요. 바이트에서Marshall.Copy를 사용하여 비트 맵에서 바이트 배열로 바이트를 복사하고 다시 작동하지 않습니다.
Bitmap bmp = new Bitmap(imagepath);
Width = bmp.Width;
Height = bmp.Height;
byte[] data;
BitmapData bdata;
switch (bmp.PixelFormat)
{
case PixelFormat.Format8bppIndexed:
{
data = new byte[Width * Height];
bdata = bmp.LockBits(new Rectangle(0, 0, Width, Height),ImageLockMode.ReadOnly, bmp.PixelFormat);
Marshal.Copy(bdata.Scan0, data, 0, data.Length);
bmp.UnlockBits(bdata);
break;
}
}
저장 이미지 :
BitmapData bmData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat);
IntPtr pNative = bmData.Scan0;
Marshal.Copy(data, 0, pNative, Width * Height);
bmp.UnlockBits(bmData);
bmp.Save("output.gif",ImageFormat.Gif); //without format, have same problem
처음 픽셀의 색상을 읽으면
, 내가 가지고 :Color [A=0, R=0, G=0, B=2]
. 이것은 입력 이미지에서 실제로 색깔입니까?
나는 왜 출력이 입력과 다른지 알 수 없다. 문제가 어디에 있습니까? 입력과 (작은 이미지에 대한 죄송) 출력에서
ImageConverter 클래스를 사용하여 비트 맵을 바이트 배열로 변환하면 항상 잘 작동합니다. – Sasha