Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2007, 19:24   #11
Cyn4uk
Пользователь
 
Регистрация: 25.11.2007
Сообщений: 56
По умолчанию

Чтение графического рисунка любого формата из базы данных в BLOB-поле
1-ый вариант - в компонент TDBImage (его надо наследовать)


Код:
uses ......, JPEG, GIFImage;
..........................................

TDBImageEx = class(TDBImage)
private
  procedure ExDataChange(Sender: TObject);
  procedure SetAdiImageType(const Value: TAdiImageType);
  function  Get_FDataLink: TFieldDataLink;
  function  LoadPictureFromDB(AField:TField; APicture: TPicture):boolean;
protected
  property _FDataLink : TFieldDataLink read Get_FDataLink;
  procedure ExLoadPicture;
public
  constructor Create(AOwner : TComponent); override;
..........................................

{ TDBImageEx }

function TDBImageEx.LoadPictureFromDB(AField: TField; APicture: TPicture): boolean;
var
  fldBLOB : TBlobField;
  MemStream : TMemoryStream;
  ImgGraphic : TGraphic;
  arFormat : array[1..3] of char;
begin
  Result := false;

  if (AField is TBlobField) and Assigned(APicture) then
  begin
    fldBLOB := TBlobField(AField);

    if not (fldBLOB.IsNull) then
    begin
    MemStream := TMemoryStream.Create();

  try
  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
    fldBLOB.SaveToStream(MemStream);
    MemStream.Position := 0;

    if (MemStream.Size > 3) then
    begin
    MemStream.Read(arFormat, 3);

    //Bitmap
    if (arFormat[1]='B') and (arFormat[2]='M') then
      ImgGraphic := Graphics.TBitmap.Create() //Файл Graphics.pas
    else
    //GIF
    if (arFormat[1]='G') and (arFormat[2]='I') and (arFormat[3]='F') then
      ImgGraphic := GIFImage.TGIFImage.Create() //Файл GIFImage.pas
    else
    //JPEG
    if (arFormat[1]=#$FF) and (arFormat[2]=#$D8) and (arFormat[3]=#$FF) then
      ImgGraphic := JPEG.TJPEGImage.Create() //Файл JPEG.pas
    else
    //EXIF
      if (arFormat[1]='E') and (arFormat[2]='X') and (arFormat[3]='I') then
        ImgGraphic := JPEG.TJPEGImage.Create() //Файл JPEG.pas
    else
    //WMF - метафайл #$D7#$CD#$C6#$9A
      if (arFormat[1]=#$D7) and (arFormat[2]=#$CD) and (arFormat[3]=#$C6) then
        ImgGraphic := Graphics.TMetafile.Create() //Файл Graphics.pas
      else //Default
        ImgGraphic := Graphics.TBitmap.Create(); //Файл Graphics.pas

      if Assigned(ImgGraphic) then
      begin
        MemStream.Position := 0;
        ImgGraphic.LoadFromStream(MemStream);
        APicture.Assign(ImgGraphic);        
        ImgGraphic.Free;
        Result := true;
      end;
    end;
  
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
    finally
      MemStream.Free;
    end;
  end;
  end;

  if not Result then
  APicture.Assign(nil);

end;

procedure TDBImageEx.ExDataChange(Sender: TObject);
begin
  Picture.Graphic := nil;
  if AutoDisplay then
    ExLoadPicture;
end;

procedure TDBImageEx.ExLoadPicture;
begin
if (not Assigned(_FDataLink.Field) or _FDataLink.Field.IsBlob) then
  LoadPictureFromDB(_FDataLink.Field, Picture);
end;

constructor TDBImageEx.Create(AOwner: TComponent);
begin
inherited Create( AOwner );
  _FDataLink.OnDataChange := ExDataChange;
end;

function TDBImageEx.Get_FDataLink: TFieldDataLink;
begin
  Result := TFieldDataLink(Perform(CM_GETDATALINK, 0, 0));
end;
Cyn4uk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Jpeg warmbabe Общие вопросы по Java, Java SE, Kotlin 2 26.02.2010 20:14
DBImage i Accsess Coda89 БД в Delphi 5 28.05.2008 20:15
Размер картинок DBImage Crookers Общие вопросы Delphi 1 12.05.2008 08:52
Связь ComboBox с DBImage и DBMemo gane4ka Помощь студентам 8 14.12.2007 17:52