Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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]

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



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

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

Наверх





Память: 0.49 MB
Время: 0.008 c
3-69670
vopros
2002-04-03 11:50
2002.04.22
Bde и xls и txt c разделителями tab


14-70016
Lego
2002-03-16 02:15
2002.04.22
Как выключить вообще комбинацию клавиш ALT + F4?


1-69883
pls
2002-04-08 11:24
2002.04.22
DLL или BPL?


1-69828
kserg@ukr.net
2002-04-10 17:12
2002.04.22
Можно ли в Паскале создавать макроподстановки?


14-70001
Sergo
2002-03-13 12:47
2002.04.22
Помощь от Фэ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский