Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Вниз

Отображение JPEGа, хранящегося в базе 


alexandervasjuk   (2002-03-14 12:30) [0]

Господа profy!
Имею проблему отображения Jpeg-картинки, хранящегося в Blob-поле.

Картинка помещается в базу так:

JpegImage.SaveToStream(Stream);
...
BlobField.LoadFromStream(Stream);

А изображается так:

BlobField.SaveToFile("temp.jpg");
Picture.LoadFromFile("temp.jpg");

Почему-то вариант с потоком выдает Ошибку JPEG.
Стаyдартный DBImage JPEG формат не понимает.
Никто не предложит метод отображения без промежуточного файла?



alexandervasjuk   (2002-03-14 15:25) [1]

похоже, профи тут не водятся :(



OlegE   (2002-03-14 15:42) [2]

TJPEGImage encapsulates a jpeg graphic.

Unit Jpeg

Description

Use TJPEGImage to read and write jpeg compressed image data. TJPEGImage handles the digital compression and decompression of still images for use in computer systems. It uses the data from an instance of TJPEGData, which contains the actual jpeg data source and is never modified. Each jpeg image object may share its TJPEGData object with other instances of a jpeg image by creating copies using the Assign method. The jpeg data source handles reference counting for the jpeg image objects that are linked to it.

TJPEGImage has an internal bitmap that represents the jpeg image. This internal image and the original source of the jpeg image are read only. TJPEGImage has properties that determine how each instance will handle color conversion, compression, decompression, performance, and so on.

The following are characteristics of this object. A TJPEGImage object:

Has no canvas (so it cannot draw onto a canvas). However, TJPEGImage implements the protected Draw method introduced in TGraphic, so it can draw itself on the canvas of another object.
Provides no access to the internal bitmap image that it creates for the JPEG image.
Performs reference counting and handle sharing by means of the TJPEGData object. Multiple instances can refer to the same TJPEGData image. TJPEGData is the actual owner of the file handle to the jpeg data source.



alexandervasjuk   (2002-03-14 16:14) [3]

Олег Е

Все это прекрасно, только к чему. Help я читал.

TJpegImage я прекрасно могу читать из файла, модифицировать (!) и снова писать в файл или поток (!).
Почему я не могу читать его из потока.
Более общая постановка вопроса: Как загрузить в него картинку, хранящуюся в BLOB поле в базе без промежуточного сохранения/чтения из файла?



Suntechnic   (2002-03-14 16:53) [4]

>alexandervasjuk © (14.03.02 16:14)
Я что-то не пойму в чём проблема? TJpegImage прекрасно может считывать из потока, вот и считывай без предварительного сохранения в файл. Стандартный DBImage JPEG формат не понимает дык это старый глюк. Используй TImage вместо него.



Набережных С.   (2002-03-14 17:55) [5]

Посмотри в кладовке DBMultiFmtImage. Только учти, что она сделана под D5.



data   (2002-03-15 10:08) [6]

Вот работающий пример
Q:TQuery; //Запрос с Blob полем
BS:TStream;
Jpi:TJPEGImage;
Image:TImage;

BS:=Q.CreateBlobStream(TBlobField(Q.FieldByName("PICTURE")),bmRead);
try
if BS.Size<>0 then
begin
Jpi.LoadFromStream(BS);
Jpi.DIBNeeded;
Image.Picture.Bitmap.Assign(Jpi);
end;
finally
BS.Free;
end;



data   (2002-03-15 10:12) [7]

Добавление. Естественно в начале Jpi:=TJpegImage.Create;
в конце Jpi.Free;



alexandervasjuk   (2002-03-18 10:30) [8]

data
Огромнейшее спасибище!
DibNeeded даже лишне.
Не перевелись еще профи...



data   (2002-03-18 11:32) [9]

Не за что :)



Zak   (2002-03-26 10:47) [10]

А если всё таки надо не в Image а в файл записать? А ошибка всё равно выходит.. типа
... JPEG error #50
что это вообще за ошибка?



data   (2002-03-26 11:07) [11]

