|
Вопрос # 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. Нужто только побайтно, в бинарном режиме.
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|