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

Вниз

Загрузка в Image1 рисунка из BLOB поля   Найти похожие ветки 

 
VALUA   (2006-06-23 17:59) [0]

Господа есть поле BLOB , необходимо его загрузить в компонент
Image1 -> код программы :

var Bm1:TMemoryStream;
   Jp1:TBitmap;
   Jp2:TJPEGImage;
   notJpg:Boolean;
begin
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add("Select * from TABL_KV_S_KOD(:P0)");
IBQuery1.Params[0].AsInteger := Kod;
IBQuery1.Open;
notJpg := False;
 Bm1:= TMemoryStream.Create;
 IBQuery1PLAN_KV.SaveToStream(Bm1);
 Bm1.Position := 0;
 if (Bm1.Size > 0) then begin
 try
   Jp1 := TBitmap.Create;
   Jp1.LoadFromStream(Bm1);
   Image1.Picture.Bitmap.Assign(Jp1);
 Except
    on EInvalidGraphic do notJpg := true;
 end;
 Jp1.Free;
 Bm1.Free;
 if notJpg then begin
    Bm1:= TMemoryStream.Create;
    IBQuery1PLAN_KV.SaveToStream(Bm1);
    Bm1.Position := 0;
    Jp2 := TJPEGImage.Create;
    Jp2.LoadFromStream(Bm1);
   try
    Image1.Picture.Bitmap.Assign(Jp2);
   finally
    Bm1.Free;
    Jp2.Free;
   end;
 end;
 end else begin
   Image1.Picture.Assign(nil);
   Bm1.Free;
 end;   //  bm1.size > 0

года два назад делала и все получалось , что не достает - не пойму . Mодуль JPEG включила , может быть не хватает какой-то библиотеки ?
Господа , что неправильно .
Не загружает рисунок в поток :
IBQuery1PLAN_KV.SaveToStream(Bm1);
 Bm1.Position := 0;
 if (Bm1.Size > 0) then begin

Bm1.Size плучается = 0 и выполняется блок

end else begin
   Image1.Picture.Assign(nil);
   Bm1.Free;
 end;   //  bm1.size > 0

Всем спасибо .


 
Плохиш ©   (2006-06-23 18:08) [1]


> Господа , что неправильно .
> Не загружает рисунок в поток :

Для начала надо проверить, а есть ли в этом поле что-нибудь.


 
Desdechado ©   (2006-06-23 18:48) [2]

я обычно делаю чуть наоборот
 oS := qryGraf.CreateBlobStream( qryGraf.FieldByName( "PICT_BLOB" ), bmRead );
 try
   if( oS.Size > 0 ) then begin
     case( cExt[ 1 ] ) of
       "B":
         Image1.Picture.Bitmap.LoadFromStream( oS );
       "I":
         Image1.Picture.Icon.LoadFromStream( oS );
       "J":
         begin
           oJPG := TJPEGImage.Create;
           oJPG.LoadFromStream( oS );
           oJPG.DIBNeeded;
           Image1.Picture.Bitmap.Assign( oJPG );
           oJPG.Free;
         end;
       "E", "W":
         Image1.Picture.Metafile.LoadFromStream( oS );
     end; // case

Поясню - не сохраняю в поток, а считываю из потока. Кроме того, удобнее хранить формат отдельным полем, а не через Exception "догадываться".
Да и двойная попытка сохранения в поток неэффективна.



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

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

Наверх




Память: 0.47 MB
Время: 0.046 c
15-1154669236
Ega23
2006-08-04 09:27
2006.09.03
С Днём рождения! 4 июля. Нет. 4 августа.


2-1155213598
o_serg
2006-08-10 16:39
2006.09.03
Ужасное моргание при изменении размера окна


4-1147254508
QuickFinder
2006-05-10 13:48
2006.09.03
Определение операционной системы


15-1154954506
antonn
2006-08-07 16:41
2006.09.03
ищу музончик...


15-1155203084
DmitryS
2006-08-10 13:44
2006.09.03
Дайте совет по написанию трехзвенки