Sign in Join
Wiki copytemporary

BGRABitmap/ru

Deutsch · English · Español · Français · Русский · 中文(中国)

См.также: Developing with Graphics

Описание

BGRABitmap - это набор модулей, предназначенных для изменения и создания изображений с прозрачностью (альфа-канал). Прямой пиксельный доступ позволяет быстро обрабатывать изображения. Библиотека была протестирована на Windows, Ubuntu и Mac OS X (последняя версия не работает на Mac), с наборами виджетов win32, gtk1, gtk2 и carbon.

Основным классом является TBGRABitmap, который является производным от TFPCustomImage. Существует также TBGRAPtrBitmap, позволяющий редактировать данные BGRA, которые уже распределены. Этот формат состоит из 4 байтов для каждого пикселя (синий, зеленый, красный и альфа в этом порядке).

Изображение может быть отображено на обычном Canvas или на OpenGL surface.

Дополнительные пакеты

Некоторые пакеты используют BGRABitmap для обеспечения элементов управления приятной графикой:

Некоторые примеры в папке с примерами используют BGRAControls и BGLControls. Вам может понадобиться установить их, чтобы открыть эти проекты в Lazarus. См. Install Packages.

Использование BGRABitmap

Руководства

Обзор

Функции имеют длинные имена, чтобы быть понятными. Почти все доступно в виде функции или с помощью свойства объекта TBGRABitmap. Например, вы можете использовать CanvasBGRA, чтобы иметь некоторые холсты, похожие на TCanvas (с прозрачностью и сглаживанием) и Canvas2D, чтобы иметь те же функции, что и HTML canvas.

Некоторые специальные функции требуют использования модулей, но они могут вам не понадобиться:

Двойная буферизация на самом деле не является частью BGRABitmap, потому что она больше о том, как обрабатывать формы. Для двойной буферизации вы можете использовать TBGRAVirtualScreen, который находится в пакете BGRAControls. Кроме того, двойная буферизация в BGRABitmap работает как любая двойная буферизация. Вам нужно иметь растровое изображение, в котором вы храните свой чертеж и которое вы отображаете с помощью одной инструкции Draw.

Ссылка на модуль BGRABitmapTypes

Установка

После распаковки архива BGRA часто не компилируется в Linux. Попробуйте использовать макрос IDE

pascal
 LCLWidgetType:=gtk2

в таких случаях. Тем не менее, некоторые другие части могут не скомпилироваться.

Простой пример

Создайте проект и откройте bgrabitmappackage.lpk с помощью Lazarus. В окне пакета нажмите "Use > Add to Project". Затем в исходном коде основного файла (основная форма или основная программа) добавьте в раздел uses модуль BGRABitmap. Вам также может понадобиться добавить модуль BGRAGraphics, если вы используете определенные типы, которые унаследованы от LCL.

pascal
Uses 
  Classes, SysUtils, BGRABitmap, BGRABitmapTypes;

Модуль BGRABitmapTypes содержит общие определения, но можно объявить только BGRABitmap для загрузки и отображения растрового изображения. Затем первым шагом является создание объекта TBGRABitmap:

pascal
var
  bmp: TBGRABitmap;
begin
  bmp := TBGRABitmap.Create(100, 100, BGRABlack); // создаем изображение размером 100x100 пикселей с черным фоном

  bmp.FillRect(20, 20, 60, 60, BGRAWhite, dmSet); // рисуем белый квадрат без прозрачности
  bmp.FillRect(40, 40, 80, 80, BGRA(0, 0, 255, 128), dmDrawWithTransparency); // рисуем прозрачный синий квадрат
  ...
end;

Наконец, чтобы показать растровое изображение:

pascal
procedure TFMain.FormPaint(Sender: TObject);
begin
  bmp.Draw(Canvas, 0, 0, True); // рисуем растровое изображение в непрозрачном режиме (быстрее)
end;

Смотрите полный исходный код в tutorial 1.

Понятия

Пиксели в растровом изображении с прозрачностью хранятся с 4 значениями, здесь 4 байта [расположены] в порядке Blue, Green, Red, Alpha. Последний канал определяет уровень непрозрачности (0 означает прозрачный, 255 означает непрозрачный), другие каналы определяют цвет и яркость.

