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.
Итак, что я пропустил или сделал неправильно?
Спасибо!