powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как загрузить BLOB в TPicture?
16 сообщений из 16, страница 1 из 1
Как загрузить BLOB в TPicture?
    #39702097
Фотография adminsamara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
Picture:Tpicture;
Picture:= Tpicture.Create;


и тут вопрос, Как можно уйти от
Код: pascal
1.
2.
TBlobfield(dm.UniTable1.FieldByName('imagepng')).SaveToFile('...');
Picture.LoadFromFile(...);


и записывать сразу в Picture
Код: pascal
1.
2.
TBlobfield(dm.UniTable1.FieldByName('imagepng')).SaveToStream(stream);
Picture.....


Почему нужен именно Picture?! Потому что я использую далее:
Код: pascal
1.
2.
Bitmap.Canvas.Draw(X,Y,Picture.Graphic);
BitBlt(Form1.Image321.Bitmap.Handle,0,0,Bitmap.Width,Bitmap.Height,Bitmap.Handle,0,0, SRCCOPY);



Или есть еще какие то варианты?!
...
Рейтинг: 0 / 0
Как загрузить BLOB в TPicture?
    #39702106
Фотография adminsamara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
TBlobfield(dm.UniTable1.FieldByName('imagepng')).SaveToStream(stream);
Picture.LoadStream(stream);


Не выводит изображение
...
Рейтинг: 0 / 0
Как загрузить BLOB в TPicture?
    #39702108
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminsamaraИли есть еще какие то варианты?!

Выкинуть TPicture, оно всё равно тупая обёртка. Использовать TBitmap/TJPEG/TGIF по
обстоятельствам, у них есть метод LoadFromStream.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как загрузить BLOB в TPicture?
    #39702116
Фотография adminsamara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovadminsamaraИли есть еще какие то варианты?!

Выкинуть TPicture, оно всё равно тупая обёртка. Использовать TBitmap/TJPEG/TGIF по
обстоятельствам, у них есть метод LoadFromStream.


У TBitmap/TJPEG/TGIF есть .Graphic?

как мне загрузить сюда?
Код: pascal
1.
Bitmap.Canvas.Draw(X,Y,Picture.Graphic);
...
Рейтинг: 0 / 0
Как загрузить BLOB в TPicture?
    #39702119
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminsamaraУ TBitmap/TJPEG/TGIF есть .Graphic?


TBitmap/TJPEG/TGIF и есть TGraphic?
...
Рейтинг: 0 / 0
Как загрузить BLOB в TPicture?
    #39702120
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TBitmap/TJPEG/TGIF и есть TGraphic
...
Рейтинг: 0 / 0
Как загрузить BLOB в TPicture?
    #39702125
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminsamara,

подсмотрите код этого компонента:

Зацените компонент TMyDBImage с поддержкой BMP, GIF, JPEG
...
Рейтинг: 0 / 0
Как загрузить BLOB в TPicture?
    #39702126
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
TBlobfield(dm.UniTable1.FieldByName('imagepng')).SaveToStream(stream);
stream.Position := 0;
Picture.LoadStream(stream);


А лучше так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var
  strm: TStream;
begin
  strm := dm.UniTable1.CreateBlobStream(dm.UniTable1.FieldByName('imagepng'), bmRead);
  try
    Picture.LoadStream(strm);
  finally
    strm.Free;
  end;
end;

На некоторых движках позволяет избежать лишнего копирования в stream
...
Рейтинг: 0 / 0
Как загрузить BLOB в TPicture?
    #39702144
Фотография adminsamara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Код: pascal
1.
2.
3.
TBlobfield(dm.UniTable1.FieldByName('imagepng')).SaveToStream(stream);
stream.Position := 0;
Picture.LoadStream(stream);


А лучше так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var
  strm: TStream;
begin
  strm := dm.UniTable1.CreateBlobStream(dm.UniTable1.FieldByName('imagepng'), bmRead);
  try
    Picture.LoadStream(strm);
  finally
    strm.Free;
  end;
end;

На некоторых движках позволяет избежать лишнего копирования в stream
Код: pascal
1.
[dcc32 Error] Unit2.pas(126): E2010 Incompatible types: 'TMemoryStream' and 'TStream'
...
Рейтинг: 0 / 0
Как загрузить BLOB в TPicture?
    #39702147
Фотография adminsamara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminsamara,
Извиняюсь. Смотрю.
...
Рейтинг: 0 / 0
Как загрузить BLOB в TPicture?
    #39703345
Фотография adminsamara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminsamara,
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
procedure TForm1.Button1Click(Sender: TObject);
var
    strm: TStream;
    Picture2:Tpicture;            //+
    Bitmap3: TBitmap32;
begin
  Picture2:= Tpicture.Create;
  bitmap3:=tbitmap32.Create;
  strm := dm.UniTable1.CreateBlobStream(dm.UniTable1.FieldByName('imagepng'), bmRead);
  //strm.Position := 0;
  try
    Picture2.LoadfromStream(strm);
    Bitmap3.Canvas.Draw(0,0,Picture2.Graphic);
    image322.Bitmap.Clear(clWhite32);
    BitBlt(Form1.Image322.Bitmap.Handle,0,0,0,0,Bitmap3.Handle,0,0, SRCCOPY);
  finally
    strm.Free;
  end;
