![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Опять про JPG в БД [D7, FB2.1]
TheEd © (2009-03-30 23:25:00)Не думал что вроде тривиальная задача обернётся долгими поисками, но тем не менее, обрял много, но так ничего и не нашёл - вопрос в следующем:
либокак сохранить в БЛОБ-поле jpg из файла, и отобразить его впоследствии в TImage (при этом предполагается что в этих же полях обычные bmp могут быть, с которыми TDBImage может работать, нужно ещё понять что в поле - jpg или bmp?)
либокак заставить TDBImage "понимать" jpg в полях БД (или какой сторонний компонент использовать)?
зы: юзаю D7, firebird 2.1, fIBPlus
TheEd (2009-04-02 11:23:00) [1]Попробовал JEDI, вестчь классная!!!
Респект Виталий Панасенко!!!
TheEd (2009-04-02 08:57:00) [2]2 DVM
Спасибо за подробный ответ.
помогло. Правда для записи в базу тоже использовал Stream, примерно так:SomeTJPEGImage.SaveToStream(FieldStream;
2 Виталий Панасенко
> Используй JEDI - там jvDBImage "понимает" JPEG (и не только)
спасибо, попробую!
Ega23 (2009-03-31 12:49:00) [3]
> особенно если потенциально могут появиться и другие (PNG,
> EMF, TIFF и т.п.)
Каждый из них также имеет свою сигнатуру. Она может быть больше трёх байт, но она обязательно будет.
Ega23 (2009-03-31 12:48:00) [4]0. Гуглим по-поводу форматов данных bmp и jpeg.
1. Находим в описаниях сигнатуру каждого (ЕМНИП, и у того и у другого первые 3 байта).
2. Считываем из базы бинарник.
3. Смотрим первые 3 байта.
4. С помощью нехитрой системы сравнений определяем формат.
Правильный$Вася (2009-03-31 11:27:00) [5]
> нужно ещё понять что в поле - jpg или bmp?
сохраняй в отдельном поле признак формата, особенно если потенциально могут появиться и другие (PNG, EMF, TIFF и т.п.)
Виталий Панасенко (2009-03-31 09:42:00) [6]
> TheEd (30.03.09 23:25)
Используй JEDI - там jvDBImage "понимает" JPEG (и не только). Абсолютно бесплатные компоненты, разработчикам которых говорят "спасибо" в "пасхальном яйце" разработчики Delphi
DVM (2009-03-30 23:38:00) [7]Достаем из базы:
procedure DBDrawJpeg(DataSet: TDataSet; Field:String; Image:TImage);
const
sNoPhoto='Нет фотографии';
var
MS: TStream;
J1: TJPEGImage;
begin
J1 := TJPEGImage.Create;
MS := DataSet.CreateBlobStream(DataSet.FieldByName(Field), bmRead);
try
try
MS.Seek(soFromBeginning, 0);
with J1 do
begin
PixelFormat := jf24Bit;
Scale := jsFullSize;
Grayscale := False;
Performance := jpBestQuality;
ProgressiveDisplay := True;
ProgressiveEncoding := True;
LoadFromStream(MS);
end;
with Image do
begin
Canvas.StretchDraw(ClientRect,j1);
end;
except
with Image.Canvas Do
begin
Rectangle(Image.ClientRect);
TextOut((Image.Width - TextWidth(sNoPhoto)) div 2,Image.Height Div 2,sNoPhoto);
end;
end;
finally
J1.Free;
MS.Free;
end;
End;
например так кладем
...
if FileExists(PictureFile) then
AdoCmd.Parameters.ParamByName('PhotoField').LoadFromFile(PictureFile, ftVarBytes);
AdoCmd.Execute;
....
TheEd (2009-03-30 23:26:00) [8]
> обрял
обр Ыл