Difference between revisions of "BGRABitmap/ru"

From Free Pascal wiki
Jump to navigationJump to search
(→‎Скачать: remove old link)
 
(18 intermediate revisions by 2 users not shown)
Line 43: Line 43:
 
Двойная буферизация на самом деле не является частью BGRABitmap, потому что она больше о том, как обрабатывать формы. Для двойной буферизации вы можете использовать TBGRAVirtualScreen, который находится в пакете [[BGRAControls]]. Кроме того, двойная буферизация в BGRABitmap работает как любая двойная буферизация. Вам нужно иметь растровое изображение, в котором вы храните свой чертеж и которое вы отображаете с помощью одной инструкции Draw.
 
Двойная буферизация на самом деле не является частью BGRABitmap, потому что она больше о том, как обрабатывать формы. Для двойной буферизации вы можете использовать TBGRAVirtualScreen, который находится в пакете [[BGRAControls]]. Кроме того, двойная буферизация в BGRABitmap работает как любая двойная буферизация. Вам нужно иметь растровое изображение, в котором вы храните свой чертеж и которое вы отображаете с помощью одной инструкции Draw.
  
====Ссылка на модули BGRABitmapTypes====
+
====Ссылка на модуль BGRABitmapTypes====
  
* [[BGRABitmap Pixel types|Pixel types and functions]]: ''TBGRAPixel'', ''THSLAPixel''...
+
* [[BGRABitmap Pixel types/ru|Pixel types and functions]]: ''TBGRAPixel'', ''THSLAPixel''...
* [[BGRABitmap Types imported from Graphics|Types imported from Graphics]]: ''TColor'', pen style...
+
* [[BGRABitmap Types imported from Graphics|Types imported from Graphics]]: ''TColor'', стиль пера...
 
* [[BGRABitmap Color definitions|Color definitions]]: ''VGAColors'', ''CSSColors''...
 
* [[BGRABitmap Color definitions|Color definitions]]: ''VGAColors'', ''CSSColors''...
* [[BGRABitmap Geometry types|Geometry types]]: ''TPointF'', Bezier curves, ''TArcDef''...
+
* [[BGRABitmap Geometry types|Geometry types]]: ''TPointF'', кривые Берзье, ''TArcDef''...
* [[BGRABitmap Miscellaneous types|Miscellaneous types]]: font, image format, resampling...
+
* [[BGRABitmap Miscellaneous types|Miscellaneous types]]: шрифт, формат изображения, ресэмплинг...
* [[TBGRACustomBitmap and IBGRAScanner]]: the base class for ''TBGRABitmap'' and scanners
+
* [[TBGRACustomBitmap and IBGRAScanner]]: базовый класс для TBGRABitmap и сканеров
  
==== Installation ====
+
==== Установка ====
After unpacking a checkout, BGRA often does not compile in Linux. Try using the IDE Macro
+
После распаковки архива BGRA часто не компилируется в Linux. Попробуйте использовать макрос IDE
  
 
   LCLWidgetType:=gtk2
 
   LCLWidgetType:=gtk2
  
in such cases. Still some other part may not compile.
+
в таких случаях. Тем не менее, некоторые другие части могут не скомпилироваться.
  
====Simple example====
+
====Простой пример====
  
Create a project and open bgrabitmappackage.lpk with Lazarus. In the package window, click on "Use > Add to Project". Then in the source code of the main file (main form or main program), add to uses clause BGRABitmap units. You may need to add BGRAGraphics unit as well if you use certain types that are inherited from the LCL.
+
Создайте проект и откройте bgrabitmappackage.lpk с помощью Lazarus. В окне пакета нажмите "Use > Add to Project". Затем в исходном коде основного файла (основная форма или основная программа) добавьте в раздел uses модуль BGRABitmap. Вам также может понадобиться добавить модуль BGRAGraphics, если вы используете определенные типы, которые унаследованы от LCL.
<syntaxhighlight>
+
<syntaxhighlight lang="pascal">
 
Uses  
 
Uses  
 
   Classes, SysUtils, BGRABitmap, BGRABitmapTypes;
 
   Classes, SysUtils, BGRABitmap, BGRABitmapTypes;
 
</syntaxhighlight>
 
</syntaxhighlight>
  
