Форум: "Начинающим";
Текущий архив: 2009.05.17;
Скачать: [xml.tar.bz2];
ВнизОпять про JPG в БД Найти похожие ветки
← →
TheEd (2009-03-30 23:25) [0]Не думал что вроде тривиальная задача обернётся долгими поисками, но тем не менее, обрял много, но так ничего и не нашёл - вопрос в следующем:
либо как сохранить в БЛОБ-поле jpg из файла, и отобразить его впоследствии в TImage (при этом предполагается что в этих же полях обычные bmp могут быть, с которыми TDBImage может работать, нужно ещё понять что в поле - jpg или bmp?)
либо как заставить TDBImage "понимать" jpg в полях БД (или какой сторонний компонент использовать)?
зы: юзаю D7, firebird 2.1, fIBPlus
← →
TheEd (2009-03-30 23:26) [1]
> обрял
обрЫл
← →
DVM © (2009-03-30 23:38) [2]Достаем из базы:
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;
....
← →
Виталий Панасенко (2009-03-31 09:42) [3]
> TheEd (30.03.09 23:25)
Используй JEDI - там jvDBImage "понимает" JPEG (и не только). Абсолютно бесплатные компоненты, разработчикам которых говорят "спасибо" в "пасхальном яйце" разработчики Delphi
← →
Правильный$Вася (2009-03-31 11:27) [4]
> нужно ещё понять что в поле - jpg или bmp?
сохраняй в отдельном поле признак формата, особенно если потенциально могут появиться и другие (PNG, EMF, TIFF и т.п.)
← →
Ega23 © (2009-03-31 12:48) [5]0. Гуглим по-поводу форматов данных bmp и jpeg.
1. Находим в описаниях сигнатуру каждого (ЕМНИП, и у того и у другого первые 3 байта).
2. Считываем из базы бинарник.
3. Смотрим первые 3 байта.
4. С помощью нехитрой системы сравнений определяем формат.
← →
Ega23 © (2009-03-31 12:49) [6]
> особенно если потенциально могут появиться и другие (PNG,
> EMF, TIFF и т.п.)
Каждый из них также имеет свою сигнатуру. Она может быть больше трёх байт, но она обязательно будет.
← →
TheEd (2009-04-02 08:57) [7]2 DVM
Спасибо за подробный ответ.
помогло. Правда для записи в базу тоже использовал Stream, примерно так:SomeTJPEGImage.SaveToStream(FieldStream;
2 Виталий Панасенко
> Используй JEDI - там jvDBImage "понимает" JPEG (и не только)
спасибо, попробую!
← →
TheEd (2009-04-02 11:23) [8]Попробовал JEDI, вестчь классная!!!
Респект Виталий Панасенко!!!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.05.17;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c