Проблема, как вы подозреваете, заключается в том, что 0 является вполне допустимым значением для поля размера изображения растрового изображения RGB.Документация MSDN для структуры BITMAPINFOHEADER
подтверждает этот факт:
biSizeImage
Размер изображения в байтах.Это может быть установлено в ноль для BI_RGB
битовых карт.
Если biCompression
равен BI_JPEG
или BI_PNG
, biSizeImage
указывает размер буфера изображения JPEG или PNGсоответственно.
Таким образом, реализация в .NET Framework просто делает вещи стандартным, документированным способом.Поскольку вам нужно что-то еще, вам придется самостоятельно обрабатывать процесс сохранения в файл, что позволит вам вручную изменить biSizeImage
член структуры BITMAPINFOHEADER
.
Доступен довольно полный примерздесь: Сохранение контрольного изображения в файл растрового изображения .Конечно, это написано для Compact Framework, но большинство отдельных компонентов по-прежнему применимы.Вам потребуется P / Invoke нескольких функций из Windows API (см. Определения www.pinvoke.net ) и работа с DC.
Перенос чертежа в свойРуки, вероятно, также будут быстрее, потому что вы используете подсистему GDI, а не GDI +.Статья об этом общем подходе доступна здесь: 1bpp в C # , и, похоже, она демонстрирует взятие вещей в свои руки с помощью структуры BITMAPINFOHEADER
.
Если вы понимаете неуправляемыйКод C ++, здесь есть учебник, который может дать вам представление о том, что вам нужно реализовать в C #, чтобы сделать то же самое: Загрузка и сохранение растровых изображений .Как видите, требуемый код на самом деле не такой длинный, хотя все же больше, чем метод из одной строки Bitmap.Save
.