The unit BGRABitmapTypes contains common definitions, but one can declare only BGRABitmap in order to load and show a bitmap. Then, the first step is to create a [[TBGRABitmap class|TBGRABitmap]] object:
+
Модуль BGRABitmapTypes содержит общие определения, но можно объявить только BGRABitmap для загрузки и отображения растрового изображения. Затем первым шагом является создание объекта [[TBGRABitmap class|TBGRABitmap]]:
<syntaxhighlight>
+
<syntaxhighlight lang="pascal">
 
var
 
var
 
   bmp: TBGRABitmap;
 
   bmp: TBGRABitmap;
 
begin
 
begin
   bmp := TBGRABitmap.Create(100, 100, BGRABlack); // creates a 100x100 pixels image with black background
+
   bmp := TBGRABitmap.Create(100, 100, BGRABlack); // создаем изображение размером 100x100 пикселей с черным фоном
  
   bmp.FillRect(20, 20, 60, 60, BGRAWhite, dmSet); // draws a white square without transparency
+
   bmp.FillRect(20, 20, 60, 60, BGRAWhite, dmSet); // рисуем белый квадрат без прозрачности
   bmp.FillRect(40, 40, 80, 80, BGRA(0, 0, 255, 128), dmDrawWithTransparency); // draws a transparent blue square
+
   bmp.FillRect(40, 40, 80, 80, BGRA(0, 0, 255, 128), dmDrawWithTransparency); // рисуем прозрачный синий квадрат
 
   ...
 
   ...
 
end;
 
end;
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Finally to show the bitmap:
+
Наконец, чтобы показать растровое изображение:
<syntaxhighlight>
+
<syntaxhighlight lang="pascal">
 
procedure TFMain.FormPaint(Sender: TObject);
 
procedure TFMain.FormPaint(Sender: TObject);
 
begin
 
begin
   bmp.Draw(Canvas, 0, 0, True); // draw the bitmap in opaque mode (faster)
+
   bmp.Draw(Canvas, 0, 0, True); // рисуем растровое изображение в непрозрачном режиме (быстрее)
 
end;
 
end;
 
</syntaxhighlight>
 
</syntaxhighlight>
  
See a full source code in [[BGRABitmap tutorial 1|tutorial 1]].
+
Смотрите полный исходный код в [[BGRABitmap tutorial 1|tutorial 1]].
  
===Notions===
+
===Понятия===
  
Pixels in a bitmap with transparency are stored with 4 values, here 4 bytes in the order Blue, Green, Red, Alpha. The last channel defines the level of opacity (0 signifies transparent, 255 signifies opaque), other channels define color and luminosity.
+
Пиксели в растровом изображении с прозрачностью хранятся с 4 значениями, здесь 4 байта [расположены] в порядке Blue, Green, Red, Alpha. Последний канал определяет уровень непрозрачности (0 означает прозрачный, 255 означает непрозрачный), другие каналы определяют цвет и яркость.
  
There are basically two drawing modes. The first consists in replacing the content of the pixel information, the second consists in blending the pixel already here with the new one, which is called alpha blending.
+
Есть два основных режима рисования. Первый состоит в замене содержимого информации пикселя, второй состоит в смешении уже имеющегося пикселя с новым, который называется альфа-смешением.
  
BGRABitmap functions propose 4 modes:
+
Функции BGRABitmap предлагают 4 режима:
* dmSet : replaces the four bytes of the drawn pixel, transparency not handled
+
* dmSet : заменяет четыре байта нарисованного пикселя, прозрачность не обрабатывается.
* dmDrawWithTransparency : draws with alphablending and with gamma correction (see below)
+
* dmDrawWithTransparency : рисует с альфа-каналом и с гамма-коррекцией (см. ниже).
* dmFastBlend or dmLinearBlend : draws with alphablending but without gamma correction (faster but entails color distortions with low intensities).
+
* dmFastBlend или dmLinearBlend : рисует с альфа-каналом, но без гамма-коррекции (быстрее, но влечет за собой искажения цвета с низкой интенсивностью).
* dmXor : apply Xor to each component including alpha (if you want to invert color but keep alpha, use BGRA(255,255,255,0) )
+
* dmXor : применяет Xor к каждому компоненту, включая альфа (если вы хотите инвертировать цвет, но сохранить альфа, используйте BGRA (255,255,255,0)).
  
===Integrated drawing functions===
+
===Встроенные функции рисования===
  
