Перейти к содержанию
Fire Monkey от А до Я
  • 0

Проблемы со вставкой картинки в Grid из Blob-поля


bfarid

Вопрос

Подскажите, пожалуйста, решение проблем при вставке картинки из blob-поля в grid (в программе с Vcl все делал EhLib):

1. Картинка 16х16 сжимается (см рисунок) и приходится добавлять костыль Grid1.ColumnByIndex(1).Width:=24 (если 16, то все равно картинка сужена).

2. Если картинка с прозрачным фоном, то виден текст из поля базы данных (видимо нужно вначале как-то залить ячейку).

------------------

 procedure TPntdata.Grid1DrawColumnCell(Sender: TObject; const Canvas: TCanvas;
  const Column: TColumn; const Bounds: TRectF; const Row: Integer;
  const Value: TValue; const State: TGridDrawStates);
var
  img1: TMemoryStream;
  vImage: Timage;
begin

  //Столбец Grid, куда помещаем рисунок, связан (Bind Visually) с полем type1 (текстовый тип с идентификацией данных: advice, chemistry, blood...) основной таблицы fdata
  if (Column.Index=1) then
      begin
         Grid1.ColumnByIndex(1).Width:=24; //Иначе картинка 16х16 сжимается?

         img1:=TMemoryStream.Create;
         vImage := TImage.Create(nil);

         //картинки подгружаются из BLOB-полей другой таблицы fileimages по совпадению полей type1
         DataModule3.FDQuery4.Open('select * from fileimages where type1='+QuotedStr(Value.ToString));
         img1.CopyFrom(DataModule3.FDQuery4.CreateBlobStream(DataModule3.FDQuery4.FieldByName('img'), bmRead), 0);
         vImage.Bitmap.LoadFromStream(img1);
         Canvas.DrawBitmap(vImage.Bitmap, vImage.Bitmap.Bounds, Bounds, 1);

         img1:=nil;
         vImage:=nil;
      end;

photo_2024-07-22_08-30-46.thumb.jpg.437a3baaab8070ea6437a8083bc4b9b6.jpg

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Немного доработал:          

 //Загружает картинку 16х16
 vImage.Bitmap.LoadFromStream(img1);
 //Ширина ячейки
 Grid1.ColumnByIndex(1).Width:=20;
 //Целевая область изображения, иначе картинка рисуется в размер ячейки
 Bounds.Width:=16;
 Bounds.Height:=16;
 Canvas.BeginScene;
 Canvas.DrawBitmap(vImage.Bitmap, vImage.Bitmap.Bounds, Bounds, 1, True);
 Canvas.EndScene;

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...