Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
4-1209826431
Артемий
2008-05-03 18:53
2009.05.17
Обработка Ctrl+C


3-1220953220
миникодер
2008-09-09 13:40
2009.05.17
Конвертация типов полей из TFieldType в тип полей DOA


3-1221022999
Alexey
2008-09-10 09:03
2009.05.17
SQL-запрос в delphi


15-1237007629
@!!ex
2009-03-14 08:13
2009.05.17
Удаленное управление закачками.


2-1238660648
DmitriyR
2009-04-02 12:24
2009.05.17
Си и Delphi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский