Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.05.17;
Скачать: CL | DM;

Вниз

Опять про 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
2-1238441134
TheEd
2009-03-30 23:25
2009.05.17
Опять про JPG в БД


11-1200570250
Rocket
2008-01-17 14:44
2009.05.17
OpenDirDialog.InitialPath при UNICODE_CTRLS...


2-1238483163
AlexDan
2009-03-31 11:06
2009.05.17
Клик для кнопки


15-1236764505
desc
2009-03-11 12:41
2009.05.17
Функция возвращения пути


15-1237316945
Вот в чем вопрос
2009-03-17 22:09
2009.05.17
Перегрузка операторов