• 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;

 

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


Ссылка на сообщение
Поделиться на другие сайты
  • 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.

 

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

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

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