* draw/erase pixels
+
* рисование/стирание пикселей
* draw a line with or without antialiasing
+
* рисование линии с или без сглаживания
* floating point coordinates
+
* координаты с плавающей точкой
* floating point pen width
+
* ширина пера с плавающей точкой
* rectangle (frame or fill)
+
* прямоугольник (рамка или заливка)
* ellipse and polygons with antialiasing
+
* эллипс и многоугольники со сглаживанием
* spline computation (rounded curve)
+
* расчет сплайна (скругленная кривая)
* simple fill (Floodfill) or progressive fill
+
* простая заливка (Floodfill) или прогрессивная заливка
* color gradient rendering (linear, radial...)
+
* отрисовка цветового градиента (линейная, радиальная ...)
* round rectangles
+
* скругленные прямоугольники
* texts with transparency
+
* тексты с прозрачностью
  
===Drawing with the Canvas===
+
===Рисование с помощью холста===
  
It is possible to draw with a ''Canvas'' object, with usual functions but without antialiasing. Opacity of drawing is defined by the ''CanvasOpacity'' property. This way is slower because it needs image transformations. If you can, use CanvasBGRA instead, which allows transparency and antialiasing while having the same function names as with TCanvas.
+
Можно рисовать с помощью объекта ''Canvas'', с обычными функциями, но без сглаживания. Непрозрачность рисования определяется свойством ''CanvasOpacity''. Этот способ медленнее, потому что он требует преобразования изображения. Если вы можете, используйте вместо этого ''CanvasBGRA'', который позволяет [использовать] прозрачность и сглаживание, имея те же имена функций, что и в TCanvas.
  
===Direct access to pixels===
+
===Прямой доступ к пикселям===
  
To access pixels, there are two properties, ''Data'' and ''Scanline''. The first gives a pointer to the first pixel of the image, and the second gives a pointer to the first pixel of a given line.
+
Для доступа к пикселям есть два свойства: ''Data'' и ''Scanline''. Первый дает указатель на первый пиксель изображения, а второй дает указатель на первый пиксель данной строки.
  
<syntaxhighlight>
+
<syntaxhighlight lang="pascal">
 
var  
 
var  
 
   bmp: TBGRABitmap;
 
   bmp: TBGRABitmap;
Line 135: Line 135:
 
   for n := bmp.NbPixels-1 downto 0 do
 
   for n := bmp.NbPixels-1 downto 0 do
 
   begin
 
   begin
     p^.red := not p^.red; // invert red channel
+
     p^.red := not p^.red; // инвертируем красный канал
 
     inc(p);
 
     inc(p);
 
   end;
 
   end;
   bmp.InvalidateBitmap;  // note that we have accessed pixels directly
+
   bmp.InvalidateBitmap;  // обратите внимание, что мы получили доступ к пикселям напрямую
 
   bmp.Draw(Canvas, 0, 0, True);
 
   bmp.Draw(Canvas, 0, 0, True);
 
   bmp.Free;
 
   bmp.Free;
