![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Изменить исходник дельфи
sergeyst © (2007-02-22 08:48:00)Всем привет! У 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) - то да. Может файл какой не такой?
sergeyst (2007-02-22 14:27:00) [1]Спасибо.
DrPass (2007-02-22 13:51:00) [2]
> Вопрос: как из потока выделить инфу о типе файла, нах-ся
> в нем(я, думаю, что должен быть какой-нибудь заголовок у
> файла)?
Открой файлы bmp, wmf и jpeg в текстовом редакторе, и посмотри, чем они отличаются. То же самое находится и в стриме, больше ничего конкретного.
> FileExt = '.jpg' then image.picture.LoadFromStream(Stream)
сделай сначала TJPEGImage.LoadFromStrean(Stream), а потом Image.Picture.Assign(TJPEGImage)
sergeyst (2007-02-22 13:21:00) [3]Stream := IBDataSet.CreateBlobStream(FieldByName('BlobField'), bmRead);
тип файла FieldByName('FileName').AsString;
> Измени на .bmp расширение не bmp-шного файла и убедись,
> что Image.Picture.LoadFromFile здесь тоже сломается.
Кажется, ты меня не правильно понял. Ломается LoadFromStream, причем только на одном файле(может и еще на каких - не проверял), а, вот, LoadFromFile нормально его загружает. Вопрос: как из потока выделить инфу о типе файла, нах-ся в нем(я, думаю, что должен быть какой-нибудь заголовок у файла)?
ЮЮ (2007-02-22 10:40:00) [4]Погадать на кофейной гуще, например. :)
Как спрашивается, эта информация в Stream-е оказалась? Её же не абстрактный TGraphic положил, а конкретный представитель этого славно класса.
sergeyst (2007-02-22 10:29:00) [5]
> надо как-то догадаться что представляет собой подсунутый
> Stream
Как?
ЮЮ (2007-02-22 09:21:00) [6]а вот если Image.Picture.LoadFromFile(FileName) то да.
Потому что в этом случае используются не куцые св-ва Image.picture, как у тебя, а, в соответствии с расширением, создается полноценный наследник TGraphic, который отлично справляется с загрузкой себя что из файла, что из Stream-а.
Изменить исходник дельфи не надо, надо как-то догадаться что представляет собой подсунутый Stream и создать объект того типа, который из этого стрима загрузится.
Измени на .bmp расширение не bmp-шного файла и убедись, что Image.Picture.LoadFromFile здесь тоже сломается. Расширение лишь дает делать предварительное умозаключение о том, в каком формате там хранится изображение. Если же в файле окажется не то, что ожидали, то - увы :(