Суммирование:
Вычисления прямо указывают на то, что: .BMP-изображение 3289 X 4570 X 32bpp занимает около 53 МБ. Изображение того же размера, но 24bpp занимает около 43 МБ, а 16bpp - около 28 МБ. Файл изображения, обработанный ChemDraw, должен быть преобразован из 24bpp в 16bpp в моей ситуации.
Дальнейшее сравнение шестнадцатеричных данных обоих файлов дает более детальное понимание разницы между обработанной ChemDraw картинкой и исходной картинкой. В частности, ChemDraw хранит «EMF_STRETCHDIBITS» вместо «EMF_STRETCHBLT». Следует добавить, что «EMF_STRETCHDIBITS» можно сделать, вызвав StretchDIBits при копировании пикселей в TMetaFile / TMetaFileCanvas. Следует также отметить, что пиксели для «EMF_STRETCHDIBITS» должны быть такими же, как и для «EMF_STRETCHBLT».
К сожалению, до сих пор я не узнал, как ChemDraw точно обрабатывает и хранит вставленные изображения. То есть я не выяснил, почему пиксели, сохраненные в ChemDraw, отличаются от тех, которые я могу получить программным способом.
PS: Я буду голосовать добрыми ответами по этому вопросу позже, потому что у меня пока недостаточно репутации. Спасибо всем, кто был любезен комментировать!
===
Привет
Большое спасибо за ваше время!
Скажите, что у меня есть картинка с именем "sample_original.bmp". Размер файла составляет 3289 х 4570, 43 МБ. Затем я делаю следующее, чтобы преобразовать его в файл .EMF (расширенный метафайл Windows):
Метод 1, сделав небольшую внутреннюю программу Delphi:
(1) Загрузите файл изображения .BMP.
(2) Получить холст TMetaFile (TMetaFileCanvas)
(3) Вызовите Canvas.Draw, чтобы скопировать изображение.
(4) Сохранить в файл .EMF с именем "sample_original_bmp2emf_method1.emf"
Метод 2:
(1) Откройте файл изображения .BMP в программе mspaint, выберите «выбрать все» и выберите «копировать».
(2) Откройте внешнюю программу под названием ChemDraw, создайте новый документ и выберите «вставить».
(3) Затем я решил сохранить его в XML-совместимом формате .cdxml с именем «sample_original_bmp2emf_method2.cdxml».
(4) Содержимое изображения (может быть изменено или ухудшено?) Теперь сохраняется в файле sample_original_bmp2emf_method2.cdxml. Формат - это сжатый zlib формат Base64.
(5) Я могу Base64-декодировать строку XML, распаковать zlib и сохранить ее в файле рисунка "sample_original_bmp2emf_method2.emf".
Размер файла sample_original_bmp2emf_method2.emf на 15 МБ меньше, чем sample_original_bmp2emf_method1.emf, но ширина и высота были сохранены.
Кроме того, если я открою «sample_original_bmp2emf_method2.emf» в программе mspaint и сохраню его обратно в формате файла .bmp, появится предупреждение о том, что прозрачная информация теряется.
Не могли бы вы прокомментировать, как определить разницу "sample_original_bmp2emf_method1.emf" & "sample_original_bmp2emf_method2.emf"? Изображение меньше, потому что его качество снижается?
Другими словами, какие изменения в моей исходной картинке могут быть сделаны этой внешней программой?
С наилучшими пожеланиями,
Файлы, упомянутые выше, можно загрузить по следующему адресу:
http://www.rapidspread.com/file.jsp?id=2ighvzoci8
PS: Я полагаю, что Андреас Рейбранд был достаточно любезен, чтобы сделать свой ответ, и я затем дал свои комментарии. Но я не вижу их сейчас. Это должно быть нормальное поведение системы? О_О