2 Zak
>А если всё таки надо не в Image а в файл записать?

jpeg.SaveToFile(fileName);

>А ошибка всё равно выходит.. типа
>... JPEG error #50

а как вы в БД пишете?
я записываю таким образом. Потом все читается нормально. Пишу с помощью "живого" запроса. Этот способ работает у меня для СУБД IB(5 и 6)+BDE и для Oracle+BDE. Для Pardox не так работает.
Q:TQuery;
Bs:TStream;
JpgImage:TJpegImage;

Q.SQL.Clear;
Q.SQL.Add("SELECT * FROM JPTAB");
Q.RequestLive:=true;
Q.Open;
Q.Insert;
Bs:=Q.CreateBlobStream(TBlobField(Q.FieldByName("PICTURE")),bmWrite);
JpgImage.SaveToStream(Bs);
Q.Post;
Q.Close;




Zak   (2002-03-26 11:14) [12]

У меня вот так:
Table1.Insert;
if FileExists("d:\progi\kc\image\writes\"+str3+"\portret.jpg") then begin
Jp:=TJpegImage.Create;
Jp.LoadFromFile("d:\progi\kc\image\writes\"+str3+"\portret.jpg");
S:=TMemoryStream.Create;
Jp.SaveToStream(S);
TBLOBField(Table1.FieldByName("Im")).LoadFromStream(S);
Jp.Free;
S.Free;
end;
Table1.FieldByName("Name").AsString:=str2;
Table1.FieldByName("code").AsString:=str3;
Table1.Post;



data   (2002-03-26 11:16) [13]

Добавление. Для Paradox работает так
Q.SQL.Clear;
Q.RequestLive:=False;
Q.SQL.Add("INSERT INTO JPTAB (PICTURE) VALUES (:PICTURE)");
ms:=TMemoryStream.Create;
try
JpgImage.SaveToStream(ms);
Q.ParamByName("PICTURE").LoadFromStream(ms,ftBlob);
Q.ExecSQL;
finally
ms.Free;
end;



data   (2002-03-26 11:20) [14]

2 Zak © (26.03.02 11:14)
Какая у вас СУБД? Если Paradox, то рекомендовала бы воспользоваться способом с Query с параметрами (data © (26.03.02 11:16)). А считывать как в data © (15.03.02 10:08). Так у меня нормально работает для БД Paradox.



Zak   (2002-03-26 12:55) [15]

У меня тоже Парадокс!
Использовал код за 15.03 так вот на этом коде и выдавал ошибку то error #50 то error #45
Не пойму!



Zak   (2002-04-01 09:04) [16]

Так в чем пробелма?



data   (2002-04-01 09:53) [17]

2 Zak © (01.04.02 09:04)
А пишете в таблицу как?



Zak   (2002-04-01 11:25) [18]

data :) Можно на ТЫ!
а пишу:

Jp:=TJpegImage.Create;
Jp.LoadFromFile("d:\progi\kc\image\writes\"+str3+"\portret.jpg");
S:=TMemoryStream.Create;
Jp.SaveToStream(S);
TBLOBField(Table1.FieldByName("Im")).LoadFromStream(S);
Jp.Free;
S.Free;



data   (2002-04-01 12:10) [19]

2 Zak
Попробуй делать сначала Table1.post а потом S.free. У меня был похожий глюк с Оракл, там вообще пришлось без s.free обходиться



Zak   (2002-04-02 06:47) [20]

Хм.. а это идея! :)
ПасиБа :)




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.75 MB
Время: 0.035 c
3-69750           Юляша                 2002-04-02 07:56  2002.04.22  
Определение пути к базе данных


14-70015          Zool                  2002-03-16 23:30  2002.04.22  
Файл


3-69725           User_OKA              2002-04-01 09:48  2002.04.22  
ADO


14-69990          Gaynew                2002-03-12 22:55  2002.04.22  
Минимальные системные требования Delphi5!!!


6-69946           knyaz17               2002-02-11 12:33  2002.04.22  
Не работает код из этой конференции!!!