• 0
MaratBest

Scanline и Draw под FMX

Вопрос

Добрый день !!!

есть такая задача перенести один проект на Android платформу.

код для VCL 

type
TRGB = record
   b, g, r: byte;
end;
ARGB = array[0..1] of TRGB;
PARGB = ^ARGB;

var
  gamecanvas: TBitmap;

procedure TForm1.Button1Click(Sender: TObject);
var
  i,j : word;
  p: PARGB;
  x, y: integer;
begin
  i:=0;
for I := 0 to 255 do
 begin
  p :=gamecanvas.scanline[i];
  for J := 0 to 255 do
      begin
         p[j].r := Random(255);
         p[j].g := Random(255);
         p[j].b := Random(255);
      end;
  end;
  Form1.Canvas.Draw(0,0, gamecanvas);
  end;


procedure TForm1.FormCreate(Sender: TObject);
begin
 gamecanvas:=tbitmap.Create;
 gamecanvas.pixelformat := pf24bit;
 gamecanvas.Width:=256;
 gamecanvas.Height:=256;
end;


procedure TForm1.FormDestroy(Sender: TObject);
begin
   gamecanvas.Free;
end;

как максимально (по быстроте выполнения) перенести его на FMX firemonkey

есть ли пример работы со scanline ?

Form1.Canvas.Draw(0,0, gamecanvas); ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

5 ответов на этот вопрос

  • 1
uses
  FMX.Utils;

procedure TForm7.Button1Click(Sender: TObject);
var
  gamecanvas: TBitmap;
  i, j: integer;
  bitData: TBitmapData;
  p: PAlphaColorArray;
begin
  gamecanvas := TBitmap.Create(256, 256);
  try
    if gamecanvas.Map(TMapAccess.ReadWrite, bitData) then
    begin
      for i := 0 to 255 do
      begin
        p := bitData.GetScanline(i);
        for j := 0 to 255 do
          p[j] := TAlphaColorF.Create(random(255) / 255, random(255) / 255, random(255) / 255, 1).ToAlphaColor;
      end;
      gamecanvas.Unmap(bitData);
      self.Canvas.BeginScene();
      self.Canvas.DrawBitmap(gamecanvas, gamecanvas.BoundsF, RectF(0, 0, 256, 256), 1);
      self.Canvas.EndScene;
    end;
  finally
    gamecanvas.Free;
  end;
end;

 

Kitty, Rusland, Brovin Yaroslav и 1 другому понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Равиль Зарипов  Спасибо за ответ !!!

пробую запускать на эмуляторе и на реальном устройстве.
на экране ничего не происходит после нажатия кнопки

убирал try finally .... ничего не ломается

пробовал ImageViewer1.Canvas.DrawBitmap(gamecanvas, gamecanvas.BoundsF, RectF(0, 0, 256, 256), 1);

тоже тишина, ни каких изменений 

ANDROID SDK 24.3.3 32BIT

SDK 24.0.3 API 24

 

Изменено пользователем MaratBest

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
7 часов назад, MaratBest сказал:

пробовал ImageViewer1.Canvas.DrawBitmap(gamecanvas, gamecanvas.BoundsF, RectF(0, 0, 256, 256), 1);

  1. Рисовать по нажатию на кнопке нельзя на канве формы. 
  2. Рисовать на форме можно только в рамках общего процесса отрисовки. А именно в события OnPaint или методе Paint.

 

Kitty, Alexander и MaratBest понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Brovin Yaroslav Спасибо большое !!!! разобрался !

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

На здоровье. Еще почитайте вот эту тему: 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу