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

Scanline и Draw под FMX


MaratBest

Вопрос

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

есть такая задача перенести один проект на 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); ?

 

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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