Как в firemonkey масштабировать прямоугольник
Перейти к содержимому

Как в firemonkey масштабировать прямоугольник

  • автор:

Firemonkey bitmap scaling without Aliasing on Android

Firemonkey bitmap scaling without Aliasing on Android

  • by Ivan Revelli
  • in Android, Delphi, Posts, Programmazione
  • on April 11, 2016

With Delphi , to the Seattle version , when you scale a bitmap image to enlarge using the command “Canvas.DrawBitmap(OiginalBitmap, RectF(0, 0, OiginalBitmap.Width, OiginalBitmap.Height), RectF(0, 0, Width, Height), 1, False);” the interpolation cant be disabled.

A way to eliminate the problem is to manually scale the bitmap directly creating an image pixel by pixel . To do this you need to get canvas.scale and create an image with the native resolution of the Android device .

This helped me for example to generate qrcode on the display of my Android devices that were as sharp as possible, i use the DelphiZXingQRCode to generate the qrcode in the original format.

To draw the qrcode generated from the library I have implemented the following procedure:

Delphi Firemonkey Scale for High DPI Windows

I thought scaling an application in FireMonkey should be easy as it is supposed to work an a Retina-Mac too. It seems there is some background magic which chooses another style than, but this doesn’t seem to be the case in Windows.

In VCL there was TForm.Scaled which does the job (more or less).

For FireMonkey I found this Article by Embarcadero but it seems Embarcadero is not quite sure if this approach is useful as in XE5 the sampleproject «ControlsDemo» doesn’t contain the scale-trackbar anymore. It also requires to have a root-TLayout present in all forms for which the scale factor can be set. I don’t have such a element in my forms (and I’m afraid to add one as I cannot be sure if I run in another firemonkey bug than).

Самый быстрый способ рисования пикселей в FireMonkey

есть ли более быстрый способ рисовать пиксели в Firemonkey?
Я намереваюсь сделать демо-программу, используя игру жизни Конвея.

3 ответов

все время тратится на выполнение этих двух строк кода:

вы можете удалить весь код, который работает с растровым изображением, и код, который фактически рисует растровое изображение, и это не имеет ни малейшего значения для среды выполнения. Другими словами, узким местом является код сцены, а не растровый код. И я не вижу способа для вас оптимизировать это.

мой тестовый код выглядит так:

это имеет то же время, что и ваш код, 1600ms на моем машина. Если убрать BeginScene , DrawBitmap и EndScene вызовы, то ваш код работает в 3ms на моей машине.

Русские Блоги

Узнайте, как использовать сетки для достижения некоторых эффектов интерфейса в FireMonkey. Например, сетка, подобная панели свойств Delphi IDE.

Написать блог в качестве записи во время обучения. Начните с самого простого способа игры.

Создайте проект FireMonkey и сохраните его. Требуется только одна форма.

https://amdy.su/wp-admin/options-general.php?page=ad-inserter.php#tab-8

Перетащите TLayout поверх и установите Align на Top, перетащите TGrid на этот макет и установите Align на Left.

Дважды щелкните этот Gird1, и в IDE появится окно редактора элементов. Нажмите кнопку Добавить элемент здесь, чтобы добавить TColumn, который автоматически генерирует TColumn с именем Column1, который должен добавить столбец в таблицу. Здесь я хочу иметь два столбца, другой столбец я создаю с помощью кода.

Сначала посмотрим на конечный эффект:

В приведенных выше изображениях числа в левом столбце являются номерами строк. Строки в правом столбце предварительно записываются в список с кодом.

Напишите что-нибудь в коде:

Объяснение приведенного выше кода:

1. Данные используются для хранения некоторых текстовых данных для отображения.

2. ValueColunm — это динамически создаваемый столбец.

3. Метод PopulateData используется для присвоения значений данным.

На этом этапе вы можете начать писать код официально.

Сначала напишите некоторый код в Form OnCreate, чтобы создать данные и создать другой столбец.

Объяснение:Grid1.RowCount: = Data.Count; Эта строка используется для установки количества строк в Grid1. Укажите столько строк, сколько имеется данных.

Когда я создаю сетку, где я могу написать код для записи текста в Data в эту Grid1? В событии OnGetValue Grid1. После выбора Grid1 в течение периода разработки найдите OnGetValue в панели свойств IDE и дважды щелкните, структура кода автоматически устанавливает этот метод события. Код, написанный внутри, выглядит следующим образом:

Объяснение приведенного выше кода:

1. ACol представляет текущее количество столбцов. 0 = первый столбец — левый столбец; 1 = второй столбец — правый столбец.

2. Значение представляет значение текущей сетки. Вот описание вар может быть ему присвоено.

3. Если текущим является первый столбец, присвойте ему значение ARow, которое является текущим номером строки.

4. Если в данный момент это второй столбец, присвойте ему значение Data [ARow], которое является первой строкой списка строк, соответствующей текущему номеру строки.

Попробуйте.

В этот момент нажмите F9, чтобы запустить программу, чтобы увидеть эффект. Конечно же, сетка вышла, показывая правильный контент.

Я нажал на сетку и обнаружил, что могу выбрать ее и отредактировать текст внутри. Но после редактирования текста, когда курсор уходит, отредактированный текст теряется, а оригинальный текст все равно отображается. к

Подумав об этом, код здесь показывает содержимое данных. Затем, если вы измените отредактированный текст на соответствующий контент в Данные после редактирования, вы сможете увидеть эффект, что результат редактирования не будет потерян.

Поскольку событие OnGetValue в TGrid используется для отображения содержимого данных в сетке, оно должно иметь событие OnSetValue. Перейдите на панель свойств и найдите ее, и она дважды щелкнет мышью, рамка кода появится автоматически, код выглядит следующим образом:

Объяснение:

В этом методе события я написал, если ACol = 1, то это означает, что если данные в соответствующих данных редактируются, то отредактированные в данный момент данные будут сохранены в данных. Соответствующим номером строки ARow является соответствующий индекс в данных.

Запустите тест снова, и в Grid1 на интерфейсе результаты редактирования действительно могут быть сохранены.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *