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

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

jpg в базу данных [D6, dBase, FoxPro, Paradox, Accesse]


Kraj ©   (2004-08-23 13:52:00) 

Как впихнуть рисунок формата jpg в базу данных форматов dBESE, Paradox или Accesse. Формат bmp получается, но очень раздувает базу.


Zif   (2004-08-26 20:53:00) [1]

Чего вы голову ломаете? просто напишите этот код и используйте компонент с http://www.mwasoftware.co.uk/jpeg/index.htm
procedure TForm.ButtonClick(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
ADOQuery1.Edit;
ADOQueryImage.LoadFromFile(OpenDialog1.FileName); //ADOQueryImage - имя строки
ADOQuery1.Post;
end;
end;

все работает отлично!!!


Desdechado   (2004-08-26 14:01:00) [2]

вообще-то BlobStream лучше от датасета создавать
query.createblobstream

>Где можно найти описание этих параметров?
кнопку F1 выломал от незнания, что с ней делают?


Kraj   (2004-08-26 13:52:00) [3]

Компонент скачал ноеще не устанавливал. но вот возник вопрос по переменной bs: TBlobStream
При попытке "открыть" переменную требует внести параметры
bs := TBlobStream.Create(TBlobField(Field), bmWrite);
Где можно найти описание этих параметров?


Zif   (2004-08-24 17:09:00) [4]

Замечательный компонент!!! даже несколько приятных функций добавлено!!! даже "лекарство" существует!


Zif   (2004-08-24 15:46:00) [5]

зайди на сайт http://www.mwasoftware.co.uk/jpeg/index.htm. этот компонент вроде работает корректно (установился у меня и отображает - редактирует). загрузил только пару картинок. ничего не обещаю. но он РАБОТАЕТ!!!


Kraj   (2004-08-24 10:00:00) [6]

Огромное спасибо за такой объем информации. Буду разбираться. Если получится обязательно напишу.


Zif   (2004-08-24 00:38:00) [7]

Как с помощью TJpegImage гpузить *.jpeg

begin
 JPEG := TJPEGImage.Create;
 try
   JPEG.LoadFromFile('C:\TEMP\SOMEIMAGE.JPEG');
   MainImage.Picture.Assign(JPEG);
   MainImage.Invalidate;
 finally
   JPEG.Free;
end;


Zif   (2004-08-24 00:01:00) [8]

if Picture.Graphic is TJPegImage then
begin
 bs := TBlobStream.Create(TBlobField(Field), bmWrite);
 Picture.Graphic.SaveToStream(bs);
 bs.Free;
end
else if Picture.Graphic is TBitmap then
begin
 Jpg := TJPegImage.Create;
 Jpg.CompressionQuality := ...;
 Jpg.PixelFormat := ...;
 Jpg.Assign(Picture.Graphic);
 Jpg.JPEGNeeded;
 bs := TBlobStream.Create(TBlobField(Field), bmWrite);
 Jpg.SaveToStream(bs);
 bs.Free;
 Jpg.Free;
end else
 Field.Clear;


Примечание
Вы не забыли объявить переменную bs как TBlobStream?


Zif   (2004-08-23 23:42:00) [9]

ещё накопал:
(VCL)  Подскажите  как правильно показать на экpане и сохранить в  базе картинку формата JPEG?
 
Я делал так (это кусок компонента):
 
 if Picture.Graphic is TJPegImage then
 begin
   bs:=TBlobStream.Create(TBlobField(Field),bmWrite);
   Picture.Graphic.SaveToStream(bs);
   bs.Free;
 end
 else if Picture.Graphic is TBitmap then
 begin
   Jpg:=TJPegImage.Create;
   Jpg.CompressionQuality:=...;
   Jpg.PixelFormat:=...;
   Jpg.Assign(Picture.Graphic);
   Jpg.JPEGNeeded;
   bs:=TBlobStream.Create(TBlobField(Field),bmWrite);
   Jpg.SaveToStream(bs);
   bs.Free;
   Jpg.Free;
 end else Field.Clear;


Zif   (2004-08-23 23:31:00) [10]

ещё нашёл один из ответов. правда ничего не понял... кто разберется подскажите.

Как вставить с помощью DBImage картинку в формате JPEG?
1. В Uses добавляешь Jpeg
 2. Перед получением картинки из файла или еще откуда принимаешь решение
какой наследник TGraphic породить.
 3. Загружаешь картинку в нужный график
Если хочешь хранить картинки в таблице БД, можно хранить в отдельном поле некий
идентификатор типа,
например расширение файла.

Для примера даю фрагмент своего компонента:

 TfxImage = class(TCustomControl)
 private
   FPicture: TPicture;
   FFileExt: string;
   ...
 public
   procedure LoadFromStreamEx(St: TStream; const Ext: string);
   procedure LoadFromFile(const FileName: string);
 end;

function GraphicFileExt(const AFileName: string): string;
begin
  Result := ExtractFileExt(AFileName);
  if Result = '' then Result := ExtractFileName(AFileName)
  else Result := Copy(Result, 2, 255);
  if Result = '' then Result := 'bmp'
  else Result := LowerCase(Result);
end;

function ExtToGraphicClass(const AExt: string): TGraphicClass;
begin
 if      AExt = 'bmp'  then Result := TBitmap
 else if AExt = 'gif'  then Result := TGIFImage
 else if AExt = 'jpg'  then Result := TJPEGImage
 else if AExt = 'jpeg' then Result := TJPEGImage
 else if AExt = 'ico'  then Result := TIcon
 else if AExt = 'wmf'  then Result := TMetaFile
 else if AExt = 'emf'  then Result := TMetaFile
                       else Result := nil;
end;

procedure TfxImage.LoadFromStreamEx(St: TStream; const Ext: string);
var
 GraphicClass: TGraphicClass;
 NewGraphic: TGraphic;
begin
 GraphicClass := ExtToGraphicClass(Ext);
 NewGraphic := nil;
 try
   NewGraphic := GraphicClass.Create;
   NewGraphic.Transparent := Transparent;
   NewGraphic.LoadFromStream(St);
   FPicture.Assign(NewGraphic);
 except
   NewGraphic.Free;
   raise;
 end;
 NewGraphic.Free;
 FFileExt := Ext;
end;

procedure TfxImage.LoadFromFile(const FileName: string);
var
 Ext: string;
 St: TMemoryStream;
begin
 Ext := GraphicFileExt(FileName);
 St := nil;
 try
   St := TMemoryStream.Create;
   St.LoadFromFile(FileName);
   St.Position := 0;
   LoadFromStreamEx(St, Ext);
 except
   St.Free;
   raise;
 end;
 St.Free;
end;


Zif   (2004-08-23 21:00:00) [11]

Могу лишь это подсказать (ссылки из разных мест):
1. (номер один)
В комплект поставки Delphi входит модуль JPEG. Он позволяет работать с изображениями в формате JPEG. Эта программа открывает выбранный файл и выводит изображение на форму.

uses Jpeg;

procedure TForm1.Button1Click(Sender: TObject);
var
 JpegIm: TJpegImage;
 bm: TBitMap;
begin
 if OpenDialog1.Execute = false then
   Exit;
 bm := TBitMap.Create;
 JpegIm := TJpegImage.Create;
 JpegIm.LoadFromFile(OpenDialog1.FileName);
 bm.Assign(JpegIm);
 Form1.Canvas.Draw(0, 0, bm);
 bm.Destroy;
 JpegIm.Destroy;
end;


2. (номер 2)
uses JPEG;

procedure TForm1.Button1Click(Sender: TObject);
var
 JPEG: TJPEGImage;
 Bitmap: TBitmap;
begin
 JPEG := TJPEGImage.Create;
 Bitmap := TBitmap.Create;
 try
   Bitmap.LoadFromFile('C:\Program Files\Common Files\alarm.bmp');
   JPEG.Assign(Bitmap);
   Image1.Picture.Assign(JPEG);
 finally
   JPEG.Free;
   Bitmap.Free;
 end;
end;


3. (номер три) - этот код работает ТОЛЬКО с bmp
procedure TForm.ButtonClick(Sender: TObject);
begin
if OpenDialog1.Execute then
 begin
 DataModule1.ADOQuery1.Edit;
 DataModule1.ADOQueryImage.LoadFromFile(OpenDialog1.FileName);
 DataModule1.ADOQuery1.Post;
 end;
end;


4. (номер четыре)
Я ЛИЧНО САМ ДАВНО ИЩУ ОТВЕТ НА ТАКОЙ ВОПРОС, НО ОТВЕТА ТАК И НЕ НАШЁЛ... ЕСЛИ НАЙДЁШЬ ОТВЕТ - НАПИШИ ЗДЕСЬ. БУДУ ОЧЕНЬ БЛАГОДАРЕН. УТОЧНЮ НЕМНОГО ТВОЙ ВОПРОС:
Есть mdb-файл, в нем в таблице поле типа "Поле объекта OLE". Hа форме TADOQuery выбирает это поле как TBlobField. Делаю LoadFromFile и пытаюсь запихнуть туда jpg-файл. Ругается, что "Bitmap image is not valid". В свойствах поля стоит BlobType = ftBlob. Как мне сохранить в это поле jpg-файл и ПОСМОТРЕТЬ?


Desdechado   (2004-08-23 19:40:00) [12]

"Впихнуть" можно в каком угодно формате, для этого BLOB-поля предназначены. А вот как ты будешь отображать или преобразовывать хранимое в БД, это твоя задача. Лень-матушка тут не советчик, поэтому на встроенные форматы и компоненты не слишком надейся.


Наверх

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