Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Опять про 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]


> обрял

обр Ыл


Наверх

Титульная страница Поиск, карта сайта Написать письмо