Есть два основных режима рисования. Первый состоит в замене содержимого информации пикселя, второй состоит в смешении уже имеющегося пикселя с новым, который называется альфа-смешением.

Функции BGRABitmap предлагают 4 режима:

Встроенные функции рисования

Рисование с помощью холста

Можно рисовать с помощью объекта Canvas, с обычными функциями, но без сглаживания. Непрозрачность рисования определяется свойством CanvasOpacity. Этот способ медленнее, потому что он требует преобразования изображения. Если вы можете, используйте вместо этого CanvasBGRA, который позволяет [использовать] прозрачность и сглаживание, имея те же имена функций, что и в TCanvas.

Прямой доступ к пикселям

Для доступа к пикселям есть два свойства: Data и Scanline. Первый дает указатель на первый пиксель изображения, а второй дает указатель на первый пиксель данной строки.

pascal
var 
  bmp: TBGRABitmap;
  p: PBGRAPixel;
  n: integer;

begin
  bmp := TBGRABitmap.Create('image.png');
  p := bmp.Data;
  for n := bmp.NbPixels-1 downto 0 do
  begin
    p^.red := not p^.red; // инвертируем красный канал
    inc(p);
  end;
  bmp.InvalidateBitmap;   // обратите внимание, что мы получили доступ к пикселям напрямую
  bmp.Draw(Canvas, 0, 0, True);
  bmp.Free;
end;

Необходимо вызвать функцию InvalidateBitmap, чтобы пересобрать изображение, например, при следующем вызове Draw. Обратите внимание, что порядок строк может быть обратным, в зависимости от свойства LineOrder.

Смотрите также сравнение между direct pixel access methods.

Манипуляции с изображениями

Доступные фильтры (с префиксом Filter):

Некоторые функции не имеют префикса Filter, потому что они не возвращают вновь выделенное изображение. Они изменяют изображение на месте:

Сочетание изображений

PutImage является основной функцией рисования изображений, а BlendImage позволяет комбинировать изображения, как слои программ для редактирования изображений. Доступны следующие режимы:

Эти режимы можно использовать в TBGRALayeredBitmap, что упрощает эту задачу, поскольку BlendImage предоставляет только основные операции смешивания.

Скриншоты

Лицензия

модифицированная LGPL

Автор: Johann ELSASS (Facebook)

Скачать

Последняя версия: https://github.com/bgrabitmap/bgrabitmap/releases

Sourceforge with LazPaint: http://sourceforge.net/projects/lazpaint/files/src/

GitHub: https://github.com/bgrabitmap/


From the Free Pascal wiki, page "BGRABitmap/ru", as it stood on 2022-09-11 after a change by Circular, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 4, last changed by WikiArchive .

Edited on wiki.freepascal.org by 4 people, 2018–2022

From the official wiki's backup of 26 May 2024: who edited this page there, and when. Edits made there after that date were not recorded, and the earlier versions are not shown here; the main page says why.

WhenWhoWhat changed
ZoltanleoCreated page
Zoltanleo
Zoltanleo
Zoltanleo
Zoltanleo
FTurtleDeleted English categories.
Zoltanleo
ZoltanleoAdditional packages
ZoltanleoTutorial
ZoltanleoTutorial
ZoltanleoUsing BGRABitmap
ZoltanleoOverview
ZoltanleoBGRABitmapTypes unit reference
ZoltanleoСсылка на модули BGRABitmapTypes
ZoltanleoInstallation
ZoltanleoSimple example
ZoltanleoСсылка на модули типов BGRABitmap
ZoltanleoПростой пример
ZoltanleoNotions
ZoltanleoIntegrated drawing functions
ZoltanleoDrawing with the Canvas
ZoltanleoРисование с помощью холста
ZoltanleoРисование с помощью холста
ZoltanleoDirect access to pixels
ZoltanleoImage manipulation
ZoltanleoImages combination
ZoltanleoScreenshots
ZoltanleoLicence
ZoltanleoDownload
ZoltanleoСсылка на модуль BGRABitmapTypes
TrevFixed syntax highlighting (minor)
CircularСкачать: remove old link

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.