end;


Что не так?
...
Рейтинг: 0 / 0
Как загрузить BLOB в TPicture?
    #39703348
Фотография adminsamara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminsamara,

и еще, пытался отказаться от picture, но опять не получается:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
procedure TForm1.Button1Click(Sender: TObject);
var
    strm: TStream;
    Picture2:Tpicture;            //+
    Bitmap3: TBitmap32;
    png:tpngimage;
begin
  Picture2:= Tpicture.Create;
  bitmap3:=tbitmap32.Create;
  png:=tpngimage.Create;
  strm := dm.UniTable1.CreateBlobStream(dm.UniTable1.FieldByName('imagepng'), bmRead);
  //strm.Position := 0;
  try
    //Picture2.LoadfromStream(strm);
    png.LoadFromStream(strm);
    Bitmap3.Canvas.Draw(0,0,png);
    image322.Bitmap.Clear(clWhite32);
    BitBlt(Form1.Image322.Bitmap.Handle,0,0,0,0,Bitmap3.Handle,0,0, SRCCOPY);
  finally
    strm.Free;
  end;
end;

...
Рейтинг: 0 / 0
Как загрузить BLOB в TPicture?
    #39703478
Фотография adminsamara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminsamara,

up!
...
Рейтинг: 0 / 0
Как загрузить BLOB в TPicture?
    #39703534
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminsamaraadminsamara,

и еще, пытался отказаться от picture, но опять не получается:
Код: pascal
1.
2.
3.
4.
    png.LoadFromStream(strm);
    Bitmap3.Canvas.Draw(0,0,png);
    image322.Bitmap.Clear(clWhite32);
    BitBlt(Form1.Image322.Bitmap.Handle,0,0,0,0,Bitmap3.Handle,0,0, SRCCOPY);


Вообще по идее тебе надо не рисовать, а присваивать загруженную картинку. должно быть что-то вроде:
Код: pascal
1.
Form1.Image322.Bitmap.Assign(Bitmap3);

вместо последних двух строк.
И ещё тебе нужно проверить размер Bitmap3, соответствует ли ширина и высота png.
...
Рейтинг: 0 / 0
Как загрузить BLOB в TPicture?
    #39703602
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, поможет.

Функция загрузки "произвольной" картинки из блоба:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
uses Graphics, DB, Classes, JPEG, pngimage, SysUtils;

function LoadPictureFrobField( Field: TBlobField ): TGraphic;
var
  Stream: TMemoryStream;
  aHeader: Array[ 0 .. 9 ] of AnsiChar;
begin
  Result := nil;
  if Field.IsNull then
    Exit;

  try
    Stream := TMemoryStream.Create;
    try
      Field.SaveToStream( Stream );
      if Stream.Size < sizeof( aHeader ) then
        Exit;

      Move( Stream.Memory^, aHeader, sizeof( aHeader ) );
      if ( aHeader[ 0 ] = 'B' ) and ( aHeader[ 1 ] = 'M' ) then begin
        Stream.Position := 0;
        Result := Graphics.TBitmap.Create;
        Result.Transparent := True;
        Result.LoadFromStream( Stream );
      end else if ( aHeader[ 1 ] = 'P' ) and ( aHeader[ 2 ] = 'N' ) and ( aHeader[ 3 ] = 'G' ) then begin
        Stream.Position := 0;
        Result := TPNGObject.Create;
        Result.Transparent := True;
        Result.LoadFromStream( Stream );
      end else if ( aHeader[ 6 ] = 'J' ) and ( aHeader[ 7 ] = 'F' ) and ( aHeader[ 8 ] = 'I' ) and ( aHeader[ 9 ] = 'F' ) then begin
        Stream.Position := 0;
        Result := TJPEGImage.Create;
        Result.LoadFromStream( Stream );
      end else
        Exit;
    finally
      Stream.Free;
    end;
  except
    FreeAndNil( Result );
  end;
end;



Использование.
Для TImage/TPicture:
Код: pascal
1.
Image.Picture.Graphic := LoadPictureFrobField( BlobField );


Для рисования на канвас:
Код: pascal
1.
2.
3.
// FGraphic - результат фции LoadPictureFrobField
if Assigned( FGraphic ) then
  Canvas.Draw( 0, 0, FGraphic );
...
Рейтинг: 0 / 0
Как загрузить BLOB в TPicture?
    #39703806
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminsamara
Код: pascal
1.
[dcc32 Error] Unit2.pas(126): E2010 Incompatible types: 'TMemoryStream' and 'TStream'

Не может быть такой ошибки с этим кодом
_Vasilisk_
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var
  strm: TStream;
begin
  strm := dm.UniTable1.CreateBlobStream(dm.UniTable1.FieldByName('imagepng'), bmRead);
  try
    Picture.LoadStream(strm);
  finally
    strm.Free;
  end;
end;

Тут MemoryStream не упоминается нигде
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как загрузить BLOB в TPicture?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]