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

Вниз

jpg в базу данных   Найти похожие ветки 

 
Kraj   (2004-08-23 13:52) [0]

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


 
Desdechado ©   (2004-08-23 19:40) [1]

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


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

Могу лишь это подсказать (ссылки из разных мест):
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-файл и ПОСМОТРЕТЬ?


 
Zif ©   (2004-08-23 23:31) [3]

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

Как вставить с помощью 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 23:42) [4]

ещё накопал:
(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-24 00:01) [5]

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-24 00:38) [6]

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

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


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

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


 
Zif ©   (2004-08-24 15:46) [8]

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


 
Zif ©   (2004-08-24 17:09) [9]

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


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

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


 
Desdechado ©   (2004-08-26 14:01) [11]

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

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


 
Zif ©   (2004-08-26 20:53) [12]

Чего вы голову ломаете? просто напишите этот код и используйте компонент с 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;

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



Страницы: 1 вся ветка

Текущий архив: 2004.09.26;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.034 c
3-1093584135
Dual
2004-08-27 09:22
2004.09.26
Проблема с базами или что же выбрать?


1-1094814005
HeKTO
2004-09-10 15:00
2004.09.26
HotKey


1-1094632662
digger
2004-09-08 12:37
2004.09.26
WinErr:01B


4-1092331818
NLO
2004-08-12 21:30
2004.09.26
Clipbrd


14-1093937222
Knight
2004-08-31 11:27
2004.09.26
Вопрос к знатокам Корл...