Форум: "Базы";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];
ВнизЗагрузка в 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.041 c