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

Динамическое создание Bitmap


umkes

Вопрос

Добрый день, возникла проблема при работе с TImage;

У меня компонент TImage - imgRing и есть в TImageList. 

Я динамически формирую Bitmap из копий картинки из TImageList и асайню его в TImage. На Windows все работает прекрасно, а на андроиде картинка все время пустая... Может кто-то подскажет, где я не прав :)

//==============================================================================
procedure TMainForm.DrawRing;
//------------------------------------------------------------------------------
var
  bmp1, bmp2 : TBitmap;
  i : integer;
  str : TMemoryStream;
begin
  bmp2 := TBitmap.Create;
  bmp2.Assign(ImageList.Source.Items[3].MultiResBitmap.Items[0].Bitmap);

  bmp1 := TBitmap.Create;
  bmp1.Assign(bmp2);
  bmp1.Width := ClientWidth + bmp2.Width * 10;
  i := 0;
  bmp1.Canvas.BeginScene();
  while (i * bmp2.Width) < bmp1.Width do begin
    bmp1.Canvas.DrawBitmap(bmp2,
                           RectF(0, 0, bmp2.Width, bmp2.Height),
                           RectF(i * bmp2.Width, 0, (i + 1) * bmp2.Width, bmp2.Height),
                           1
                          );
    inc(i);
  end{ while };

  bmp1.Canvas.EndScene;

  str := TMemoryStream.Create;
  bmp1.SaveToStream(str);
  str.Position := 0;

  imgRing.BeginUpdate;
  imgRing.Bitmap.CreateFromStream(str);
  imgRing.EndUpdate;
end{ procedure TMainForm.DrawRings };

Делаю такое потому-что TImage.WrapMode.Tile не подходит для моей задачи.

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

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

  • 0
ImageList.Source.

точно там 4 картинки? у меня было такое. не отображалось в ListView

Может попробовать?

 bmp2.Assign(ImageList.Source.Items[0].MultiResBitmap.Items[0].Bitmap);
Изменено пользователем AndroidHalfNoob
Ссылка на комментарий
  • 0

Всеравно ничего с андроидом не происходит.

Пробую еще вот так: 

//==============================================================================
procedure TMainForm.DrawRing;
//------------------------------------------------------------------------------
var
  bmp1, bmp2 : TBitmap;
  i : integer;
begin
  bmp2 := TBitmap.Create;
  bmp2.Assign(ImageList.Source.Items[3].MultiResBitmap.Bitmaps[1]);

  bmp1 := TBitmap.Create;
  bmp1.Assign(bmp2);
  bmp1.Width := ClientWidth + bmp2.Width * 10;
  i := 0;
  bmp1.Canvas.BeginScene();
  while (i * bmp2.Width) < bmp1.Width do begin
    bmp1.Canvas.DrawBitmap(bmp2,
                           RectF(0, 0, bmp2.Width, bmp2.Height),
                           RectF(i * bmp2.Width, 0, (i + 1) * bmp2.Width, bmp2.Height),
                           1
                          );
    inc(i);
  end{ while };

  bmp1.Canvas.EndScene;
  
  imgRing.Bitmap.Assign(bmp1);
  bmp1.Free;
  bmp2.Free;
end{ procedure TMainForm.DrawRings };

 

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

umkes, PrintScreen ImageList-а можете выложить?

Хотя не надо, в Windows же работает

Интересно, а если закомментировать этот участок, то картинка вообще приходит?

  bmp1.Width := ClientWidth + bmp2.Width * 10;
  i := 0;
  bmp1.Canvas.BeginScene();
  while (i * bmp2.Width) < bmp1.Width do begin
    bmp1.Canvas.DrawBitmap(bmp2,
                           RectF(0, 0, bmp2.Width, bmp2.Height),
                           RectF(i * bmp2.Width, 0, (i + 1) * bmp2.Width, bmp2.Height),
                           1
                          );
    inc(i);
  end{ while };

  bmp1.Canvas.EndScene;

 

Изменено пользователем Rusland
Ссылка на комментарий
  • 0
  • Администраторы

Копайте в сторону скейла картинки. На винде он равен 1, а на вашем девайсе скорее всего отличный от 1.

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

Опытным путем было выяснено что что-то не так с ImageList или самой картинкой. Если тоже самое сделать для первых трех картинок то все хорошо, а с последней теперь отображается пазл из обрезков первой картинки. Пробовал даже тянуть битмап из отдельного TImage, а не из TImageList, эффект тот же.

Может студия глючит... В среду буду копать дальше.

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

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

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

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

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

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

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

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

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

×
×
  • Создать...