ImageFormat.Bmp 형식의 Bitmap.Save 메서드를 사용하면 파일의 비트 맵 헤더 정보가 biSizeImage 필드에 0으로 나타납니다.이미지 크기 필드에 파일 비트 맵 저장에 0이 있습니다.
스펙에서 볼 수 있듯이 불행히도 내가 올바르게 작동하도록 설정해야하는 진부한 임베디드 장치가 올바르게 설정되었습니다.
그래서 비트 맵을 저장할 때이 헤더 정보 필드를 항상 설정하는 방법에 대해 궁금한 점이 있습니까?
ImageFormat.Bmp 형식의 Bitmap.Save 메서드를 사용하면 파일의 비트 맵 헤더 정보가 biSizeImage 필드에 0으로 나타납니다.이미지 크기 필드에 파일 비트 맵 저장에 0이 있습니다.
스펙에서 볼 수 있듯이 불행히도 내가 올바르게 작동하도록 설정해야하는 진부한 임베디드 장치가 올바르게 설정되었습니다.
그래서 비트 맵을 저장할 때이 헤더 정보 필드를 항상 설정하는 방법에 대해 궁금한 점이 있습니까?
의심되는 것처럼이 문제는 0이 RGB 비트 맵의 이미지 크기 필드에 완벽하게 허용되는 값이라는 것입니다.
biSizeImage
화상의 크기 (바이트), 상기 구조체의BITMAPINFOHEADER
MSDN documentation는이 사실을 확인한다.BI_RGB
비트 맵의 경우이 값을 0으로 설정할 수 있습니다.
biCompression
가BI_JPEG
또는BI_PNG
경우biSizeImage
는 각각 JPEG 또는 PNG 화상 버퍼의 크기를 나타낸다.
.NET Framework에서의 구현은 단순히 표준적이고 문서화 된 방식으로 수행합니다. 다른 것을 필요로하기 때문에 직접 파일 저장 프로세스를 처리해야합니다. 그러면 BITMAPINFOHEADER
구조의 biSizeImage
구성원을 수동으로 수정할 수 있습니다.
매우 포괄적 인 예가 Saving a Control Image to a Bitmap File입니다. 물론 Compact Framework 용으로 작성되었지만 대부분의 개별 구성 요소는 여전히 적용 가능합니다. Windows API에서 여러 함수를 P/Invoke (정의는 www.pinvoke.net을 방문)해야하며 DC로 작업해야합니다.
GDI +가 아닌 GDI 하위 시스템을 사용하기 때문에 자신의 손으로 드로잉을 가져 오는 것이 더 빠를 수도 있습니다. 이 일반적인 접근법에 대한 기사는 1bpp in C#에서 확인할 수 있으며 BITMAPINFOHEADER
구조체를 사용하여 직접 문제를 해결하는 것으로 나타납니다.
관리되지 않는 C++ 코드를 이해하는 경우 여기에서 사용할 수있는 튜토리얼을 사용하면 동일한 작업을 수행하기 위해 C#에서 구현해야하는 내용을 알 수 있습니다. Loading and Saving Bitmaps. 보시다시피, 필요한 코드는 실제로 한 줄의 Bitmap.Save
메서드 이상이지만 길지 않습니다.
고마워, 나는 pinvoke를 피하기 위해 바라고 있었지만 그것은 유일한 길처럼 보였다. – user380689
@ user380689 : 다른 어떤 방법을 모르겠습니다. 문제는, 당신이 지적한대로, 0은'biSaveImage' 멤버의 * expected * 값입니다. 'BITMAPINFOHEADER' 구조체에 대한 [MSDN documentation] (http://msdn.microsoft.com/en-us/library/dd183376.aspx)은 "BI_RGB 비트 맵에서이 값을 0으로 설정할 수 있습니다."라고 확인합니다. 사실, 상수 BI_RGB의 값은 0입니다. .NET Framework는 문서화 된 방식으로 표준 작업을 수행합니다. 당신이 다른 것을 필요로한다면, 당신은 당신 자신의 손에 문제를 가져 가야 할 것입니다. –