Difference between revisions of "BGRABitmap Pixel types/ru"
From Free Pascal wiki
Jump to navigationJump to searchm (Fixed template loop) |
|||
(One intermediate revision by one other user not shown) | |||
Line 1: | Line 1: | ||
− | {{ | + | {{LanguageBar}} |
Список типов пикселей и функций библиотеки [[BGRABitmap]]. Они предоставляются модулем ''BGRABitmapTypes''. | Список типов пикселей и функций библиотеки [[BGRABitmap]]. Они предоставляются модулем ''BGRABitmapTypes''. | ||
Line 143: | Line 143: | ||
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: white;">'''function''' ExpandedToHSLA('''const''' ec: TExpandedPixel): THSLAPixel;</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: white;">'''function''' ExpandedToHSLA('''const''' ec: TExpandedPixel): THSLAPixel;</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Преобразует пиксель из гамма-развернутого RGB в цветовое пространство HSL</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">'''function''' HSLAToExpanded('''const''' c: THSLAPixel): TExpandedPixel;</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">'''function''' HSLAToExpanded('''const''' c: THSLAPixel): TExpandedPixel;</td></tr> | ||
Line 203: | Line 203: | ||
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: white;">''dmSet'',</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: white;">''dmSet'',</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Пиксель заменяется</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''dmSetExceptTransparent'',</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''dmSetExceptTransparent'',</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Пиксель заменяется, если пиксель имеет значение альфа 255</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: white;">''dmLinearBlend'',</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: white;">''dmLinearBlend'',</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Пиксель смешивается с другим в соответствии с альфа-значениями, однако гамма-коррекция не применяется. Другими словами, цветовое пространство предполагается линейным</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''dmDrawWithTransparency'',</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''dmDrawWithTransparency'',</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Пиксель смешивается с другим в соответствии с альфа-значениями, и применяется гамма-коррекция. Другими словами, цветовое пространство предполагается sRGB</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: white;">''dmXor'');</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: white;">''dmXor'');</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Значения всех каналов объединяются [посредством] Xor. Это полезно для вычисления двоичной разницы, однако не имеет смысла отображать на экране</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''dmFastBlend'' = dmLinearBlend;</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''dmFastBlend'' = dmLinearBlend;</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Псевдоним для линейного наложения, потому что он быстрее, чем наложение с гамма-коррекцией</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr style="background: white;"><td colspan="3">''TBlendOperation'' = (</td></tr> | <tr style="background: white;"><td colspan="3">''TBlendOperation'' = (</td></tr> | ||
− | <tr style="background: white;"><td width="10%"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;" colspan="2"> | + | <tr style="background: white;"><td width="10%"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;" colspan="2">Расширенные режимы наложения. См. [http://www.brighthub.com/multimedia/photography/articles/18301.aspx Paint.NET blend modes] и [http://www.pegtop.net/delphi/articles/blendmodes/ Formulas]. Смешивание слоев имеет два этапа. Первый - применяются операции смешивания, перечисленные ниже, а второй - фактическое слияние цветов.</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''boLinearBlend'',</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''boLinearBlend'',</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Простое смешивание, за исключением того, что оно вызывает линейное объединение, поэтому оно эквивалентно ''dmLinearBlend''</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: white;">''boTransparent'',</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: white;">''boTransparent'',</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Простое смешивание. Оно эквивалентно ''dmLinearBlend'' или ''dmDrawWithTransparency''</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''boLighten'', boScreen, boAdditive, boLinearAdd, boColorDodge, boDivide, boNiceGlow, boSoftLight, boHardLight,</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''boLighten'', boScreen, boAdditive, boLinearAdd, boColorDodge, boDivide, boNiceGlow, boSoftLight, boHardLight,</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Режимы смешивания яркости (имеют тенденцию увеличивать свечение)</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: white;">''boGlow'', boReflect, boOverlay, boDarkOverlay, boDarken, boMultiply, boColorBurn,</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: white;">''boGlow'', boReflect, boOverlay, boDarkOverlay, boDarken, boMultiply, boColorBurn,</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Маскировка режимов наложения (имеет тенденцию уменьшать свечение)</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''boDifference'', boLinearDifference, boExclusion, boLinearExclusion, boSubtract, boLinearSubtract, boSubtractInverse, boLinearSubtractInverse,</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''boDifference'', boLinearDifference, boExclusion, boLinearExclusion, boSubtract, boLinearSubtract, boSubtractInverse, boLinearSubtractInverse,</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Режимы смешивания различий</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: white;">''boNegation'', boLinearNegation,</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: white;">''boNegation'', boLinearNegation,</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Режимы наложения негатива</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''boXor'');</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''boXor'');</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Xor | + | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Режим смешивания Xor. Он немного отличается от ''dm Xor'', поскольку альфа-значение используется, как и в других режимах наложения.</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: white;">''boGlowMask'' = boGlow;</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: white;">''boGlowMask'' = boGlow;</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Псевдоним свечения, который выражает, что этот режим смешивания маскирует часть, где верхний слой черный</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''boLinearMultiply'' = boMultiply;</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''boLinearMultiply'' = boMultiply;</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Псевдоним, потому что линейные или нелинейные режимы умножения идентичны</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: white;">''boNonLinearOverlay'' = boDarkOverlay;</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: white;">''boNonLinearOverlay'' = boDarkOverlay;</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Псевдоним, чтобы выразить это темное наложение - это просто наложение с гамма-коррекцией</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''BlendOperationStr'' : '''array'''[TBlendOperation] '''of''' '''string'''</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''BlendOperationStr'' : '''array'''[TBlendOperation] '''of''' '''string'''</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Строковые константы для режимов наложения</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: white;">'''function''' StrToBlendOperation(str: '''string'''): TBlendOperation;</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: white;">'''function''' StrToBlendOperation(str: '''string'''): TBlendOperation;</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Возвращает режим наложения, выраженный строкой</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr style="background: #f0f0ff;"><td colspan="3">''TChannel'' = (cRed, cGreen, cBlue, cAlpha);</td></tr> | <tr style="background: #f0f0ff;"><td colspan="3">''TChannel'' = (cRed, cGreen, cBlue, cAlpha);</td></tr> | ||
− | <tr style="background: #f0f0ff;"><td width="10%"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;" colspan="2"> | + | <tr style="background: #f0f0ff;"><td width="10%"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;" colspan="2">Возможные каналы в растровом изображении с использованием любого цветового пространства RGBA</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: white;">''TChannels'' = set '''of''' TChannel;</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: white;">''TChannels'' = set '''of''' TChannel;</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Сочетание каналов</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr style="background: #f0f0ff;"><td colspan="3">''TAlphaChannelPaletteOption'' = (</td></tr> | <tr style="background: #f0f0ff;"><td colspan="3">''TAlphaChannelPaletteOption'' = (</td></tr> | ||
− | <tr style="background: #f0f0ff;"><td width="10%"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;" colspan="2"> | + | <tr style="background: #f0f0ff;"><td width="10%"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;" colspan="2">Определяет, как палитра обрабатывает альфа-канал</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: white;">''acIgnore'',</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: white;">''acIgnore'',</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Альфа-канал игнорируется. Считается, что альфа-канал хранится в другом месте.</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''acTransparentEntry'',</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''acTransparentEntry'',</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Одна точка входа выделяется полностью прозрачным цветом</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: white;">''acFullChannelInPalette'');</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: white;">''acFullChannelInPalette'');</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Альфа-канал полностью встроен в палитру, поэтому цвет определяется четырьмя каналами RGBA.</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr style="background: #f0f0ff;"><td colspan="3">''TDitheringAlgorithm'' = (</td></tr> | <tr style="background: #f0f0ff;"><td colspan="3">''TDitheringAlgorithm'' = (</td></tr> | ||
− | <tr style="background: #f0f0ff;"><td width="10%"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;" colspan="2"> | + | <tr style="background: #f0f0ff;"><td width="10%"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;" colspan="2">Алгоритмы сглаживания, которые определяют, как обрабатывать цвета, которые не найдены в палитре</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: white;">''daNearestNeighbor'',</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: white;">''daNearestNeighbor'',</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: white;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Ближайший цвет должен использоваться вместо</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
<tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''daFloydSteinberg'');</td></tr> | <tr><td width="10%"></td><td colspan="2" style="background: #f0f0ff;">''daFloydSteinberg'');</td></tr> | ||
− | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;"> | + | <tr><td width="10%"></td><td width="10%" style="background: #f0f0ff;"></td><td style="border: 1px solid #e0e0a0; background: #ffffe4;">Можно использовать ближайший цвет, но можно использовать и другой цвет для компенсации ошибки, следуя алгоритму Флойда-Стейнберга</td></tr> |
<tr style="height: 8px;"><td colspan="3"></td></tr> | <tr style="height: 8px;"><td colspan="3"></td></tr> | ||
</table> | </table> | ||
[[Category: BGRABitmap]] | [[Category: BGRABitmap]] |
Latest revision as of 01:02, 16 January 2020
│ English (en) │ русский (ru) │
Список типов пикселей и функций библиотеки BGRABitmap. Они предоставляются модулем BGRABitmapTypes.
Типы пикселей и функции
PBGRAPixel = ^TBGRAPixel; | ||
Указатель для прямого доступа к пикселям. Данные хранятся в виде последовательности TBGRAPixel. См. BGRABitmap tutorial 4 | ||
TBGRAPixel = packed record blue, green, red, alpha: byte; | ||
Каждый пиксель представляет собой последовательность из 4 байтов, содержащую синий, зеленый, красный и альфа-канал. Диапазон значений от 0 до 255, цвет в цветовом пространстве sRGB. Альфа-значение: 0 - прозрачно, 255 - непрозрачно. В растровых данных, когда пиксель полностью прозрачен, значения RGB должны быть установлены на ноль. | ||
function BGRA(red, green, blue, alpha: byte): TBGRAPixel; overload; inline; | ||
Создает пиксель с заданными значениями RGBA | ||
function BGRA(red, green, blue: byte): TBGRAPixel; overload; inline; | ||
Создает непрозрачный пиксель с заданными значениями RGB | ||
operator = (const c1, c2: TBGRAPixel): boolean; inline; | ||
Проверяет, равны ли два пикселя. Если они оба прозрачны, значения RGB игнорируются | ||
function GetIntensity(c: TBGRAPixel): word; inline; | ||
Возвращает интенсивность пикселя. Интенсивность - это максимальное значение, достигаемое любым компонентом | ||
function SetIntensity(c: TBGRAPixel; intensity: word): TBGRAPixel; | ||
Устанавливает интенсивность пикселя | ||
function GetLightness(c: TBGRAPixel): word; | ||
Возвращает свечение пикселя. Свечение - это воспринимаемая яркость, 0 - черный, а 65535 - белый. | ||
function SetLightness(c: TBGRAPixel; lightness: word): TBGRAPixel; | ||
Возвращает свечение пикселя | ||
function ApplyLightnessFast(color: TBGRAPixel; lightness: word): TBGRAPixel; inline; | ||
Быстро устанавливает свечение, уменьшая в сторону черного, если lightness меньше 32768, и уменьшая в сторону белого, если lightness больше 32768 | ||
function ApplyIntensityFast(color: TBGRAPixel; lightness: longword): TBGRAPixel; | ||
Быстро устанавливает интенсивность, уменьшая в сторону черного, если lightness меньше 32768, и умножая все составляющие, если lightness больше 32768. В случае насыщения, она исчезает в сторону белого | ||
function CombineLightness(lightness1,lightness2: Int32or64): Int32or64; | ||
Объединяет две яркости вместе. Значение 32768 является нейтральным. Результат может превысить 65535 | ||
function BGRAToGrayscale(c: TBGRAPixel): TBGRAPixel; | ||
Преобразует цвет в оттенки серого | ||
function GrayscaleToBGRA(lightness: word): TBGRAPixel; | ||
Создает серый цвет с заданной яркостью | ||
function MergeBGRA(c1, c2: TBGRAPixel): TBGRAPixel; overload; | ||
Слияние двух цветов без гамма-коррекции | ||
function MergeBGRA(c1: TBGRAPixel; weight1: integer; c2: TBGRAPixel; weight2: integer): TBGRAPixel; overload; | ||
Слияние двух цветов без гамма-коррекции. weight1 и weight2 указывает на вес цветового барицентра | ||
function MergeBGRAWithGammaCorrection(c1: TBGRAPixel; weight1: byte; c2: TBGRAPixel; weight2: byte): TBGRAPixel; | ||
Слияние двух цветов с гамма-коррекцией. weight1 и weight2 указывает на вес цветового барицентра | ||
function ColorToBGRA(color: TColor): TBGRAPixel; overload; | ||
Преобразует значение TColor в непрозрачный пиксель | ||
function ColorToBGRA(color: TColor; opacity: byte): TBGRAPixel; overload; | ||
Преобразует значение TColor в пиксель с заданной непрозрачностью | ||
function BGRAToColor(c: TBGRAPixel): TColor; | ||
Преобразует пиксель в значение TColor, отбрасывая значение альфа | ||
function FPColorToBGRA(AValue: TFPColor): TBGRAPixel; | ||
Преобразует значение TFPColor в пиксель. Обратите внимание, что даже если TFPColor имеет 16-битные значения, они не считаются расширенной гаммой | ||
function BGRAToFPColor(AValue: TBGRAPixel): TFPColor; inline; | ||
Преобразует пиксель в TFPColor | ||
function BGRAWordDiff(c1, c2: TBGRAPixel): word; | ||
Вычисляет разницу (с гамма-коррекцией) между двумя пикселями с учетом всех размеров, включая прозрачность. Результат варьирует от 0 до 65535 | ||
function BGRADiff(c1, c2: TBGRAPixel): byte; | ||
Вычисляет разницу (с гамма-коррекцией) между двумя пикселями с учетом всех размеров, включая прозрачность. Результат варьирует от 0 до 255 | ||
ArrayOfTBGRAPixel = array of TBGRAPixel; | ||
Массив пикселей | ||
function MergeBGRA(const colors: array of TBGRAPixel): TBGRAPixel; overload; | ||
Объединяет данные цвета без гамма-коррекции | ||
TExpandedPixel = packed record red, green, blue, alpha: word; | ||
Хранит гамму расширенного цвета RGB. Диапазон значений от 0 до 65535 | ||
function GammaExpansion(c: TBGRAPixel): TExpandedPixel; inline; | ||
Преобразует пиксель из sRGB в расширенную гамму RGB | ||
function GammaCompression(const ec: TExpandedPixel): TBGRAPixel; inline; | ||
Преобразует пиксель из гамма-развернутого RGB в sRGB | ||
function GammaCompression(red,green,blue,alpha: word): TBGRAPixel; inline; | ||
Преобразует пиксель из гамма-развернутого RGB в sRGB | ||
function GetIntensity(const c: TExpandedPixel): word; inline; | ||
Возвращает интенсивность гамма-расширенного пикселя. Интенсивность - это максимальное значение, достигаемое любым компонентом | ||
function SetIntensity(const c: TExpandedPixel; intensity: word): TExpandedPixel; | ||
Устанавливает интенсивность гамма-расширенного пикселя | ||
function GetLightness(const c: TExpandedPixel): word; inline; | ||
Возвращает яркость гамма-расширенного пикселя. lightness - это воспринимаемая яркость, 0 - черный, а 65535 - белый. | ||
function SetLightness(const c: TExpandedPixel; lightness: word): TExpandedPixel; | ||
Устанавливает яркость гамма-развернутого пикселя | ||
function SetLightness(const c: TExpandedPixel; lightness: word; curLightness: word): TExpandedPixel; | ||
Устанавливает яркость расширенного гамма-пикселя при условии, что вы уже знаете текущее значение яркости curlightness. Это немного быстрее, чем предыдущая функция | ||
function ColorImportance(ec: TExpandedPixel): word; | ||
Возвращает важность цвета. Это похоже на насыщенность в цветовом пространстве HSL, за исключением того, что это гамма-коррекция. Значение ноль обозначает черный/серый/белый, а значение 65535 обозначает яркий цвет | ||
function MergeBGRA(ec1, ec2: TExpandedPixel): TExpandedPixel; overload; | ||
Объединение двух расширенных гамма-пикселей (с учетом коррекции гаммы) | ||
function ExpandedDiff(ec1, ec2: TExpandedPixel): word; | ||
Вычисляет разницу (с гамма-коррекцией) между двумя пикселями с учетом всех размеров, включая прозрачность. Результат варьирует от 0 до 65535 | ||
THSLAPixel = packed record | ||
Цвет пикселя определяется в цветовом пространстве HSL. Диапазон значений от 0 до 65535 | ||
hue: word; | ||
Оттенок пикселя. Экстремальные значения 0 и 65535 - красные | ||
saturation: word; | ||
Насыщенность цвета. 0 - серый, а 65535 - самый яркий цвет | ||
lightness: word; | ||
Яркость цвета. 0 черный, 32768 нормальный, 65535 белый | ||
alpha: word; | ||
Непрозрачность пикселя. 0 прозрачный и 65535 непрозрачный | ||
function HSLA(hue, saturation, lightness, alpha: word): THSLAPixel; overload; inline; | ||
Создает пиксель с заданными значениями HSLA, где A обозначает альфа | ||
function HSLA(hue, saturation, lightness: word): THSLAPixel; overload; inline; | ||
Создает непрозрачный пиксель с заданными значениями HSL | ||
function BGRAToHSLA(c: TBGRAPixel): THSLAPixel; | ||
Преобразует пиксель из sRGB в цветовое пространство HSL | ||
function ExpandedToHSLA(const ec: TExpandedPixel): THSLAPixel; | ||
Преобразует пиксель из гамма-развернутого RGB в цветовое пространство HSL | ||
function HSLAToExpanded(const c: THSLAPixel): TExpandedPixel; | ||
Преобразует пиксель из гамма-развернутого RGB в цветовое пространство HSL | ||
function HSLAToBGRA(const c: THSLAPixel): TBGRAPixel; | ||
Преобразует пиксель из цветового пространства HSL в sRGB | ||
function HueDiff(h1, h2: word): word; | ||
Вычисляет разницу оттенков | ||
function GetHue(ec: TExpandedPixel): word; | ||
Возвращает оттенок расширенного гамма-пикселя | ||
TGSBAPixel = THSLAPixel; | ||
Цвет пикселя определяется в исправленном цветовом пространстве HSL. G обозначает исправленный оттенок, а B обозначает фактическую яркость. Диапазон значений от 0 до 65535 | ||
function BGRAToGSBA(c: TBGRAPixel): TGSBAPixel; | ||
Преобразует пиксель из sRGB в корректное цветовое пространство HSL | ||
function ExpandedToGSBA(ec: TExpandedPixel): TGSBAPixel; | ||
Преобразует пиксель из гамма-развернутого RGB в корректное цветовое пространство HSL | ||
function GtoH(ghue: word): word; | ||
Преобразует оттенок G (GSBA) в оттенок H (HSLA) | ||
function HtoG(hue: word): word; | ||
Преобразует оттенок H (HSLA) в оттенок G (GSBA) | ||
function GSBAToBGRA(c: TGSBAPixel): TBGRAPixel; | ||
Преобразует пиксель из исправленного HSL в sRGB | ||
function GSBAToExpanded(c: TGSBAPixel): TExpandedPixel; | ||
Преобразует пиксель из корректного HSL в расширенный гамма RGB | ||
function GSBAToHSLA(c: TGSBAPixel): THSLAPixel; | ||
Преобразует пиксель из корректного HSL в обычный HSL | ||
TColorF = packed array[1..4] of single; | ||
Цветовая переменная общего назначения со значениями с плавающей точкой одинарной точности | ||
function ColorF(red,green,blue,alpha: single): TColorF; | ||
Создает структуру TColorF | ||
operator - (const c1, c2: TColorF): TColorF; inline; | ||
Вычитает каждый компонент отдельно | ||
operator + (const c1, c2: TColorF): TColorF; inline; | ||
Добавляет каждый компонент отдельно | ||
operator * (const c1, c2: TColorF): TColorF; inline; | ||
Умножает каждый компонент отдельно | ||
operator * (const c1: TColorF; factor: single): TColorF; inline; | ||
Умножает каждый компонент на factor | ||
TDrawMode = ( | ||
Возможные режимы при рисовании пикселя поверх другого | ||
dmSet, | ||
Пиксель заменяется | ||
dmSetExceptTransparent, | ||
Пиксель заменяется, если пиксель имеет значение альфа 255 | ||
dmLinearBlend, | ||
Пиксель смешивается с другим в соответствии с альфа-значениями, однако гамма-коррекция не применяется. Другими словами, цветовое пространство предполагается линейным | ||
dmDrawWithTransparency, | ||
Пиксель смешивается с другим в соответствии с альфа-значениями, и применяется гамма-коррекция. Другими словами, цветовое пространство предполагается sRGB | ||
dmXor); | ||
Значения всех каналов объединяются [посредством] Xor. Это полезно для вычисления двоичной разницы, однако не имеет смысла отображать на экране | ||
dmFastBlend = dmLinearBlend; | ||
Псевдоним для линейного наложения, потому что он быстрее, чем наложение с гамма-коррекцией | ||
TBlendOperation = ( | ||
Расширенные режимы наложения. См. Paint.NET blend modes и Formulas. Смешивание слоев имеет два этапа. Первый - применяются операции смешивания, перечисленные ниже, а второй - фактическое слияние цветов. | ||
boLinearBlend, | ||
Простое смешивание, за исключением того, что оно вызывает линейное объединение, поэтому оно эквивалентно dmLinearBlend | ||
boTransparent, | ||
Простое смешивание. Оно эквивалентно dmLinearBlend или dmDrawWithTransparency | ||
boLighten, boScreen, boAdditive, boLinearAdd, boColorDodge, boDivide, boNiceGlow, boSoftLight, boHardLight, | ||
Режимы смешивания яркости (имеют тенденцию увеличивать свечение) | ||
boGlow, boReflect, boOverlay, boDarkOverlay, boDarken, boMultiply, boColorBurn, | ||
Маскировка режимов наложения (имеет тенденцию уменьшать свечение) | ||
boDifference, boLinearDifference, boExclusion, boLinearExclusion, boSubtract, boLinearSubtract, boSubtractInverse, boLinearSubtractInverse, | ||
Режимы смешивания различий | ||
boNegation, boLinearNegation, | ||
Режимы наложения негатива | ||
boXor); | ||
Режим смешивания Xor. Он немного отличается от dm Xor, поскольку альфа-значение используется, как и в других режимах наложения. | ||
boGlowMask = boGlow; | ||
Псевдоним свечения, который выражает, что этот режим смешивания маскирует часть, где верхний слой черный | ||
boLinearMultiply = boMultiply; | ||
Псевдоним, потому что линейные или нелинейные режимы умножения идентичны | ||
boNonLinearOverlay = boDarkOverlay; | ||
Псевдоним, чтобы выразить это темное наложение - это просто наложение с гамма-коррекцией | ||
BlendOperationStr : array[TBlendOperation] of string | ||
Строковые константы для режимов наложения | ||
function StrToBlendOperation(str: string): TBlendOperation; | ||
Возвращает режим наложения, выраженный строкой | ||
TChannel = (cRed, cGreen, cBlue, cAlpha); | ||
Возможные каналы в растровом изображении с использованием любого цветового пространства RGBA | ||
TChannels = set of TChannel; | ||
Сочетание каналов | ||
TAlphaChannelPaletteOption = ( | ||
Определяет, как палитра обрабатывает альфа-канал | ||
acIgnore, | ||
Альфа-канал игнорируется. Считается, что альфа-канал хранится в другом месте. | ||
acTransparentEntry, | ||
Одна точка входа выделяется полностью прозрачным цветом | ||
acFullChannelInPalette); | ||
Альфа-канал полностью встроен в палитру, поэтому цвет определяется четырьмя каналами RGBA. | ||
TDitheringAlgorithm = ( | ||
Алгоритмы сглаживания, которые определяют, как обрабатывать цвета, которые не найдены в палитре | ||
daNearestNeighbor, | ||
Ближайший цвет должен использоваться вместо | ||
daFloydSteinberg); | ||
Можно использовать ближайший цвет, но можно использовать и другой цвет для компенсации ошибки, следуя алгоритму Флойда-Стейнберга | ||