비트 맵 저장시 GDI + 일반 오류는 분명히 SO와 웹에 대한 내 연구에 따르면 일반적인 문제입니다. 단순화 된 스 니펫을 보면 다음과 같습니다.GDI + LockBits를 사용하여 메모리에서 생성 된 일반 오류 저장
byte[] bytes = new byte[2048 * 2048 * 2];
for (int i = 0; i < bytes.Length; i++)
{
// set random or constant pixel data, whatever you want
}
Bitmap bmp = new Bitmap(2048, 2048, PixelFormat.Format16bppGrayScale);
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, 2048, 2048), ImageLockMode.ReadWrite, bmp.PixelFormat);
System.Runtime.InteropServices.Marshal.Copy(bytes, 0, bmpData.Scan0, 8388608);
bmp.UnlockBits(bmpData);
bmp.Save(@"name.bmp");
결과로 0x80004005 일반 오류가 발생합니다. 이것에 대한 일반적인 이유는 구성 요소에 자물쇠라고하지만, 난 아무것도 볼 수 없어. 난 그냥 장님인가요? 저장하고있는 경로가 존재합니다. 물론 비어있는 bmp 파일 만 생성됩니다 (0B).
배경 : C++/CLI 래퍼를 사용하여 .NET으로 전송하는 카메라 드라이버에서 픽셀 데이터를 가져오고 있으므로 위의 Bitmap 객체는 함수 호출에서 반환됩니다. 그러나이 작은 예제가 이미 실패했기 때문에 어댑터에 문제가 없다고 생각합니다.
모든 의견을 보내 주시면 감사하겠습니다.
16 비트 그레이 스케일은 유효한 bmp 형식이 아닐 수도 있습니다. –
솔직히 생각하지 않았습니다. 인덱싱 된 8bpp로 전환하면 오류없이 파일이 생성됩니다. 궁극적 인 목표는 그레이 스케일 16bpp 이미지를 PNG로 저장하는 것입니다.하지만 위 코드를'bmp.Save (@ "name.bmp", ImageFormat.Png);로 대체하는 것은 효과가 없습니다. – simd
저장시 ImageFormat.Bmp를 지정해 보셨습니까? 이 답변보기 : http://social.msdn.microsoft.com/Forums/vstudio/en-US/10252c05-c4b6-49dc-b2a3-4c1396e2c3ab/action?threadDisplayName=writing-a-16bit-grayscale-image – Ben