Line 144: Line 144:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
It is necessary to call the function ''InvalidateBitmap'' to rebuild the image in a next call to ''Draw''' for example. Notice that the line order can be reverse, depending on the ''LineOrder'' property.
+
Необходимо вызвать функцию ''InvalidateBitmap'', чтобы пересобрать изображение, например, при следующем вызове ''Draw''. Обратите внимание, что порядок строк может быть обратным, в зависимости от свойства ''LineOrder''.
  
See also the comparison between [[Fast direct pixel access|direct pixel access methods]].
+
Смотрите также сравнение между [[Fast direct pixel access|direct pixel access methods]].
  
=== Image manipulation ===
+
=== Манипуляции с изображениями ===
  
Available filters (prefixed with Filter) :
+
Доступные фильтры (с префиксом Filter):
  
* Radial blur : non directional blur
+
* Radial blur : ненаправленное размытие
* Motion blur : directional blur
+
* Motion blur : направленное размытие
* Custom blur : blur according to a mask
+
* Custom blur : размытие по маске
  
* Median : computes the median of colors around each pixel, which softens corners
+
* Median : вычисляет медиану цветов вокруг каждого пикселя, что смягчает углы
* Pixelate : simplifies the image with rectangles of the same color
+
* Pixelate : упрощает изображение с прямоугольниками одного цвета
* Smooth : soften whole image, complementary to Sharpen
+
* Smooth : смягчает все изображение, дополнительно к [фильтру] Sharpen
* Sharpen : makes contours more accute, complementary to Smooth
+
* Sharpen :делает контуры более четкими, дополнительно к [фильтру] Smooth
  
* Contour : draws contours on a white background (like a pencil drawing)
+
* Contour : рисует контуры на белом фоне (как карандашный рисунок)
* Emboss : draws contours with shadow
+
* Emboss : рисует контуры с тенью
* EmbossHighlight : draws contours of a selection defined with grayscale
+
* EmbossHighlight : рисует контуры выделения, определенного в оттенках серого
  
* Grayscale : converts colors to grayscale with gamma correction
+
* Grayscale : преобразует цвета в оттенки серого с гамма-коррекцией
* Normalize : uses whole range of color luminosity
+
* Normalize : использует весь спектр яркости цвета
  
* Rotate : rotation of the image around a point
+
* Rotate : вращение изображения вокруг точки
* Sphere : distorts the image to make it look like projected on a sphere
+
* Sphere : искажает изображение, чтобы оно выглядело, как проецируемое на сферу
* Twirl : distorts the image with a twirl effect
+
* Twirl : искажает изображение с эффектом закручивания
* Cylinder : distorts the image to make it look like projected on a cylinder
+
* Cylinder : искажает изображение, чтобы оно выглядело, как проецируемое на цилиндр
* Plane : computes a high precision projection on a horizontal plane. This is quite slow.
+
* Plane : вычисляет проекцию с высокой точностью на горизонтальную плоскость. Это довольно медленно.
* SmartZoom3 : resizes the image x3 and detects borders, to have a useful zoom with ancient games sprites
+
* SmartZoom3 : изменяет размер изображения х3 и определяет границы, чтобы иметь полезный зум с древними игровыми спрайтами
  
Some functions are not prefixed with Filter, because they do not return a newly allocated image. They modify the image in-place :
+
Некоторые функции не имеют префикса Filter, потому что они не возвращают вновь выделенное изображение. Они изменяют изображение на месте:
* VerticalFlip : flips the image vertically
+
* VerticalFlip : переворачивает изображение по вертикали
* HorizontalFlip : flips the image horizontally
+
* HorizontalFlip : переворачивает изображение по горизонтали
* Negative : inverse of colors
+
* Negative : инвертирует цвета
* LinearNegative : inverse without gamma correction
+
* LinearNegative : инверсия без гамма-коррекции
* SwapRedBlue : swap red and blue channels (to convert between BGRA and RGBA)
+
* SwapRedBlue : меняет местами красный и синий каналы (для конвертации между BGRA и RGBA)
* ConvertToLinearRGB : to convert from sRGB to RGB. Note the format used by BGRABitmap is sRGB when using
+
* ConvertToLinearRGB : конвертирует из sRGB в RGB. Обратите внимание, что формат, используемый BGRABitmap - '''sRGB''' при использовании ''dmDrawWithTransparency'' и '''RGB''' при использовании ''dmLinearBlend''.
dmDrawWithTransparency and RGB when using dmLinearBlend.
+
* ConvertFromLinearRGB : конвертирует из RGB в sRGB.
* ConvertFromLinearRGB : convert from RGB to sRGB.
 
  
=== Images combination ===
+
=== Сочетание изображений ===
  
PutImage is the basic image drawing function and BlendImage allows to combine images, like layers of image editing softwares. Available modes are the following:
+
PutImage является основной функцией рисования изображений, а BlendImage позволяет комбинировать изображения, как слои программ для редактирования изображений. Доступны следующие режимы:
*LinearBlend : simple superimposition without gamma correction (equivalent to dmFastBlend)
+
*LinearBlend : простое наложение без гамма-коррекции (эквивалент dmFastBlend)
*Transparent : superimposition with gamma correction
+
*Transparent : наложение с гамма-коррекцией
*Multiply : multiplication of color values (with gamma correction)
+
*Multiply : умножение значений цвета (с гамма-коррекцией)
*LinearMultiply : multiplication of color values (without gamma correction)
+
*LinearMultiply : умножение значений цвета (без гамма-коррекции)
*Additive : addition of color values (with gamma correction)
+
*Additive : добавление значений цвета (с гамма-коррекцией)
*LinearAdd : addition of color values (without gamma correction)
+
*LinearAdd : добавление значений цвета (без гамма-коррекции)
*Difference : difference of color values (with gamma correction)
+
*Difference : разница значений цвета (с гамма-коррекцией)
*LinearDifference : difference of color values (without gamma correction)
+
*LinearDifference : разница значений цвета (без гамма-коррекции)
*Negation : makes common colors disappear (with gamma correction)
+
*Negation : устранение общих цветов (с гамма-коррекцией)
*LinearNegation : makes common colors disappear  (without gamma correction)
+
*LinearNegation : исчезновение общих цвета (без гамма-коррекции)
*Reflect, Glow : for light effects
+
*Reflect, Glow : для световых эффектов
*ColorBurn, ColorDodge, Overlay, Screen : misc. filters
+
*ColorBurn, ColorDodge, Overlay, Screen : разные фильтры
*Lighten : keeps the lightest color values
+
*Lighten : сохраняет самые светлые цветовые значения
*Darken : keeps the darkest color values
+
*Darken : сохраняет самые темные значения цвета
*Xor : exclusive or of color values
+
*Xor : исключающее ИЛИ цветовых значений
  
These modes can be used in TBGRALayeredBitmap, which makes it easier because BlendImage only provides the basic blending operations.
+
Эти режимы можно использовать в TBGRALayeredBitmap, что упрощает эту задачу, поскольку BlendImage предоставляет только основные операции смешивания.
  
=== Screenshots ===
+
=== Скриншоты ===
[[Image:Lazpaint_contour.png]]
+
* [[Image:Lazpaint_contour.png]]
[[Image:Lazpaint curve redim.png]]
+
<br />
[[Image:Bgra_wirecube.png]]
+
* [[Image:Lazpaint curve redim.png]]
[[Image:Bgra_chessboard.jpg]]
+
<br />
 +
* [[Image:Bgra_wirecube.png]]
 +
<br />
 +
* [[Image:Bgra_chessboard.jpg]]
 +
<br />
  
===Licence===
+
===Лицензия===
modified LGPL
+
модифицированная LGPL
  
Author: [http://johann-elsass.net Johann ELSASS] ([http://www.facebook.com/johann.elsass.1 Facebook])
+
Автор: [http://johann-elsass.net Johann ELSASS] ([http://www.facebook.com/johann.elsass.1 Facebook])
  
===Download===
+
===Скачать===
Latest version: https://github.com/bgrabitmap/bgrabitmap/releases
+
Последняя версия: https://github.com/bgrabitmap/bgrabitmap/releases
  
 
Sourceforge with [[LazPaint|LazPaint]]: http://sourceforge.net/projects/lazpaint/files/src/
 
Sourceforge with [[LazPaint|LazPaint]]: http://sourceforge.net/projects/lazpaint/files/src/
  
 
GitHub: https://github.com/bgrabitmap/
 
GitHub: https://github.com/bgrabitmap/
 
Old link : http://lazarus.johann-elsass.net/
 

Latest revision as of 13:26, 11 September 2022

Deutsch (de) English (en) español (es) français (fr) русский (ru) 中文(中国大陆)‎ (zh_CN)

bgrabitmap logo.jpg

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

Описание

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

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

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

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

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

  • BGLControls: предоставляет TBGLVirtualScreen для рисования на поверхности OpenGL. Этот пакет находится в архиве BGRABitmap.
  • BGRAControls: ярлыки с тенями, красивыми кнопками, фигурами и т.д.
  • uE Controls: датчики, светодиоды и т.д.
  • Material Design: Компоненты пользовательского интерфейса, основанные на принципах разработки материалов Google.
  • BGRAControlsFX[1]: элементы управления рендеринга на поверхности OpenGL.

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

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

Руководства

Обзор

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

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

  • TBGRAMultishapeFiller иметь сглаженные соединения многоугольников в BGRAPolygon
  • TBGRATextEffect в BGRATextFX
  • 2D преобразования находятся в BGRATransform
  • TBGRAScene3D в BGRAScene3D
  • Если вам нужны слои, BGRALayers предоставляет TBGRALayeredBitmap

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

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

Установка

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

 LCLWidgetType:=gtk2

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

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

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

Uses 
  Classes, SysUtils, BGRABitmap, BGRABitmapTypes;

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

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;

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

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 режима:

  • dmSet : заменяет четыре байта нарисованного пикселя, прозрачность не обрабатывается.
  • dmDrawWithTransparency : рисует с альфа-каналом и с гамма-коррекцией (см. ниже).
  • dmFastBlend или dmLinearBlend : рисует с альфа-каналом, но без гамма-коррекции (быстрее, но влечет за собой искажения цвета с низкой интенсивностью).
  • dmXor : применяет Xor к каждому компоненту, включая альфа (если вы хотите инвертировать цвет, но сохранить альфа, используйте BGRA (255,255,255,0)).

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

  • рисование/стирание пикселей
  • рисование линии с или без сглаживания
  • координаты с плавающей точкой
  • ширина пера с плавающей точкой
  • прямоугольник (рамка или заливка)
  • эллипс и многоугольники со сглаживанием
  • расчет сплайна (скругленная кривая)
  • простая заливка (Floodfill) или прогрессивная заливка
  • отрисовка цветового градиента (линейная, радиальная ...)
  • скругленные прямоугольники
  • тексты с прозрачностью

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

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

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

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

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):

  • Radial blur : ненаправленное размытие
  • Motion blur : направленное размытие
  • Custom blur : размытие по маске
  • Median : вычисляет медиану цветов вокруг каждого пикселя, что смягчает углы
  • Pixelate : упрощает изображение с прямоугольниками одного цвета
  • Smooth : смягчает все изображение, дополнительно к [фильтру] Sharpen
  • Sharpen :делает контуры более четкими, дополнительно к [фильтру] Smooth
  • Contour : рисует контуры на белом фоне (как карандашный рисунок)
  • Emboss : рисует контуры с тенью
  • EmbossHighlight : рисует контуры выделения, определенного в оттенках серого
  • Grayscale : преобразует цвета в оттенки серого с гамма-коррекцией
  • Normalize : использует весь спектр яркости цвета
  • Rotate : вращение изображения вокруг точки
  • Sphere : искажает изображение, чтобы оно выглядело, как проецируемое на сферу
  • Twirl : искажает изображение с эффектом закручивания
  • Cylinder : искажает изображение, чтобы оно выглядело, как проецируемое на цилиндр
  • Plane : вычисляет проекцию с высокой точностью на горизонтальную плоскость. Это довольно медленно.
  • SmartZoom3 : изменяет размер изображения х3 и определяет границы, чтобы иметь полезный зум с древними игровыми спрайтами

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

  • VerticalFlip : переворачивает изображение по вертикали
  • HorizontalFlip : переворачивает изображение по горизонтали
  • Negative : инвертирует цвета
  • LinearNegative : инверсия без гамма-коррекции
  • SwapRedBlue : меняет местами красный и синий каналы (для конвертации между BGRA и RGBA)
  • ConvertToLinearRGB : конвертирует из sRGB в RGB. Обратите внимание, что формат, используемый BGRABitmap - sRGB при использовании dmDrawWithTransparency и RGB при использовании dmLinearBlend.
  • ConvertFromLinearRGB : конвертирует из RGB в sRGB.

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

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

  • LinearBlend : простое наложение без гамма-коррекции (эквивалент dmFastBlend)
  • Transparent : наложение с гамма-коррекцией
  • Multiply : умножение значений цвета (с гамма-коррекцией)
  • LinearMultiply : умножение значений цвета (без гамма-коррекции)
  • Additive : добавление значений цвета (с гамма-коррекцией)
  • LinearAdd : добавление значений цвета (без гамма-коррекции)
  • Difference : разница значений цвета (с гамма-коррекцией)
  • LinearDifference : разница значений цвета (без гамма-коррекции)
  • Negation : устранение общих цветов (с гамма-коррекцией)
  • LinearNegation : исчезновение общих цвета (без гамма-коррекции)
  • Reflect, Glow : для световых эффектов
  • ColorBurn, ColorDodge, Overlay, Screen : разные фильтры
  • Lighten : сохраняет самые светлые цветовые значения
  • Darken : сохраняет самые темные значения цвета
  • Xor : исключающее ИЛИ цветовых значений

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

Скриншоты

  • Lazpaint contour.png


  • Lazpaint curve redim.png


  • Bgra wirecube.png


  • Bgra chessboard.jpg


Лицензия

модифицированная 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/