Как добавить поддержку gif и tiff в TJvDBImage? - PullRequest
1 голос
/ 23 марта 2012

TJvDBImage - хороший компонент, поддерживающий несколько форматов изображений. В JvJVCLUtils упоминается, что поддерживаемый формат может быть расширен с помощью процедуры RegisterGraphicSignature. В комментарии упоминается:

WHAT IT IS:
   These are helper functions to register graphic formats than can
   later be recognized from a stream, thus allowing to rely on the actual
   content of a file rather than from its filename extension.
   This is used in TJvDBImage and TJvImage.

IMAGE FORMATS:
   The implementation is simple: Just register image signatures with
   RegisterGraphicSignature procedure and the methods takes care
   of the correct instantiation of the TGraphic object. The signatures
   register at unit's initialization are: BMP, WMF, EMF, ICO, JPG.
   If you got some other image library (such as GIF, PCX, TIFF, ANI or PNG),
   just register the signature:

     RegisterGraphicSignature(<string value>, <offset>, <class>)

     or

     RegisterGraphicSignature([<byte values>], <offset>, <class>)

   This means:
     When <string value> (or byte values) found at <offset> the graphic
     class to use is <class>

   For example (actual code of the initialization section):

     RegisterGraphicSignature([$D7, $CD], 0, TMetaFile); // WMF
     RegisterGraphicSignature([1, 0], 0, TMetaFile);     // EMF
     RegisterGraphicSignature('JFIF', 6, TJPEGImage);

   You can also unregister signature. IF you want use TGIFImage instead of
   TJvGIFImage, you can unregister with:

     UnregisterGraphicSignature('GIF', 0);

     or just

     UnregisterGraphicSignature(TJvGIFImage); // must add JvGIF unit in uses clause

   then:
     RegisterGraphicSignature('GIF', 0, TGIFImage); // must add GIFImage to uses clause

Я следую инструкциям и добавил GIFImage в пункте использования в этом подразделении. Также в процедуру GraphicSignaturesNeeded я добавил:

RegisterGraphicSignature('GIF', 0, TGIFImage);
RegisterGraphicSignature([$4D, $4d, 0, $2A], 0, TWICImage); // TIFF
RegisterGraphicSignature([$49, $49, $2A, 0], 0, TWICImage); // TIFF

Информация TIFF основана на Совет: обнаружение графических форматов

Затем я использовал makemodified.bat для повторной компиляции JVCL.

Перед изменением загрузка изображения в TJvDBImage загрузит файл и выдаст бесконечную ошибку «растровое изображение недопустимо». После изменения он отказывается загружать файл и выдает одну и ту же ошибку 1 раз.

Если я загружаю изображение GIF / TIFF в поле, используя другие инструменты, при отображении это дает бесконечную ошибку, упомянутую выше. Если я загружаю содержимое поля, используя вышеуказанные функции ссылок, оно может отлично отображаться в TImage.

Итак, что я пропустил или сделал неправильно?

Спасибо!

...