Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 565

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!Недавно я задавал вопрос 547 о том как из файла .doc извлечь jpeg напрямую , без ole. Сделал так как мне посоветовал min@y™ все получилось. Но! Оказалось что в некоторых doc файлах изображение хранится как png. Я как умная мартышка открыл файл png в far managere и файл doc содержащий этот же Png. И стал сравнивать. Оказалось что ворд как то изменяет этот формат и если взять нужную последовательность байт из файла doc (между IHDR и IEND) и попробовать скормить ее TImage то будет ошибка. Но если скопировать картинку из ворда в clipboard
и сделать TImage.Picture.Assign(TClipboard)
все получается. Осталось узнать какие же байты содержатся в clipboarde. Формат даных такой - CF_ENHMETAFILE. Делаю так -
var
h : THandle;
Len : integer;
BufPtr: Pointer;
begin
Clipboard.Open;
h := GetClipboardData(CF_ENHMETAFILE );
if h <> 0 then
begin
Len := GlobalSize(h);
BufPtr := GlobalLock(h);
if BufPtr <> nil then
begin
...
end;
end;
но BufPtr почемуто оказывается nil! ПАМАГИТЕ!!
(делаю проверку:
var
Data: THandle;
Format: Word;
Palette: HPALETTE;
begin

Data := GetClipboardData(CF_ENHMETAFILE);
Palette:=GetClipboardData(CF_PALETTE);
Image.Picture.LoadFromClipboardFormat(Format, Data, Palette);
- все работает!!!
)
Товарищи, или подскажите как вырвать из ворда кровный png или расскажите отчего BufPtr = nil.
PS/ Ворд грузить нельзя, нужно напрямую, перезаписывать файлы в другой формат например rtf тоже нельзя

егоров Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: егоров (статус: Посетитель)
Вопрос отправлен: 10 мая 2007, 14:41
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, егоров!
Дело в том, что просто так, делфи не понимает png формат. Поэтому когда вы грузите файл напрямую, он и не грузиться. Но когда через буфер, то получается, так как буфер имеет такую особенность, как преобразование данных. С картинки текст достать он конечно не может, но png bmp - нараз
Что делать? ищем в гугле фриварный компонент с наванием TPngImage. Точнее, это не компонент, а библиотека, которая позволяет стандартным компонентам с png работать

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 10 мая 2007, 15:02
Оценка за ответ: 5

Комментарий к оценке: Большое спасибо все получилось

Мини-форум вопроса

Всего сообщений: 2; последнее сообщение — 10 мая 2007, 15:34; участников в обсуждении: 2.
егоров

егоров (статус: Посетитель), 10 мая 2007, 15:11 [#1]:

TO Вадим К/ Беру файл doc/ создаю новый файл txt/копирую в него байты с IHDR по IEND /сохраняю/ меняю расширение на png/ пытаюсь открыть графическим редактором - ругань о неправильном формате
Вадим К

Вадим К (статус: Академик), 10 мая 2007, 15:34 [#2]:

правильно, а что вы хотели? в текстовом формате некоторые символы недомустимы, а в png файле их может быть туча, особенно 0. Нужто только побайтно, в бинарном режиме.
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:32
Выполнено за 0.02 сек.