Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.18;
Скачать: CL | DM;

Вниз

Изменить исходник дельфи   Найти похожие ветки 

 
sergeyst ©   (2007-02-22 08:48) [0]

Всем привет! У TGraphic, TMetaFile, TBitmap есть метод LoadFromStream(), у TPicture он почему-то защищенный. Можно ли сделать его public?
И как потом перекомпилировать библиотеки Delphi?
Необходимость возникла по следующей причине:
if FileExt = ".jpg" then image.picture.LoadFromStream(Stream)
else if FileExt = ".bmp" then Image.picture.BitMap.LoadFromStream(Stream)
else if FileExt = ".emf" then Image.Picture.Metafile.LoadFromStream(Stream);

Все вроде работало, пока не наткнулся на файл jpg, который таким образом не грузится, а вот если Image.Picture.LoadFromFile(FileName) - то да. Может файл какой не такой?


 
ЮЮ ©   (2007-02-22 09:21) [1]

а вот если Image.Picture.LoadFromFile(FileName)  то да.
Потому что в этом случае используются не куцые св-ва  Image.picture, как у тебя, а, в соответствии с расширением, создается полноценный наследник TGraphic, который отлично справляется с загрузкой себя что из файла, что из Stream-а.

Изменить исходник дельфи не надо, надо как-то догадаться что представляет собой подсунутый Stream и создать объект того типа, который из этого стрима загрузится.

Измени на .bmp расширение не bmp-шного файла и убедись, что Image.Picture.LoadFromFile здесь тоже сломается. Расширение лишь дает делать предварительное умозаключение о том, в каком формате там хранится изображение. Если же в файле окажется не то, что ожидали, то - увы :(


 
sergeyst ©   (2007-02-22 10:29) [2]


> надо как-то догадаться что представляет собой подсунутый
> Stream

Как?


 
ЮЮ ©   (2007-02-22 10:40) [3]

Погадать на кофейной гуще, например. :)
Как спрашивается, эта информация в Stream-е оказалась? Её же не абстрактный TGraphic положил, а конкретный представитель этого славно класса.


 
sergeyst ©   (2007-02-22 13:21) [4]

Stream := IBDataSet.CreateBlobStream(FieldByName("BlobField"), bmRead);
тип файла FieldByName("FileName").AsString;
> Измени на .bmp расширение не bmp-шного файла и убедись,
> что Image.Picture.LoadFromFile здесь тоже сломается.

Кажется, ты меня не правильно понял. Ломается LoadFromStream, причем только на одном файле(может и еще на каких - не проверял), а, вот, LoadFromFile нормально его загружает. Вопрос: как из потока выделить инфу о типе файла, нах-ся в нем(я, думаю, что должен быть какой-нибудь заголовок у файла)?


 
DrPass ©   (2007-02-22 13:51) [5]


> Вопрос: как из потока выделить инфу о типе файла, нах-ся
> в нем(я, думаю, что должен быть какой-нибудь заголовок у
> файла)?

Открой файлы bmp, wmf и jpeg в текстовом редакторе, и посмотри, чем они отличаются. То же самое находится и в стриме, больше ничего конкретного.

>  FileExt = ".jpg" then image.picture.LoadFromStream(Stream)

сделай сначала TJPEGImage.LoadFromStrean(Stream), а потом Image.Picture.Assign(TJPEGImage)


 
sergeyst ©   (2007-02-22 14:27) [6]

Спасибо.



Страницы: 1 вся ветка

Текущий архив: 2007.03.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.063 c
2-1172563802
Cara
2007-02-27 11:10
2007.03.18
Индекс в DBGrid.


3-1166797458
tytus
2006-12-22 17:24
2007.03.18
DOA 4.0.7 - Delphi7 - Oracle 10g Express Edition


2-1172510528
Lonix
2007-02-26 20:22
2007.03.18
Почему выдает ошибку....


4-1154764827
Multy
2006-08-05 12:00
2007.03.18
Можно ли ускорить BitBlt?


2-1172335456
Gamer
2007-02-24 19:44
2007.03.18
взаимодействие DLL(!) с программой