You can subscribe to this list here.
2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(4) |
Nov
(5) |
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2010 |
Jan
(11) |
Feb
(39) |
Mar
(20) |
Apr
|
May
(2) |
Jun
(2) |
Jul
(5) |
Aug
|
Sep
(8) |
Oct
(3) |
Nov
(8) |
Dec
(6) |
2011 |
Jan
(3) |
Feb
|
Mar
|
Apr
(3) |
May
(1) |
Jun
(9) |
Jul
(21) |
Aug
(10) |
Sep
(29) |
Oct
(2) |
Nov
(1) |
Dec
|
2012 |
Jan
|
Feb
(3) |
Mar
(87) |
Apr
(25) |
May
(16) |
Jun
(45) |
Jul
(1) |
Aug
(97) |
Sep
(178) |
Oct
(197) |
Nov
(10) |
Dec
(8) |
2013 |
Jan
(3) |
Feb
(1) |
Mar
(6) |
Apr
(7) |
May
(3) |
Jun
(1) |
Jul
(2) |
Aug
|
Sep
|
Oct
(5) |
Nov
(7) |
Dec
(3) |
2014 |
Jan
|
Feb
(16) |
Mar
(2) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(4) |
Oct
(2) |
Nov
|
Dec
|
2015 |
Jan
(5) |
Feb
(1) |
Mar
(1) |
Apr
(2) |
May
(3) |
Jun
(5) |
Jul
(2) |
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
(3) |
2016 |
Jan
|
Feb
|
Mar
(3) |
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
(2) |
Oct
(3) |
Nov
(5) |
Dec
(1) |
2017 |
Jan
|
Feb
|
Mar
(4) |
Apr
(1) |
May
(3) |
Jun
(3) |
Jul
(2) |
Aug
|
Sep
(12) |
Oct
(9) |
Nov
(5) |
Dec
|
2018 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(2) |
2019 |
Jan
(14) |
Feb
|
Mar
(21) |
Apr
(63) |
May
(11) |
Jun
(9) |
Jul
(5) |
Aug
(1) |
Sep
|
Oct
|
Nov
(8) |
Dec
(3) |
2020 |
Jan
(5) |
Feb
(3) |
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
(2) |
Aug
(1) |
Sep
(7) |
Oct
(6) |
Nov
(1) |
Dec
(4) |
2021 |
Jan
(6) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
(21) |
Jul
(13) |
Aug
(1) |
Sep
(3) |
Oct
(1) |
Nov
(3) |
Dec
(1) |
2022 |
Jan
|
Feb
(7) |
Mar
(13) |
Apr
(8) |
May
(14) |
Jun
(3) |
Jul
(16) |
Aug
(4) |
Sep
(3) |
Oct
(1) |
Nov
(5) |
Dec
(4) |
2023 |
Jan
(3) |
Feb
|
Mar
(35) |
Apr
(63) |
May
(2) |
Jun
(1) |
Jul
|
Aug
(4) |
Sep
(2) |
Oct
(2) |
Nov
|
Dec
|
2024 |
Jan
(11) |
Feb
(38) |
Mar
(53) |
Apr
(47) |
May
(24) |
Jun
(9) |
Jul
(29) |
Aug
(2) |
Sep
(6) |
Oct
|
Nov
|
Dec
|
From: <an...@us...> - 2012-10-08 15:22:17
|
Revision: 1988 http://graphics32.svn.sourceforge.net/graphics32/?rev=1988&view=rev Author: angusj Date: 2012-10-08 15:22:11 +0000 (Mon, 08 Oct 2012) Log Message: ----------- Removed stub for variables that are intended for internal use only. Removed Paths: ------------- trunk/Documentation/Source/Units/GR32/Variables/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <CW...@us...> - 2012-10-08 13:50:03
|
Revision: 1987 http://graphics32.svn.sourceforge.net/graphics32/?rev=1987&view=rev Author: CWBudde Date: 2012-10-08 13:49:57 +0000 (Mon, 08 Oct 2012) Log Message: ----------- * updated TCustomCenterRadiusAngleLutGradientSampler Modified Paths: -------------- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/Methods/Create.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/Properties/Angle.htm Modified: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/Methods/Create.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/Methods/Create.htm 2012-10-08 11:05:10 UTC (rev 1986) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/Methods/Create.htm 2012-10-08 13:49:57 UTC (rev 1987) @@ -4,8 +4,15 @@ <link rel="stylesheet" href="../../../../../../styles/default.css" type="text/css"> </head> <body bgcolor="#FFFFFF"> +<p class="Decl"><b>constructor</b> Create; <b>override</b>;</p> +<h2>Description</h2> +<p class="Body">Creates and initializes an instance of <a href="../_Body.htm">TCustomCenterRadiusAngleLutGradientSampler</a>.</p> +<p class="Body">After calling the inherited constructor, <span class="EmptyRef">Create</span> + initializes the following properties:</p> +<ul> + <li><a href="../Properties/Angle.htm">Angle</a> to 0</li> +</ul> -<p class="Decl"><b>constructor</b> Create; <b>override</b>;</p> <br> </body> Modified: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/Properties/Angle.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/Properties/Angle.htm 2012-10-08 11:05:10 UTC (rev 1986) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/Properties/Angle.htm 2012-10-08 13:49:57 UTC (rev 1987) @@ -5,6 +5,8 @@ </head> <body bgcolor="#FFFFFF"> <p class="Decl"><b>property</b> Angle: TFloat; <span class="Comment">//read and write</span></p> +<h2>Description</h2> +<p class="Body">The angle property controls the angle (in radians) of the gradient. With a value different than 0 the coordinate system is rotated. For example, for a value of π/2 the x values are treated as y values and y values are treated as -x values resulting in a rotation by 90\xB0 degrees.</p> <br> </body> </html> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <CW...@us...> - 2012-10-08 11:05:21
|
Revision: 1986 http://graphics32.svn.sourceforge.net/graphics32/?rev=1986&view=rev Author: CWBudde Date: 2012-10-08 11:05:10 +0000 (Mon, 08 Oct 2012) Log Message: ----------- * updated custom gradient sampler class documentation Modified Paths: -------------- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler/_Body.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/_Body.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler/_Body.htm Modified: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler/_Body.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler/_Body.htm 2012-10-08 10:50:39 UTC (rev 1985) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler/_Body.htm 2012-10-08 11:05:10 UTC (rev 1986) @@ -5,6 +5,8 @@ <meta name="Ancestor" content="TCustomLookUpTableGradientSampler"> </head> <body bgcolor="#FFFFFF"> +<h2>Description</h2> +<p class="Body">Custom class for all gradient samplers based on a lookup table that feature a <a href="./Properties/Center.htm">center</a> property.</p> <br> </body> </html> \ No newline at end of file Modified: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/_Body.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/_Body.htm 2012-10-08 10:50:39 UTC (rev 1985) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/_Body.htm 2012-10-08 11:05:10 UTC (rev 1986) @@ -5,6 +5,8 @@ <meta name="Ancestor" content="TCustomCenterRadiusLutGradientSampler"> </head> <body bgcolor="#FFFFFF"> +<h2>Description</h2> +<p class="Body">Custom class for all gradient samplers based on a lookup table that feature a <a href="../TCustomCenterLutGradientSampler/Properties/Center.htm">center</a>, a <a href="../TCustomCenterRadiusLutGradientSampler/Properties/Radius.htm">radius</a> and an <a href="./Properties/Angle.htm">angle</a> property.</p> <br> </body> </html> \ No newline at end of file Modified: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler/_Body.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler/_Body.htm 2012-10-08 10:50:39 UTC (rev 1985) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler/_Body.htm 2012-10-08 11:05:10 UTC (rev 1986) @@ -5,6 +5,8 @@ <meta name="Ancestor" content="TCustomCenterLutGradientSampler"> </head> <body bgcolor="#FFFFFF"> +<h2>Description</h2> +<p class="Body">Custom class for all gradient samplers based on a lookup table that feature a <a href="../TCustomCenterLutGradientSampler/Properties/Center.htm">center</a> and <a href="../TCustomCenterRadiusLutGradientSampler/Properties/Radius.htm">radius</a> property.</p> <br> </body> </html> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <CW...@us...> - 2012-10-08 10:50:45
|
Revision: 1985 http://graphics32.svn.sourceforge.net/graphics32/?rev=1985&view=rev Author: CWBudde Date: 2012-10-08 10:50:39 +0000 (Mon, 08 Oct 2012) Log Message: ----------- * updated documentation Modified Paths: -------------- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TConicGradientSampler/_Body.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TDiamondGradientSampler/_Body.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TXYGradientSampler/_Body.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TXYSqrtGradientSampler/_Body.htm Modified: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TConicGradientSampler/_Body.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TConicGradientSampler/_Body.htm 2012-10-08 10:25:44 UTC (rev 1984) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TConicGradientSampler/_Body.htm 2012-10-08 10:50:39 UTC (rev 1985) @@ -9,7 +9,6 @@ <p class="Body"><em>Conical</em> color gradient<br> A gradient which goes along the circular arc around a center. The gradient can be rotated using the <a href="./Properties/Angle.htm">angle</a> property </p> - <p align="center" class="Body"><img src="../../../../../Images/img_041.png" width="100" height="100"><br> <span class="EmptyRef">Figure 1: Output of a TConicGradientSampler with several colors and a certain angle</span> </p> Modified: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TDiamondGradientSampler/_Body.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TDiamondGradientSampler/_Body.htm 2012-10-08 10:25:44 UTC (rev 1984) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TDiamondGradientSampler/_Body.htm 2012-10-08 10:50:39 UTC (rev 1985) @@ -7,6 +7,7 @@ <body bgcolor="#FFFFFF"> <h2>Description</h2> <p class="Body"><em>Diamond</em> shaped color gradient</p> +<p class="Body">A gradient in the shape of a diamond. Its size can be controlled using the <a href="../TCustomCenterRadiusLutGradientSampler/Properties/Radius.htm">radius</a> property, which is actually the incircle radius. The center can be set using the <a href="../TCustomCenterLutGradientSampler/Properties/Center.htm">center</a> property. Finally the gradient can be rotated using the <a href="../TCustomCenterRadiusAngleLutGradientSampler/Properties/Angle.htm">angle</a> property. <p align="center" class="Body"><img src="../../../../../Images/img_042.png" width="100" height="100"> <img src="../../../../../Images/img_043.png" width="100" height="100"> <img src="../../../../../Images/img_044.png" width="100" height="100"><br> <span class="EmptyRef">Figure 1: Output of a TDiamondGradientSampler with several colors and a certain angle and radius (wrap mode: clamp, mirror, repeat)</span> </p> Modified: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TXYGradientSampler/_Body.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TXYGradientSampler/_Body.htm 2012-10-08 10:25:44 UTC (rev 1984) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TXYGradientSampler/_Body.htm 2012-10-08 10:50:39 UTC (rev 1985) @@ -6,7 +6,8 @@ </head> <body bgcolor="#FFFFFF"> <h2>Description</h2> -<p class="Body"><em>XY</em> color gradient<br>An XY color gradient.</p> +<p class="Body"><em>XY</em> color gradient</p> +<p class="Body">A gradient function defined by the multiplication of the X and Y coordinate values. Its size can be controlled using the <a href="../TCustomCenterRadiusLutGradientSampler/Properties/Radius.htm">radius</a> property, which is actually some sort of an incircle radius. The center can be set using the <a href="../TCustomCenterLutGradientSampler/Properties/Center.htm">center</a> property. Finally the gradient can be rotated using the <a href="../TCustomCenterRadiusAngleLutGradientSampler/Properties/Angle.htm">angle</a> property. <p align="center" class="Body"><img src="../../../../../Images/img_051.png" width="100" height="100"> <img src="../../../../../Images/img_052.png" width="100" height="100"> <img src="../../../../../Images/img_053.png" width="100" height="100"><br> <span class="EmptyRef">Figure 1: Output of a TXYGradientSampler with several colors, a certain radius and angle (wrap: clamp, mirror and repeat)</span> </p> Modified: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TXYSqrtGradientSampler/_Body.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TXYSqrtGradientSampler/_Body.htm 2012-10-08 10:25:44 UTC (rev 1984) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TXYSqrtGradientSampler/_Body.htm 2012-10-08 10:50:39 UTC (rev 1985) @@ -6,7 +6,8 @@ </head> <body bgcolor="#FFFFFF"> <h2>Description</h2> -<p class="Body"><em>XY Sqrt</em> color gradient<br>An XY sqrt color gradient.</p> +<p class="Body"><em>XY Sqrt</em> color gradient</p> +<p class="Body">A gradient function defined by the square root of the multiplication of X and Y coordinate values. It is related to the <a href="../TXYGradientSampler/_Body.htm">XY color gradient</a>, but mapped by using the square root, resulting in more evenly spaced colors. Its size can be controlled using the <a href="../TCustomCenterRadiusLutGradientSampler/Properties/Radius.htm">radius</a> property, which is actually some sort of an incircle radius. The center can be set using the <a href="../TCustomCenterLutGradientSampler/Properties/Center.htm">center</a> property. Finally the gradient can be rotated using the <a href="../TCustomCenterRadiusAngleLutGradientSampler/Properties/Angle.htm">angle</a> property. <p align="center" class="Body"><img src="../../../../../Images/img_054.png" width="100" height="100"> <img src="../../../../../Images/img_055.png" width="100" height="100"> <img src="../../../../../Images/img_056.png" width="100" height="100"><br> <span class="EmptyRef">Figure 1: Output of a TXYSqrtGradientSampler with several colors, a certain radius and angle (wrap: clamp, mirror and repeat)</span> </p> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <CW...@us...> - 2012-10-08 10:25:53
|
Revision: 1984 http://graphics32.svn.sourceforge.net/graphics32/?rev=1984&view=rev Author: CWBudde Date: 2012-10-08 10:25:44 +0000 (Mon, 08 Oct 2012) Log Message: ----------- * linked new additional topic Modified Paths: -------------- trunk/Documentation/Scripts/menu_data.js Modified: trunk/Documentation/Scripts/menu_data.js =================================================================== --- trunk/Documentation/Scripts/menu_data.js 2012-10-08 05:17:52 UTC (rev 1983) +++ trunk/Documentation/Scripts/menu_data.js 2012-10-08 10:25:44 UTC (rev 1984) @@ -95,8 +95,10 @@ url_4_4 = "Additional%20Topics/Repaint%20Optimization.htm" td_4_5 = "Sampling and Rasterization" url_4_5 = "Additional%20Topics/Sampling%20and%20Rasterization.htm" -td_4_6 = "Back-Ends" +td_4_6 = "Back-Ends" url_4_6 = "Additional%20Topics/Back-Ends.htm" +td_4_7 = "Color Gradients" +url_4_7 = "Additional%20Topics/Color%20Gradients.htm" td_5 = "Main Units" td_5_1 = "GR32.pas" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2012-10-08 05:17:59
|
Revision: 1983 http://graphics32.svn.sourceforge.net/graphics32/?rev=1983&view=rev Author: angusj Date: 2012-10-08 05:17:52 +0000 (Mon, 08 Oct 2012) Log Message: ----------- Updated GR32 Vars & Const documentation Modified Paths: -------------- trunk/Documentation/Source/Units/GR32/Constants/Color Constants.htm Added Paths: ----------- trunk/Documentation/Source/Units/GR32/Constants/Fixed Point Math Constants.htm trunk/Documentation/Source/Units/GR32/Variables/ trunk/Documentation/Source/Units/GR32/Variables/vars.htm Modified: trunk/Documentation/Source/Units/GR32/Constants/Color Constants.htm =================================================================== --- trunk/Documentation/Source/Units/GR32/Constants/Color Constants.htm 2012-10-07 22:18:22 UTC (rev 1982) +++ trunk/Documentation/Source/Units/GR32/Constants/Color Constants.htm 2012-10-08 05:17:52 UTC (rev 1983) @@ -10,112 +10,450 @@ <p class="Body">Their names are similar to standard ones, they just have a '32' postfix:</p> <table width="45%" border="1" cellspacing="0" bordercolor="#FFFFFF"> - <tr> - <th width="50%">Constant</th> - <th> Value</th> - </tr> - <tr> - <td width="50%">clBlack32</td> - <td> - <div align="center">$FF000000</div> - </td> - </tr> - <tr> - <td width="50%">clDimGray32</td> - <td> - <div align="center">$FF3F3F3F</div> - </td> - </tr> - <tr> - <td width="50%">clGray32</td> - <td> - <div align="center">$FF7F7F7F</div> - </td> - </tr> - <tr> - <td width="50%">clLightGray32</td> - <td> - <div align="center">$FFBFBFBF</div> - </td> - </tr> - <tr> - <td width="50%">clWhite32</td> - <td> - <div align="center">$FFFFFFFF</div> - </td> - </tr> - <tr> - <td width="50%">clMaroon32</td> - <td> - <div align="center">$FF7F0000</div> - </td> - </tr> - <tr> - <td width="50%">clGreen32</td> - <td> - <div align="center">$FF007F00</div> - </td> - </tr> - <tr> - <td width="50%">clOlive32</td> - <td> - <div align="center">$FF7F7F00</div> - </td> - </tr> - <tr> - <td width="50%">clNavy32</td> - <td> - <div align="center">$FF00007F</div> - </td> - </tr> - <tr> - <td width="50%">clPurple32</td> - <td> - <div align="center">$FF7F007F</div> - </td> - </tr> - <tr> - <td width="50%">clTeal32</td> - <td> - <div align="center">$FF007F7F</div> - </td> - </tr> - <tr> - <td width="50%">clRed32</td> - <td> - <div align="center">$FFFF0000</div> - </td> - </tr> - <tr> - <td width="50%">clLime32</td> - <td> - <div align="center">$FF00FF00</div> - </td> - </tr> - <tr> - <td width="50%">clYellow32</td> - <td> - <div align="center">$FFFFFF00</div> - </td> - </tr> - <tr> - <td width="50%">clBlue32</td> - <td> - <div align="center">$FF0000FF</div> - </td> - </tr> - <tr> - <td width="50%">clFuchsia32</td> - <td> - <div align="center">$FFFF00FF</div> - </td> - </tr> - <tr> - <td width="50%">clAqua32</td> - <td> - <div align="center">$FF00FFFF</div> - </td> - </tr> +<tr><td width="50%">clBlack32</td> +<td><div align="center">$FF000000</div></td></tr> + +<tr><td width="50%">clDimGray32</td> +<td><div align="center">$FF3F3F3F</div></td></tr> + +<tr><td width="50%">clGray32</td> +<td><div align="center">$FF7F7F7F</div></td></tr> + +<tr><td width="50%">clLightGray32</td> +<td><div align="center">$FFBFBFBF</div></td></tr> + +<tr><td width="50%">clWhite32</td> +<td><div align="center">$FFFFFFFF</div></td></tr> + +<tr><td width="50%">clMaroon32</td> +<td><div align="center">$FF7F0000</div></td></tr> + +<tr><td width="50%">clGreen32</td> +<td><div align="center">$FF007F00</div></td></tr> + +<tr><td width="50%">clOlive32</td> +<td><div align="center">$FF7F7F00</div></td></tr> + +<tr><td width="50%">clNavy32</td> +<td><div align="center">$FF00007F</div></td></tr> + +<tr><td width="50%">clPurple32</td> +<td><div align="center">$FF7F007F</div></td></tr> + +<tr><td width="50%">clTeal32</td> +<td><div align="center">$FF007F7F</div></td></tr> + +<tr><td width="50%">clRed32</td> +<td><div align="center">$FFFF0000</div></td></tr> + +<tr><td width="50%">clLime32</td> +<td><div align="center">$FF00FF00</div></td></tr> + +<tr><td width="50%">clYellow32</td> +<td><div align="center">$FFFFFF00</div></td></tr> + +<tr><td width="50%">clBlue32</td> +<td><div align="center">$FF0000FF</div></td></tr> + +<tr><td width="50%">clFuchsia32</td> +<td><div align="center">$FFFF00FF</div></td></tr> + +<tr><td width="50%">clAqua32</td> +<td><div align="center">$FF00FFFF</div></td></tr> + +<tr><td width="50%">clAliceBlue32</td> +<td><div align="center">$FFF0F8FF</div></td></tr> + +<tr><td width="50%">clAntiqueWhite32</td> +<td><div align="center">$FFFAEBD7</div></td></tr> + +<tr><td width="50%">clAquamarine32</td> +<td><div align="center">$FF7FFFD4</div></td></tr> + +<tr><td width="50%">clAzure32</td> +<td><div align="center">$FFF0FFFF</div></td></tr> + +<tr><td width="50%">clBeige32</td> +<td><div align="center">$FFF5F5DC</div></td></tr> + +<tr><td width="50%">clBisque32</td> +<td><div align="center">$FFFFE4C4</div></td></tr> + +<tr><td width="50%">clBlancheDalmond32</td> +<td><div align="center">$FFFFEBCD</div></td></tr> + +<tr><td width="50%">clBlueViolet32</td> +<td><div align="center">$FF8A2BE2</div></td></tr> + +<tr><td width="50%">clBrown32</td> +<td><div align="center">$FFA52A2A</div></td></tr> + +<tr><td width="50%">clBurlyWood32</td> +<td><div align="center">$FFDEB887</div></td></tr> + +<tr><td width="50%">clCadetblue32</td> +<td><div align="center">$FF5F9EA0</div></td></tr> + +<tr><td width="50%">clChartReuse32</td> +<td><div align="center">$FF7FFF00</div></td></tr> + +<tr><td width="50%">clChocolate32</td> +<td><div align="center">$FFD2691E</div></td></tr> + +<tr><td width="50%">clCoral32</td> +<td><div align="center">$FFFF7F50</div></td></tr> + +<tr><td width="50%">clCornFlowerBlue32</td> +<td><div align="center">$FF6495ED</div></td></tr> + +<tr><td width="50%">clCornSilk32</td> +<td><div align="center">$FFFFF8DC</div></td></tr> + +<tr><td width="50%">clCrimson32</td> +<td><div align="center">$FFDC143C</div></td></tr> + +<tr><td width="50%">clDarkBlue32</td> +<td><div align="center">$FF00008B</div></td></tr> + +<tr><td width="50%">clDarkCyan32</td> +<td><div align="center">$FF008B8B</div></td></tr> + +<tr><td width="50%">clDarkGoldenRod32</td> +<td><div align="center">$FFB8860B</div></td></tr> + +<tr><td width="50%">clDarkGray32</td> +<td><div align="center">$FFA9A9A9</div></td></tr> + +<tr><td width="50%">clDarkGreen32</td> +<td><div align="center">$FF006400</div></td></tr> + +<tr><td width="50%">clDarkGrey32</td> +<td><div align="center">$FFA9A9A9</div></td></tr> + +<tr><td width="50%">clDarkKhaki32</td> +<td><div align="center">$FFBDB76B</div></td></tr> + +<tr><td width="50%">clDarkMagenta32</td> +<td><div align="center">$FF8B008B</div></td></tr> + +<tr><td width="50%">clDarkOliveGreen32</td> +<td><div align="center">$FF556B2F</div></td></tr> + +<tr><td width="50%">clDarkOrange32</td> +<td><div align="center">$FFFF8C00</div></td></tr> + +<tr><td width="50%">clDarkOrchid32</td> +<td><div align="center">$FF9932CC</div></td></tr> + +<tr><td width="50%">clDarkRed32</td> +<td><div align="center">$FF8B0000</div></td></tr> + +<tr><td width="50%">clDarkSalmon32</td> +<td><div align="center">$FFE9967A</div></td></tr> + +<tr><td width="50%">clDarkSeaGreen32</td> +<td><div align="center">$FF8FBC8F</div></td></tr> + +<tr><td width="50%">clDarkSlateBlue32</td> +<td><div align="center">$FF483D8B</div></td></tr> + +<tr><td width="50%">clDarkSlateGray32</td> +<td><div align="center">$FF2F4F4F</div></td></tr> + +<tr><td width="50%">clDarkSlateGrey32</td> +<td><div align="center">$FF2F4F4F</div></td></tr> + +<tr><td width="50%">clDarkTurquoise32</td> +<td><div align="center">$FF00CED1</div></td></tr> + +<tr><td width="50%">clDarkViolet32</td> +<td><div align="center">$FF9400D3</div></td></tr> + +<tr><td width="50%">clDeepPink32</td> +<td><div align="center">$FFFF1493</div></td></tr> + +<tr><td width="50%">clDeepSkyBlue32</td> +<td><div align="center">$FF00BFFF</div></td></tr> + +<tr><td width="50%">clDodgerBlue32</td> +<td><div align="center">$FF1E90FF</div></td></tr> + +<tr><td width="50%">clFireBrick32</td> +<td><div align="center">$FFB22222</div></td></tr> + +<tr><td width="50%">clFloralWhite32</td> +<td><div align="center">$FFFFFAF0</div></td></tr> + +<tr><td width="50%">clGainsBoro32</td> +<td><div align="center">$FFDCDCDC</div></td></tr> + +<tr><td width="50%">clGhostWhite32</td> +<td><div align="center">$FFF8F8FF</div></td></tr> + +<tr><td width="50%">clGold32</td> +<td><div align="center">$FFFFD700</div></td></tr> + +<tr><td width="50%">clGoldenRod32</td> +<td><div align="center">$FFDAA520</div></td></tr> + +<tr><td width="50%">clGreenYellow32</td> +<td><div align="center">$FFADFF2F</div></td></tr> + +<tr><td width="50%">clGrey32</td> +<td><div align="center">$FF808080</div></td></tr> + +<tr><td width="50%">clHoneyDew32</td> +<td><div align="center">$FFF0FFF0</div></td></tr> + +<tr><td width="50%">clHotPink32</td> +<td><div align="center">$FFFF69B4</div></td></tr> + +<tr><td width="50%">clIndianRed32</td> +<td><div align="center">$FFCD5C5C</div></td></tr> + +<tr><td width="50%">clIndigo32</td> +<td><div align="center">$FF4B0082</div></td></tr> + +<tr><td width="50%">clIvory32</td> +<td><div align="center">$FFFFFFF0</div></td></tr> + +<tr><td width="50%">clKhaki32</td> +<td><div align="center">$FFF0E68C</div></td></tr> + +<tr><td width="50%">clLavender32</td> +<td><div align="center">$FFE6E6FA</div></td></tr> + +<tr><td width="50%">clLavenderBlush32</td> +<td><div align="center">$FFFFF0F5</div></td></tr> + +<tr><td width="50%">clLawnGreen32</td> +<td><div align="center">$FF7CFC00</div></td></tr> + +<tr><td width="50%">clLemonChiffon32</td> +<td><div align="center">$FFFFFACD</div></td></tr> + +<tr><td width="50%">clLightBlue32</td> +<td><div align="center">$FFADD8E6</div></td></tr> + +<tr><td width="50%">clLightCoral32</td> +<td><div align="center">$FFF08080</div></td></tr> + +<tr><td width="50%">clLightCyan32</td> +<td><div align="center">$FFE0FFFF</div></td></tr> + +<tr><td width="50%">clLightGoldenRodYellow32</td> +<td><div align="center">$FFFAFAD2</div></td></tr> + +<tr><td width="50%">clLightGreen32</td> +<td><div align="center">$FF90EE90</div></td></tr> + +<tr><td width="50%">clLightGrey32</td> +<td><div align="center">$FFD3D3D3</div></td></tr> + +<tr><td width="50%">clLightPink32</td> +<td><div align="center">$FFFFB6C1</div></td></tr> + +<tr><td width="50%">clLightSalmon32</td> +<td><div align="center">$FFFFA07A</div></td></tr> + +<tr><td width="50%">clLightSeagreen32</td> +<td><div align="center">$FF20B2AA</div></td></tr> + +<tr><td width="50%">clLightSkyblue32</td> +<td><div align="center">$FF87CEFA</div></td></tr> + +<tr><td width="50%">clLightSlategray32</td> +<td><div align="center">$FF778899</div></td></tr> + +<tr><td width="50%">clLightSlategrey32</td> +<td><div align="center">$FF778899</div></td></tr> + +<tr><td width="50%">clLightSteelblue32</td> +<td><div align="center">$FFB0C4DE</div></td></tr> + +<tr><td width="50%">clLightYellow32</td> +<td><div align="center">$FFFFFFE0</div></td></tr> + +<tr><td width="50%">clLtGray32</td> +<td><div align="center">$FFC0C0C0</div></td></tr> + +<tr><td width="50%">clMedGray32</td> +<td><div align="center">$FFA0A0A4</div></td></tr> + +<tr><td width="50%">clDkGray32</td> +<td><div align="center">$FF808080</div></td></tr> + +<tr><td width="50%">clMoneyGreen32</td> +<td><div align="center">$FFC0DCC0</div></td></tr> + +<tr><td width="50%">clLegacySkyBlue32</td> +<td><div align="center">$FFA6CAF0</div></td></tr> + +<tr><td width="50%">clCream32</td> +<td><div align="center">$FFFFFBF0</div></td></tr> + +<tr><td width="50%">clLimeGreen32</td> +<td><div align="center">$FF32CD32</div></td></tr> + +<tr><td width="50%">clLinen32</td> +<td><div align="center">$FFFAF0E6</div></td></tr> + +<tr><td width="50%">clMediumAquamarine32</td> +<td><div align="center">$FF66CDAA</div></td></tr> + +<tr><td width="50%">clMediumBlue32</td> +<td><div align="center">$FF0000CD</div></td></tr> + +<tr><td width="50%">clMediumOrchid32</td> +<td><div align="center">$FFBA55D3</div></td></tr> + +<tr><td width="50%">clMediumPurple32</td> +<td><div align="center">$FF9370DB</div></td></tr> + +<tr><td width="50%">clMediumSeaGreen32</td> +<td><div align="center">$FF3CB371</div></td></tr> + +<tr><td width="50%">clMediumSlateBlue32</td> +<td><div align="center">$FF7B68EE</div></td></tr> + +<tr><td width="50%">clMediumSpringGreen32</td> +<td><div align="center">$FF00FA9A</div></td></tr> + +<tr><td width="50%">clMediumTurquoise32</td> +<td><div align="center">$FF48D1CC</div></td></tr> + +<tr><td width="50%">clMediumVioletRed32</td> +<td><div align="center">$FFC71585</div></td></tr> + +<tr><td width="50%">clMidnightBlue32</td> +<td><div align="center">$FF191970</div></td></tr> + +<tr><td width="50%">clMintCream32</td> +<td><div align="center">$FFF5FFFA</div></td></tr> + +<tr><td width="50%">clMistyRose32</td> +<td><div align="center">$FFFFE4E1</div></td></tr> + +<tr><td width="50%">clMoccasin32</td> +<td><div align="center">$FFFFE4B5</div></td></tr> + +<tr><td width="50%">clNavajoWhite32</td> +<td><div align="center">$FFFFDEAD</div></td></tr> + +<tr><td width="50%">clOldLace32</td> +<td><div align="center">$FFFDF5E6</div></td></tr> + +<tr><td width="50%">clOliveDrab32</td> +<td><div align="center">$FF6B8E23</div></td></tr> + +<tr><td width="50%">clOrange32</td> +<td><div align="center">$FFFFA500</div></td></tr> + +<tr><td width="50%">clOrangeRed32</td> +<td><div align="center">$FFFF4500</div></td></tr> + +<tr><td width="50%">clOrchid32</td> +<td><div align="center">$FFDA70D6</div></td></tr> + +<tr><td width="50%">clPaleGoldenRod32</td> +<td><div align="center">$FFEEE8AA</div></td></tr> + +<tr><td width="50%">clPaleGreen32</td> +<td><div align="center">$FF98FB98</div></td></tr> + +<tr><td width="50%">clPaleTurquoise32</td> +<td><div align="center">$FFAFEEEE</div></td></tr> + +<tr><td width="50%">clPaleVioletred32</td> +<td><div align="center">$FFDB7093</div></td></tr> + +<tr><td width="50%">clPapayaWhip32</td> +<td><div align="center">$FFFFEFD5</div></td></tr> + +<tr><td width="50%">clPeachPuff32</td> +<td><div align="center">$FFFFDAB9</div></td></tr> + +<tr><td width="50%">clPeru32</td> +<td><div align="center">$FFCD853F</div></td></tr> + +<tr><td width="50%">clPlum32</td> +<td><div align="center">$FFDDA0DD</div></td></tr> + +<tr><td width="50%">clPowderBlue32</td> +<td><div align="center">$FFB0E0E6</div></td></tr> + +<tr><td width="50%">clRosyBrown32</td> +<td><div align="center">$FFBC8F8F</div></td></tr> + +<tr><td width="50%">clRoyalBlue32</td> +<td><div align="center">$FF4169E1</div></td></tr> + +<tr><td width="50%">clSaddleBrown32</td> +<td><div align="center">$FF8B4513</div></td></tr> + +<tr><td width="50%">clSalmon32</td> +<td><div align="center">$FFFA8072</div></td></tr> + +<tr><td width="50%">clSandyBrown32</td> +<td><div align="center">$FFF4A460</div></td></tr> + +<tr><td width="50%">clSeaGreen32</td> +<td><div align="center">$FF2E8B57</div></td></tr> + +<tr><td width="50%">clSeaShell32</td> +<td><div align="center">$FFFFF5EE</div></td></tr> + +<tr><td width="50%">clSienna32</td> +<td><div align="center">$FFA0522D</div></td></tr> + +<tr><td width="50%">clSilver32</td> +<td><div align="center">$FFC0C0C0</div></td></tr> + +<tr><td width="50%">clSkyblue32</td> +<td><div align="center">$FF87CEEB</div></td></tr> + +<tr><td width="50%">clSlateBlue32</td> +<td><div align="center">$FF6A5ACD</div></td></tr> + +<tr><td width="50%">clSlateGray32</td> +<td><div align="center">$FF708090</div></td></tr> + +<tr><td width="50%">clSlateGrey32</td> +<td><div align="center">$FF708090</div></td></tr> + +<tr><td width="50%">clSnow32</td> +<td><div align="center">$FFFFFAFA</div></td></tr> + +<tr><td width="50%">clSpringgreen32</td> +<td><div align="center">$FF00FF7F</div></td></tr> + +<tr><td width="50%">clSteelblue32</td> +<td><div align="center">$FF4682B4</div></td></tr> + +<tr><td width="50%">clTan32</td> +<td><div align="center">$FFD2B48C</div></td></tr> + +<tr><td width="50%">clThistle32</td> +<td><div align="center">$FFD8BFD8</div></td></tr> + +<tr><td width="50%">clTomato32</td> +<td><div align="center">$FFFF6347</div></td></tr> + +<tr><td width="50%">clTurquoise32</td> +<td><div align="center">$FF40E0D0</div></td></tr> + +<tr><td width="50%">clViolet32</td> +<td><div align="center">$FFEE82EE</div></td></tr> + +<tr><td width="50%">clWheat32</td> +<td><div align="center">$FFF5DEB3</div></td></tr> + +<tr><td width="50%">clWhitesmoke32</td> +<td><div align="center">$FFF5F5F5</div></td></tr> + +<tr><td width="50%">clYellowgreen32</td> +<td><div align="center">$FF9ACD32</div></td></tr> + </table> <p class="Body">In addition, Graphics32 defines a few colors with 50% transparency:</p> <table width="45%" border="1" cellspacing="0" bordercolor="#FFFFFF"> Added: trunk/Documentation/Source/Units/GR32/Constants/Fixed Point Math Constants.htm =================================================================== --- trunk/Documentation/Source/Units/GR32/Constants/Fixed Point Math Constants.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32/Constants/Fixed Point Math Constants.htm 2012-10-08 05:17:52 UTC (rev 1983) @@ -0,0 +1,35 @@ +<html> +<head> +<title>G32Version</title> +<link rel="STYLESHEET" href="../../../../Styles/Default.css"> +</head> +<body bgcolor="#FFFFFF"> + +<br> +<table width="45%" cellspacing="0" cellpadding="0" border="1px" bordercolor="#FFFFFF"> +<tr> + <td width="50%">FixedOne</td> + <td><div align="center">$10000</div></td> +</tr> +<tr> + <td width="50%">FixedHalf</td> + <td><div align="center">$7FFF</div></td> +</tr> +<tr> + <td width="50%">FixedPI</td> + <td><div align="center">Round(PI * FixedOne)</div></td> +</tr> +<tr> + <td width="50%">FixedToFloat</td> + <td><div align="center">1 / FixedOne</div></td> +</tr> +<tr> + <td width="50%">COne255th</td> + <td><div align="center">$1 / $FF</div></td> +</tr> +</table> +<br> + + +</body> +</html> Added: trunk/Documentation/Source/Units/GR32/Variables/vars.htm =================================================================== --- trunk/Documentation/Source/Units/GR32/Variables/vars.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32/Variables/vars.htm 2012-10-08 05:17:52 UTC (rev 1983) @@ -0,0 +1,14 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../styles/default.css" type="text/css"> +</head> +<body bgcolor="#FFFFFF"> + +<br><p class="Decl">GAMMA_TABLE: <b>array</b> [Byte] <b>of</b> Byte;</p> + +<br><p class="Decl">StockBitmap: TBitmap;</p> + + +</body> +</html> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2012-10-07 22:18:29
|
Revision: 1982 http://graphics32.svn.sourceforge.net/graphics32/?rev=1982&view=rev Author: angusj Date: 2012-10-07 22:18:22 +0000 (Sun, 07 Oct 2012) Log Message: ----------- Fixed broken links and added stubs for new ColorGradients classes. Modified Paths: -------------- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TDiamondGradientSampler/_Body.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TInvertedDistanceWeightingSampler/_Body.htm Added Paths: ----------- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/Methods/ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/Methods/Add.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/Methods/Clear.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/Methods/SetColorPoints.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/Methods/SetPoints.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/_Body.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler/ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler/Methods/ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler/Methods/Create.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler/Properties/ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler/Properties/Center.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler/_Body.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/Methods/ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/Methods/Create.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/Properties/ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/Properties/Angle.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/_Body.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler/ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler/Methods/ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler/Methods/Create.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler/Properties/ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler/Properties/Radius.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler/_Body.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/Methods/ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/Methods/SetPoints.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/Methods/SimpleGradient.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/Properties/ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/Properties/EndPoint.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/Properties/StartPoint.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/_Body.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller/ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller/Methods/ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller/Methods/Create.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller/Methods/Destroy.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller/Properties/ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller/Properties/GradientLUT.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller/_Body.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Routines/Color32GradientStop.htm Property changes on: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler ___________________________________________________________________ Added: bugtraq:url + https://sourceforge.net/tracker/?func=detail&aid=%BUGID%&group_id=112985&atid=663797 Added: bugtraq:logregex + S(ource)?F(orge)?( bug(s)?| issue(s)?)?([, ]?#\d{7})+ \d{7} Property changes on: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/Methods ___________________________________________________________________ Added: bugtraq:url + https://sourceforge.net/tracker/?func=detail&aid=%BUGID%&group_id=112985&atid=663797 Added: bugtraq:logregex + S(ource)?F(orge)?( bug(s)?| issue(s)?)?([, ]?#\d{7})+ \d{7} Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/Methods/Add.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/Methods/Add.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/Methods/Add.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,14 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../../styles/default.css" type="text/css"> +</head> +<body bgcolor="#FFFFFF"> + +<p class="Decl"><b>procedure</b> Add(Point: TFloatPoint; Color: TColor32); <b>overload</b>; <b>virtual</b>;</p> +<br> +<p class="Decl"><b>procedure</b> Add(ColorPoint: TColor32FloatPoint); <b>overload</b>; <b>virtual</b>;</p> +<br> + +</body> +</html> \ No newline at end of file Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/Methods/Clear.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/Methods/Clear.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/Methods/Clear.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,12 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../../styles/default.css" type="text/css"> +</head> +<body bgcolor="#FFFFFF"> + +<p class="Decl"><b>procedure</b> Clear; <b>virtual</b>;</p> +<br> + +</body> +</html> \ No newline at end of file Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/Methods/SetColorPoints.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/Methods/SetColorPoints.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/Methods/SetColorPoints.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,14 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../../styles/default.css" type="text/css"> +</head> +<body bgcolor="#FFFFFF"> + +<p class="Decl"><b>procedure</b> SetColorPoints(ColorPoints: TArrayOfColor32FloatPoint); <b>override</b>;</p> +<br> +<p class="Decl"><b>procedure</b> SetColorPoints(Points: TArrayOfFloatPoint; Colors: TArrayOfColor32); <b>override</b>;</p> +<br> + +</body> +</html> \ No newline at end of file Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/Methods/SetPoints.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/Methods/SetPoints.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/Methods/SetPoints.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,12 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../../styles/default.css" type="text/css"> +</head> +<body bgcolor="#FFFFFF"> + +<p class="Decl"><b>procedure</b> SetPoints(Points: TArrayOfFloatPoint); <b>override</b>;</p> +<br> + +</body> +</html> \ No newline at end of file Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/_Body.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/_Body.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomArbitrarySparsePointGradientSampler/_Body.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,10 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../styles/default.css" type="text/css"> +<meta name="Ancestor" content="TCustomSparsePointGradientSampler"> +</head> +<body bgcolor="#FFFFFF"> +<br> +</body> +</html> \ No newline at end of file Property changes on: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler ___________________________________________________________________ Added: bugtraq:url + https://sourceforge.net/tracker/?func=detail&aid=%BUGID%&group_id=112985&atid=663797 Added: bugtraq:logregex + S(ource)?F(orge)?( bug(s)?| issue(s)?)?([, ]?#\d{7})+ \d{7} Property changes on: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler/Methods ___________________________________________________________________ Added: bugtraq:url + https://sourceforge.net/tracker/?func=detail&aid=%BUGID%&group_id=112985&atid=663797 Added: bugtraq:logregex + S(ource)?F(orge)?( bug(s)?| issue(s)?)?([, ]?#\d{7})+ \d{7} Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler/Methods/Create.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler/Methods/Create.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler/Methods/Create.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,12 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../../styles/default.css" type="text/css"> +</head> +<body bgcolor="#FFFFFF"> + +<p class="Decl"><b>constructor</b> Create; <b>override</b>;</p> +<br> + +</body> +</html> \ No newline at end of file Property changes on: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler/Properties ___________________________________________________________________ Added: bugtraq:url + https://sourceforge.net/tracker/?func=detail&aid=%BUGID%&group_id=112985&atid=663797 Added: bugtraq:logregex + S(ource)?F(orge)?( bug(s)?| issue(s)?)?([, ]?#\d{7})+ \d{7} Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler/Properties/Center.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler/Properties/Center.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler/Properties/Center.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,10 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../../styles/default.css" type="text/css"> +</head> +<body bgcolor="#FFFFFF"> +<p class="Decl"><b>property</b> Center: TFloatPoint; <span class="Comment">//read and write</span></p> +<br> +</body> +</html> \ No newline at end of file Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler/_Body.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler/_Body.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterLutGradientSampler/_Body.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,10 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../styles/default.css" type="text/css"> +<meta name="Ancestor" content="TCustomLookUpTableGradientSampler"> +</head> +<body bgcolor="#FFFFFF"> +<br> +</body> +</html> \ No newline at end of file Property changes on: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler ___________________________________________________________________ Added: bugtraq:url + https://sourceforge.net/tracker/?func=detail&aid=%BUGID%&group_id=112985&atid=663797 Added: bugtraq:logregex + S(ource)?F(orge)?( bug(s)?| issue(s)?)?([, ]?#\d{7})+ \d{7} Property changes on: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/Methods ___________________________________________________________________ Added: bugtraq:url + https://sourceforge.net/tracker/?func=detail&aid=%BUGID%&group_id=112985&atid=663797 Added: bugtraq:logregex + S(ource)?F(orge)?( bug(s)?| issue(s)?)?([, ]?#\d{7})+ \d{7} Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/Methods/Create.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/Methods/Create.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/Methods/Create.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,12 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../../styles/default.css" type="text/css"> +</head> +<body bgcolor="#FFFFFF"> + +<p class="Decl"><b>constructor</b> Create; <b>override</b>;</p> +<br> + +</body> +</html> \ No newline at end of file Property changes on: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/Properties ___________________________________________________________________ Added: bugtraq:url + https://sourceforge.net/tracker/?func=detail&aid=%BUGID%&group_id=112985&atid=663797 Added: bugtraq:logregex + S(ource)?F(orge)?( bug(s)?| issue(s)?)?([, ]?#\d{7})+ \d{7} Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/Properties/Angle.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/Properties/Angle.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/Properties/Angle.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,10 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../../styles/default.css" type="text/css"> +</head> +<body bgcolor="#FFFFFF"> +<p class="Decl"><b>property</b> Angle: TFloat; <span class="Comment">//read and write</span></p> +<br> +</body> +</html> \ No newline at end of file Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/_Body.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/_Body.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusAngleLutGradientSampler/_Body.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,10 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../styles/default.css" type="text/css"> +<meta name="Ancestor" content="TCustomCenterRadiusLutGradientSampler"> +</head> +<body bgcolor="#FFFFFF"> +<br> +</body> +</html> \ No newline at end of file Property changes on: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler ___________________________________________________________________ Added: bugtraq:url + https://sourceforge.net/tracker/?func=detail&aid=%BUGID%&group_id=112985&atid=663797 Added: bugtraq:logregex + S(ource)?F(orge)?( bug(s)?| issue(s)?)?([, ]?#\d{7})+ \d{7} Property changes on: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler/Methods ___________________________________________________________________ Added: bugtraq:url + https://sourceforge.net/tracker/?func=detail&aid=%BUGID%&group_id=112985&atid=663797 Added: bugtraq:logregex + S(ource)?F(orge)?( bug(s)?| issue(s)?)?([, ]?#\d{7})+ \d{7} Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler/Methods/Create.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler/Methods/Create.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler/Methods/Create.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,12 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../../styles/default.css" type="text/css"> +</head> +<body bgcolor="#FFFFFF"> + +<p class="Decl"><b>constructor</b> Create; <b>override</b>;</p> +<br> + +</body> +</html> \ No newline at end of file Property changes on: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler/Properties ___________________________________________________________________ Added: bugtraq:url + https://sourceforge.net/tracker/?func=detail&aid=%BUGID%&group_id=112985&atid=663797 Added: bugtraq:logregex + S(ource)?F(orge)?( bug(s)?| issue(s)?)?([, ]?#\d{7})+ \d{7} Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler/Properties/Radius.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler/Properties/Radius.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler/Properties/Radius.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,10 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../../styles/default.css" type="text/css"> +</head> +<body bgcolor="#FFFFFF"> +<p class="Decl"><b>property</b> Radius: TFloat; <span class="Comment">//read and write</span></p> +<br> +</body> +</html> \ No newline at end of file Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler/_Body.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler/_Body.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomCenterRadiusLutGradientSampler/_Body.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,10 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../styles/default.css" type="text/css"> +<meta name="Ancestor" content="TCustomCenterLutGradientSampler"> +</head> +<body bgcolor="#FFFFFF"> +<br> +</body> +</html> \ No newline at end of file Property changes on: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller ___________________________________________________________________ Added: bugtraq:url + https://sourceforge.net/tracker/?func=detail&aid=%BUGID%&group_id=112985&atid=663797 Added: bugtraq:logregex + S(ource)?F(orge)?( bug(s)?| issue(s)?)?([, ]?#\d{7})+ \d{7} Property changes on: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/Methods ___________________________________________________________________ Added: bugtraq:url + https://sourceforge.net/tracker/?func=detail&aid=%BUGID%&group_id=112985&atid=663797 Added: bugtraq:logregex + S(ource)?F(orge)?( bug(s)?| issue(s)?)?([, ]?#\d{7})+ \d{7} Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/Methods/SetPoints.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/Methods/SetPoints.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/Methods/SetPoints.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,12 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../../styles/default.css" type="text/css"> +</head> +<body bgcolor="#FFFFFF"> + +<p class="Decl"><b>procedure</b> SetPoints(StartPoint, EndPoint: TFloatPoint); <b>virtual</b>;</p> +<br> + +</body> +</html> \ No newline at end of file Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/Methods/SimpleGradient.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/Methods/SimpleGradient.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/Methods/SimpleGradient.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,12 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../../styles/default.css" type="text/css"> +</head> +<body bgcolor="#FFFFFF"> + +<p class="Decl"><b>procedure</b> SimpleGradient(StartPoint: TFloatPoint; StartColor: TColor32; EndPoint: TFloatPoint; EndColor: TColor32); <b>virtual</b>;</p> +<br> + +</body> +</html> \ No newline at end of file Property changes on: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/Properties ___________________________________________________________________ Added: bugtraq:url + https://sourceforge.net/tracker/?func=detail&aid=%BUGID%&group_id=112985&atid=663797 Added: bugtraq:logregex + S(ource)?F(orge)?( bug(s)?| issue(s)?)?([, ]?#\d{7})+ \d{7} Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/Properties/EndPoint.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/Properties/EndPoint.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/Properties/EndPoint.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,10 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../../styles/default.css" type="text/css"> +</head> +<body bgcolor="#FFFFFF"> +<p class="Decl"><b>property</b> EndPoint: TFloatPoint; <span class="Comment">//read and write</span></p> +<br> +</body> +</html> \ No newline at end of file Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/Properties/StartPoint.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/Properties/StartPoint.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/Properties/StartPoint.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,10 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../../styles/default.css" type="text/css"> +</head> +<body bgcolor="#FFFFFF"> +<p class="Decl"><b>property</b> StartPoint: TFloatPoint; <span class="Comment">//read and write</span></p> +<br> +</body> +</html> \ No newline at end of file Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/_Body.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/_Body.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomLinearGradientPolygonFiller/_Body.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,10 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../styles/default.css" type="text/css"> +<meta name="Ancestor" content="TCustomGradientPolygonFiller"> +</head> +<body bgcolor="#FFFFFF"> +<br> +</body> +</html> \ No newline at end of file Property changes on: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller ___________________________________________________________________ Added: bugtraq:url + https://sourceforge.net/tracker/?func=detail&aid=%BUGID%&group_id=112985&atid=663797 Added: bugtraq:logregex + S(ource)?F(orge)?( bug(s)?| issue(s)?)?([, ]?#\d{7})+ \d{7} Property changes on: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller/Methods ___________________________________________________________________ Added: bugtraq:url + https://sourceforge.net/tracker/?func=detail&aid=%BUGID%&group_id=112985&atid=663797 Added: bugtraq:logregex + S(ource)?F(orge)?( bug(s)?| issue(s)?)?([, ]?#\d{7})+ \d{7} Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller/Methods/Create.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller/Methods/Create.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller/Methods/Create.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,14 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../../styles/default.css" type="text/css"> +</head> +<body bgcolor="#FFFFFF"> + +<p class="Decl"><b>constructor</b> Create(ColorGradient: TColor32Gradient); <b>overload</b>; <b>override</b>;</p> +<br> +<p class="Decl"><b>constructor</b> Create(LookupTable: TColor32LookupTable); <b>overload</b>; <b>virtual</b>;</p> +<br> + +</body> +</html> \ No newline at end of file Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller/Methods/Destroy.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller/Methods/Destroy.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller/Methods/Destroy.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,12 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../../styles/default.css" type="text/css"> +</head> +<body bgcolor="#FFFFFF"> + +<p class="Decl"><b>destructor</b> Destroy; <b>override</b>;</p> +<br> + +</body> +</html> \ No newline at end of file Property changes on: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller/Properties ___________________________________________________________________ Added: bugtraq:url + https://sourceforge.net/tracker/?func=detail&aid=%BUGID%&group_id=112985&atid=663797 Added: bugtraq:logregex + S(ource)?F(orge)?( bug(s)?| issue(s)?)?([, ]?#\d{7})+ \d{7} Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller/Properties/GradientLUT.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller/Properties/GradientLUT.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller/Properties/GradientLUT.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,10 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../../styles/default.css" type="text/css"> +</head> +<body bgcolor="#FFFFFF"> +<p class="Decl"><b>property</b> GradientLUT: TColor32LookupTable; <span class="Comment">//read only</span></p> +<br> +</body> +</html> \ No newline at end of file Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller/_Body.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller/_Body.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TCustomRadialGradientPolygonFiller/_Body.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,10 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../styles/default.css" type="text/css"> +<meta name="Ancestor" content="TCustomGradientPolygonFiller"> +</head> +<body bgcolor="#FFFFFF"> +<br> +</body> +</html> \ No newline at end of file Modified: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TDiamondGradientSampler/_Body.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TDiamondGradientSampler/_Body.htm 2012-10-07 22:13:46 UTC (rev 1981) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TDiamondGradientSampler/_Body.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -1,17 +1,16 @@ -<html> -<head> -<title>G32Version</title> -<link rel="stylesheet" href="../../../../../styles/default.css" type="text/css"> -<meta name="Ancestor" content="TCustomCenterRadiusAngleLutGradientSampler"> -</head> -<body bgcolor="#FFFFFF"> -<h2>Description</h2> -<p class="Body"><em>Diamond</em> color gradient</p> -<p class="Body">A diamond shaped color gradient, which can be rotated using the <a href="./Properties/Angle.htm">angle</a> property and scaled using the <a href="./Properties/Radius.htm">radius</a> property.</p> -<p align="center" class="Body"><img src="../../../../../Images/img_042.png" width="100" height="100"> <img src="../../../../../Images/img_043.png" width="100" height="100"> <img src="../../../../../Images/img_044.png" width="100" height="100"><br> - <span class="EmptyRef">Figure 1: Output of a TDiamondGradientSampler with several colors and a certain angle and radius (wrap mode: clamp, mirror, repeat)</span> -</p> -<p id="hidden">[See Also] <a href="../../../../Examples.htm#GradSampler%20Example">GradSampler Example</a></p> -<br> -</body> +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../styles/default.css" type="text/css"> +<meta name="Ancestor" content="TCustomCenterRadiusAngleLutGradientSampler"> +</head> +<body bgcolor="#FFFFFF"> +<h2>Description</h2> +<p class="Body"><em>Diamond</em> shaped color gradient</p> +<p align="center" class="Body"><img src="../../../../../Images/img_042.png" width="100" height="100"> <img src="../../../../../Images/img_043.png" width="100" height="100"> <img src="../../../../../Images/img_044.png" width="100" height="100"><br> + <span class="EmptyRef">Figure 1: Output of a TDiamondGradientSampler with several colors and a certain angle and radius (wrap mode: clamp, mirror, repeat)</span> +</p> +<p id="hidden">[See Also] <a href="../../../../Examples.htm#GradSampler%20Example">GradSampler Example</a></p> +<br> +</body> </html> \ No newline at end of file Modified: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TInvertedDistanceWeightingSampler/_Body.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TInvertedDistanceWeightingSampler/_Body.htm 2012-10-07 22:13:46 UTC (rev 1981) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TInvertedDistanceWeightingSampler/_Body.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -1,17 +1,17 @@ -<html> -<head> -<title>G32Version</title> -<link rel="stylesheet" href="../../../../../styles/default.css" type="text/css"> -<meta name="Ancestor" content="TCustomArbitrarySparsePointGradientSampler"> -</head> -<body bgcolor="#FFFFFF"> -<h2>Description</h2> -<p class="Body">A sparse point <em>inverted distance weighting</em> color gradient interpolation.<br></p> -<p class="Body">The <a href="http://en.wikipedia.org/wiki/Inverse_distance_weighting">inverted distance weighting</a> method uses a ratio of the inverse distances to each of the given points to determine the color of the pixel at the current point. It is a bit like having spotlights of color at each point which interacts with each other, as the light spreads out to a uniform average of all the given colors at infinity. For a <a href="./Properties/Power.htm">Power</a> of 2 the interpolation is also called Shepards. For lower power will sharpen the points of color, while higher power values approach the <a href="../TVoronoi/_body.htm">TVoronoiSampler</a> sampler.</p> -<p align="center" class="Body"><img src="../../../../../Images/img_035.png" width="100" height="100"> <img src="../../../../../Images/img_036.png" width="100" height="100"> <img src="../../../../../Images/img_037.png" width="100" height="100"> <img src="../../../../../Images/img_038.png" width="100" height="100"><br> - <span class="EmptyRef">Figure 1: Output of a TInvertedDistanceWeightingSampler with the underlying polygon vertices marked with circles (power = 1, 2, 4, 8)</span> -</p> -<p id="hidden">[See Also] <a href="../../../../Examples.htm#GradSampler%20Example">GradSampler Example</a></p> -<br> -</body> +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../../styles/default.css" type="text/css"> +<meta name="Ancestor" content="TCustomArbitrarySparsePointGradientSampler"> +</head> +<body bgcolor="#FFFFFF"> +<h2>Description</h2> +<p class="Body">A sparse point <em>inverted distance weighting</em> color gradient interpolation.<br></p> +<p class="Body">The <a href="http://en.wikipedia.org/wiki/Inverse_distance_weighting">inverted distance weighting</a> method uses a ratio of the inverse distances to each of the given points to determine the color of the pixel at the current point. It is a bit like having spotlights of color at each point which interacts with each other, as the light spreads out to a uniform average of all the given colors at infinity. For a <a href="./Properties/Power.htm">Power</a> of 2 the interpolation is also called Shepards. For lower power will sharpen the points of color, while higher power values approach the <a href="../TVoronoiSampler/_body.htm">TVoronoiSampler</a> sampler.</p> +<p align="center" class="Body"><img src="../../../../../Images/img_035.png" width="100" height="100"> <img src="../../../../../Images/img_036.png" width="100" height="100"> <img src="../../../../../Images/img_037.png" width="100" height="100"> <img src="../../../../../Images/img_038.png" width="100" height="100"><br> + <span class="EmptyRef">Figure 1: Output of a TInvertedDistanceWeightingSampler with the underlying polygon vertices marked with circles (power = 1, 2, 4, 8)</span> +</p> +<p id="hidden">[See Also] <a href="../../../../Examples.htm#GradSampler%20Example">GradSampler Example</a></p> +<br> +</body> </html> \ No newline at end of file Added: trunk/Documentation/Source/Units/GR32_ColorGradients/Routines/Color32GradientStop.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Routines/Color32GradientStop.htm (rev 0) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Routines/Color32GradientStop.htm 2012-10-07 22:18:22 UTC (rev 1982) @@ -0,0 +1,12 @@ +<html> +<head> +<title>G32Version</title> +<link rel="stylesheet" href="../../../../styles/default.css" type="text/css"> +</head> +<body bgcolor="#FFFFFF"> + +<p class="Decl"><b>function</b> Color32GradientStop(Color: TColor32; Offset: TFloat): TColor32GradientStop; <b>overload</b>; <b>inline</b>;</p> +<br> + +</body> +</html> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <CW...@us...> - 2012-10-07 22:13:52
|
Revision: 1981 http://graphics32.svn.sourceforge.net/graphics32/?rev=1981&view=rev Author: CWBudde Date: 2012-10-07 22:13:46 +0000 (Sun, 07 Oct 2012) Log Message: ----------- + added further color gradient documentation Added Paths: ----------- trunk/Documentation/Source/Additional Topics/Color Gradients.htm Added: trunk/Documentation/Source/Additional Topics/Color Gradients.htm =================================================================== --- trunk/Documentation/Source/Additional Topics/Color Gradients.htm (rev 0) +++ trunk/Documentation/Source/Additional Topics/Color Gradients.htm 2012-10-07 22:13:46 UTC (rev 1981) @@ -0,0 +1,103 @@ +<html> +<head> + <title>Color Gradients</title> + <link rel="stylesheet" href="../../Styles/Default.css" type="text/css"> +</head> +<body bgcolor="#FFFFFF"> +<h2 class="Body">Color Gradients</h2> +<p class="Body">In computer graphics, a color gradient (sometimes called a color ramp or color progression) specifies a range of position-dependent colors, usually used to fill a region. The colors produced by a gradient vary continuously with position, producing smooth color transitions</p> +<p class="Body">With version 2.0 of the Graphics32 library, color gradients are now possible in many different ways. There are hardly any limitations in the number of color stops or number of interpolation steps. Also for all gradients different wrap modes have been implemented (where possible). Furthermore several useful geometric distortions have been implemented such as linear, radial, conical, diamond, X, XY, Squared(XY). Finally some sparse point color interpolators have been implemented that can be used for simple mesh gradients.</p> +<h2 class="Body">Simple 2-Point Linear Gradients</h2> +<p class="Body">Classic color gradients only use 2 colors with a linear transition from one color to the other color, as can be seen in Figure 1.</p> +<p align="center" class="Body"><img src="../../Images/img_069.png" width="100" height="100"> <img src="../../Images/img_070.png" width="100" height="100"> <img src="../../Images/img_071.png" width="100" height="100"> <img src="../../Images/img_072.png" width="100" height="100"><br> +<span class="EmptyRef">Figure 1: Simple 2-point linear gradients</span></p> +<p class="Body">The code, which is necessary to build the above gradients is very simple. In fact a linear gradient sampler is created and the values for each pixels are calculated</p> +<div align="center"> + <table border="0"> + <tr> + <th width="761" scope="col">Code example (Linear Gradient Sampler) </th> + </tr> + <tr> + <td><pre class="brush: delphi;"> +var + X, Y: Integer; + Sampler: TLinearGradientSampler; +begin + with Bitmap do + begin + SetSize(100, 100); + + Sampler := TLinearGradientSampler.Create; + try + Sampler.SimpleGradient(FloatPoint(0, 0), clBlue32, FloatPoint(0, 100), clRed32); + Sampler.PrepareSampling; + for Y := 0 to Width - 1 do + for X := 0 to Height - 1 do + Pixel[X, Y] := Sampler.GetSampleInt(X, Y); + finally + Sampler.Free; + end; + end; +end; +</pre></td> + </tr> + </table> +</div> + +<br> +<h2 class="Body">Simple 2-Point Radial Gradients</h2> +<p class="Body">Another classical color gradient supported by Graphics32 (since version 2.0.0) is the circular gradient. A circular gradient is specified as a circle that has one color and a focus (the center of the circle) that has another. Colors are calculated by linear interpolation based on distance from the focus. The distance from the focus is mapped using a radius property</p> +<p align="center" class="Body"><img src="../../Images/img_073.png" width="100" height="100"> <img src="../../Images/img_074.png" width="100" height="100"> <img src="../../Images/img_075.png" width="100" height="100"> <img src="../../Images/img_076.png" width="100" height="100"><br> +<span class="EmptyRef">Figure 2: Simple 2-point circular gradients</span></p> +<p class="Body">The code, which is necessary to build the above gradients is very simple. In fact a linear gradient sampler is created and the values for each pixels are calculated</p> +<div align="center"> + <table border="0"> + <tr> + <th width="761" scope="col">Code example (Radial Gradient Sampler) </th> + </tr> + <tr> + <td><pre class="brush: delphi;">var + X, Y: Integer; + Sampler: TRadialGradientSampler; +begin + with Bitmap do + begin + SetSize(100, 100); + + Sampler := TRadialGradientSampler.Create; + try + Sampler.Center := FloatPoint(Width div 2, Height div 2); + Sampler.Radius := Width div 2; + Sampler.Gradient.StartColor := clBlue32; + Sampler.Gradient.EndColor := clRed32; + Sampler.PrepareSampling; + for Y := 0 to Width - 1 do + for X := 0 to Height - 1 do + Pixel[X, Y] := Sampler.GetSampleInt(X, Y); + finally + Sampler.Free; + end; + end; +end; +</pre></td> + </tr> + </table> +</div> + +<br> +<h2 class="Body">Wrap Modes</h2> +<p class="Body">As can be seen in Figure 2, the color outside the defined radius is clamped. While this might be desired and sufficient for typical cases, it is alsp possible to use other wrap modes. Figure 3 shows the differences between all the different wrap modes available.</p> +<p align="center" class="Body"><img src="../../Images/img_073.png" width="100" height="100"> <img src="../../Images/img_077.png" width="100" height="100"> <img src="../../Images/img_078.png" width="100" height="100"><br> +<span class="EmptyRef">Figure 3: Different wrap modes: clamp, mirror, repeat</span></p> +<p class="Body">Please note, that the repeat wrap mode may cause rough and pixelized edges rather than smooth transitions, when the color starts to repeat. This can be corrected either by super sampling the gradient sampler (if a sampler is used opposed to a polygon filler) or by adding further color stops.</p> +<p align="center" class="Body"><img src="../../Images/img_079.png" width="100" height="100"> <img src="../../Images/img_080.png" width="100" height="100"><br> +<span class="EmptyRef">Figure 4: Fixing rough edges with wrap mode: repeat (supersampled, corrected using a 3-point gradient)</span></p> +<br> + +<h2 class="Body">More than 2 colors</h2> +<p class="Body">So far, the presented figures only featured 2 colors, but as it has already been mentioned with Graphics32 there are hardly any limitations in the number of color stops. Further color stops can simply be added at any time using the AddColorStop() method. Or the gradient can be defined directly using the method SetColors() method. Both are members of the TColor32Gradient, which is responsible to manage all color stops.</p> + + +<p id="Hidden">[See Also] <a href="../Units/GR32_ColorGradients/_Body.htm">GR32_ColorGradients</a></p> +</body> +</html> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <CW...@us...> - 2012-10-07 22:11:56
|
Revision: 1980 http://graphics32.svn.sourceforge.net/graphics32/?rev=1980&view=rev Author: CWBudde Date: 2012-10-07 22:11:49 +0000 (Sun, 07 Oct 2012) Log Message: ----------- * updated color gradients and documentation Modified Paths: -------------- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TLinearGradientLookupTablePolygonFiller/_Body.htm trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TLinearGradientPolygonFiller/_Body.htm trunk/Source/GR32_ColorGradients.pas Added Paths: ----------- trunk/Documentation/Images/img_069.png trunk/Documentation/Images/img_070.png trunk/Documentation/Images/img_071.png trunk/Documentation/Images/img_072.png trunk/Documentation/Images/img_073.png trunk/Documentation/Images/img_074.png trunk/Documentation/Images/img_075.png trunk/Documentation/Images/img_076.png trunk/Documentation/Images/img_077.png trunk/Documentation/Images/img_078.png trunk/Documentation/Images/img_079.png trunk/Documentation/Images/img_080.png Added: trunk/Documentation/Images/img_069.png =================================================================== (Binary files differ) Property changes on: trunk/Documentation/Images/img_069.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/Documentation/Images/img_070.png =================================================================== (Binary files differ) Property changes on: trunk/Documentation/Images/img_070.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/Documentation/Images/img_071.png =================================================================== (Binary files differ) Property changes on: trunk/Documentation/Images/img_071.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/Documentation/Images/img_072.png =================================================================== (Binary files differ) Property changes on: trunk/Documentation/Images/img_072.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/Documentation/Images/img_073.png =================================================================== (Binary files differ) Property changes on: trunk/Documentation/Images/img_073.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/Documentation/Images/img_074.png =================================================================== (Binary files differ) Property changes on: trunk/Documentation/Images/img_074.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/Documentation/Images/img_075.png =================================================================== (Binary files differ) Property changes on: trunk/Documentation/Images/img_075.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/Documentation/Images/img_076.png =================================================================== (Binary files differ) Property changes on: trunk/Documentation/Images/img_076.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/Documentation/Images/img_077.png =================================================================== (Binary files differ) Property changes on: trunk/Documentation/Images/img_077.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/Documentation/Images/img_078.png =================================================================== (Binary files differ) Property changes on: trunk/Documentation/Images/img_078.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/Documentation/Images/img_079.png =================================================================== (Binary files differ) Property changes on: trunk/Documentation/Images/img_079.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/Documentation/Images/img_080.png =================================================================== (Binary files differ) Property changes on: trunk/Documentation/Images/img_080.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TLinearGradientLookupTablePolygonFiller/_Body.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TLinearGradientLookupTablePolygonFiller/_Body.htm 2012-10-07 19:40:57 UTC (rev 1979) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TLinearGradientLookupTablePolygonFiller/_Body.htm 2012-10-07 22:11:49 UTC (rev 1980) @@ -5,6 +5,12 @@ <meta name="Ancestor" content="TCustomLinearGradientPolygonFiller"> </head> <body bgcolor="#FFFFFF"> +<h2>Description</h2> +<p class="Body">A <em>Linear color gradient</em> is specified by a two or more points, and a color at each point.<br></p> +<p class="Body">The colors along the line through those points are calculated using linear interpolation, then extended perpendicular to that line.</p> +<p align="center" class="Body"><img src="../../../../../Images/img_057.png" width="100" height="100"> <img src="../../../../../Images/img_058.png" width="100" height="100"> <img src="../../../../../Images/img_059.png" width="100" height="100"><br> +<span class="EmptyRef">Figure 1: Polygon filled with the TLinearLookupTableGradientPolygonFiller (wrap: clamp, mirror and repeat)</span> +</p> <br> </body> </html> \ No newline at end of file Modified: trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TLinearGradientPolygonFiller/_Body.htm =================================================================== --- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TLinearGradientPolygonFiller/_Body.htm 2012-10-07 19:40:57 UTC (rev 1979) +++ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TLinearGradientPolygonFiller/_Body.htm 2012-10-07 22:11:49 UTC (rev 1980) @@ -5,6 +5,12 @@ <meta name="Ancestor" content="TCustomLinearGradientPolygonFiller"> </head> <body bgcolor="#FFFFFF"> +<h2>Description</h2> +<p class="Body">A <em>Linear color gradient</em> is specified by a two or more points, and a color at each point.<br></p> +<p class="Body">The colors along the line through those points are calculated using linear interpolation, then extended perpendicular to that line.</p> +<p align="center" class="Body"><img src="../../../../../Images/img_057.png" width="100" height="100"><br> +<span class="EmptyRef">Figure 1: Polygon filled with the TLinearGradientPolygonFiller</span> +</p> <br> </body> </html> \ No newline at end of file Modified: trunk/Source/GR32_ColorGradients.pas =================================================================== --- trunk/Source/GR32_ColorGradients.pas 2012-10-07 19:40:57 UTC (rev 1979) +++ trunk/Source/GR32_ColorGradients.pas 2012-10-07 22:11:49 UTC (rev 1980) @@ -257,7 +257,7 @@ property Initialized: Boolean read FInitialized; public - constructor Create; overload; virtual; + constructor Create(WrapMode: TWrapMode = wmMirror); overload; virtual; constructor Create(ColorGradient: TColor32Gradient); overload; virtual; destructor Destroy; override; @@ -284,7 +284,7 @@ property LutMask: Integer read FLutMask; property WrapProc: TWrapProc read FWrapProc; public - constructor Create; override; + constructor Create(WrapMode: TWrapMode = wmMirror); override; destructor Destroy; override; end; @@ -295,7 +295,7 @@ procedure AssignTo(Dest: TPersistent); override; procedure Transform(var X, Y: TFloat); virtual; public - constructor Create; override; + constructor Create(WrapMode: TWrapMode = wmMirror); override; property Center: TFloatPoint read FCenter write FCenter; end; @@ -321,7 +321,7 @@ procedure AssignTo(Dest: TPersistent); override; procedure RadiusChanged; virtual; public - constructor Create; override; + constructor Create(WrapMode: TWrapMode = wmMirror); override; property Radius: TFloat read FRadius write SetRadius; end; @@ -346,7 +346,7 @@ procedure RadiusChanged; override; procedure Transform(var X, Y: TFloat); override; public - constructor Create; override; + constructor Create(WrapMode: TWrapMode = wmMirror); override; property Angle: TFloat read FAngle write SetAngle; end; @@ -366,8 +366,13 @@ protected procedure UpdateInternals; override; public + procedure SimpleGradient(StartPoint: TFloatPoint; StartColor: TColor32; + EndPoint: TFloatPoint; EndColor: TColor32); virtual; + procedure SetPoints(StartPoint, EndPoint: TFloatPoint); virtual; + function GetSampleFloat(X, Y: TFloat): TColor32; override; end; + TLinearGradientSampler = TXGradientSampler; TXYGradientSampler = class(TCustomCenterRadiusAngleLutGradientSampler) private @@ -2375,12 +2380,12 @@ { TCustomGradientSampler } -constructor TCustomGradientSampler.Create; +constructor TCustomGradientSampler.Create(WrapMode: TWrapMode); begin - inherited; + inherited Create; FGradient := TColor32Gradient.Create(clNone32); FGradient.OnGradientColorsChanged := GradientChangedHandler; - FWrapMode := wmMirror; + FWrapMode := WrapMode; WrapModeChanged; end; @@ -2478,10 +2483,10 @@ end end; -constructor TCustomLookUpTableGradientSampler.Create; +constructor TCustomLookUpTableGradientSampler.Create(WrapMode: TWrapMode = wmMirror); begin FGradientLUT := TColor32LookupTable.Create; - inherited; + inherited Create(WrapMode); end; destructor TCustomLookUpTableGradientSampler.Destroy; @@ -2515,9 +2520,9 @@ TCustomCenterLutGradientSampler(Dest).FCenter := Self.FCenter; end; -constructor TCustomCenterLutGradientSampler.Create; +constructor TCustomCenterLutGradientSampler.Create(WrapMode: TWrapMode = wmMirror); begin - inherited; + inherited Create(WrapMode); end; @@ -2555,9 +2560,9 @@ { TCustomCenterRadiusLutGradientSampler } -constructor TCustomCenterRadiusLutGradientSampler.Create; +constructor TCustomCenterRadiusLutGradientSampler.Create(WrapMode: TWrapMode = wmMirror); begin - inherited; + inherited Create(WrapMode); FRadius := 1; RadiusChanged; end; @@ -2604,9 +2609,9 @@ { TCustomCenterRadiusAngleLutGradientSampler } -constructor TCustomCenterRadiusAngleLutGradientSampler.Create; +constructor TCustomCenterRadiusAngleLutGradientSampler.Create(WrapMode: TWrapMode = wmMirror); begin - inherited; + inherited Create(WrapMode); FAngle := 0; FSinCos.X := 1; FSinCos.Y := 0; @@ -2683,6 +2688,25 @@ Result := FLutPtr^[FWrapProc(Round(X * FScale), FLutMask)]; end; +procedure TXGradientSampler.SetPoints(StartPoint, EndPoint: TFloatPoint); +begin + FCenter := StartPoint; + Radius := Distance(EndPoint, StartPoint); + Angle := 0.5 * Pi + GetAngleOfPt2FromPt1(EndPoint, StartPoint); +end; + +procedure TXGradientSampler.SimpleGradient(StartPoint: TFloatPoint; + StartColor: TColor32; EndPoint: TFloatPoint; EndColor: TColor32); +begin + SetPoints(StartPoint, EndPoint); + if Assigned(FGradient) then + begin + FGradient.ClearColors; + FGradient.StartColor := StartColor; + FGradient.EndColor := EndColor; + end; +end; + procedure TXGradientSampler.UpdateInternals; begin inherited; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ku...@us...> - 2012-10-07 19:41:04
|
Revision: 1979 http://graphics32.svn.sourceforge.net/graphics32/?rev=1979&view=rev Author: kusana Date: 2012-10-07 19:40:57 +0000 (Sun, 07 Oct 2012) Log Message: ----------- Linux Variants fix Modified Paths: -------------- trunk/Examples/Drawing/Blurs/Blurs.lpr Modified: trunk/Examples/Drawing/Blurs/Blurs.lpr =================================================================== --- trunk/Examples/Drawing/Blurs/Blurs.lpr 2012-10-07 19:18:53 UTC (rev 1978) +++ trunk/Examples/Drawing/Blurs/Blurs.lpr 2012-10-07 19:40:57 UTC (rev 1979) @@ -4,6 +4,7 @@ uses Interfaces, + Variants, Forms, imagesforlazarus, MainUnit in 'MainUnit.pas'; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ku...@us...> - 2012-10-07 19:18:59
|
Revision: 1978 http://graphics32.svn.sourceforge.net/graphics32/?rev=1978&view=rev Author: kusana Date: 2012-10-07 19:18:53 +0000 (Sun, 07 Oct 2012) Log Message: ----------- Linux version of lazbuild.bat Added Paths: ----------- trunk/Examples/lazbuild.sh Added: trunk/Examples/lazbuild.sh =================================================================== --- trunk/Examples/lazbuild.sh (rev 0) +++ trunk/Examples/lazbuild.sh 2012-10-07 19:18:53 UTC (rev 1978) @@ -0,0 +1,71 @@ +#!/bin/sh +# +# ~/.bash_aliases example: +# alias lazbuild="~/freepascal/laz/lazbuild" +# +if [ -f ~/.bash_aliases ]; then + . ~/.bash_aliases +fi +lazbuild Blending/PixelCombine/PixelCombine.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Blending/TextureBlend/TextureBlend.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Drawing/AntiAliasing/AntiAliasing.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Drawing/ArrowHead/ArrowHead.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Drawing/Blurs/Blurs.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Drawing/Clipper/Clipper.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Drawing/CubicSpline/CubicSpline.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Drawing/Curves/Curves.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Drawing/GammaCorrection/GammaCorrection.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Drawing/GradFills/GradFills.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Drawing/GradLines/GradLines.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Drawing/GradSampler/GradSampler.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Drawing/LineStippling/LineStippling.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Drawing/MeshGradients/MeshGradients.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Drawing/Polygons/Polygons.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Drawing/RenderText/RenderText.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Drawing/ScatterPlot/ScatterPlot.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Drawing/TextVPR/TextVPR.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild General/ByteMaps/ByteMaps.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild General/Image32/Image32.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild General/Mandelbrot/Mandelbrot.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild General/Rotate/Rotate.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Layers/ImgView_Layers/ImgView_Layers.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Layers/RotLayer/RotLayer.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Layers/Sprites/Sprites.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Resampling/NestedSampling/NestedSampling.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Resampling/PixelF/PixelF.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Resampling/Resamplers/Resamplers.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Transformation/ImgWarping/ImgWarping.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Transformation/Transform/Transform.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi +lazbuild Transformation/Visualization/Visualization.lpi +if [ $? -ne 0 ]; then echo 'Press ENTER key to continue...'; read -p '' nothing; fi + Property changes on: trunk/Examples/lazbuild.sh ___________________________________________________________________ Added: svn:executable + * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ku...@us...> - 2012-10-07 18:00:11
|
Revision: 1977 http://graphics32.svn.sourceforge.net/graphics32/?rev=1977&view=rev Author: kusana Date: 2012-10-07 18:00:05 +0000 (Sun, 07 Oct 2012) Log Message: ----------- Linux version of clean.bat Added Paths: ----------- trunk/Examples/clean.sh Added: trunk/Examples/clean.sh =================================================================== --- trunk/Examples/clean.sh (rev 0) +++ trunk/Examples/clean.sh 2012-10-07 18:00:05 UTC (rev 1977) @@ -0,0 +1,33 @@ +#!/bin/sh +rm -rf Blending/PixelCombine/lib +rm -rf Blending/TextureBlend/lib +rm -rf Drawing/AntiAliasing/lib +rm -rf Drawing/ArrowHead/lib +rm -rf Drawing/Blurs/lib +rm -rf Drawing/Clipper/lib +rm -rf Drawing/CubicSpline/lib +rm -rf Drawing/Curves/lib +rm -rf Drawing/GammaCorrection/lib +rm -rf Drawing/GradFills/lib +rm -rf Drawing/GradLines/lib +rm -rf Drawing/GradSampler/lib +rm -rf Drawing/LineStippling/lib +rm -rf Drawing/MeshGradients/lib +rm -rf Drawing/Polygons/lib +rm -rf Drawing/RenderText/lib +rm -rf Drawing/ScatterPlot/lib +rm -rf Drawing/TextVPR/lib +rm -rf General/ByteMaps/lib +rm -rf General/Image32/lib +rm -rf General/Mandelbrot/lib +rm -rf General/Rotate/lib +rm -rf Layers/ImgView_Layers/lib +rm -rf Layers/RotLayer/lib +rm -rf Layers/Sprites/lib +rm -rf Resampling/NestedSampling/lib +rm -rf Resampling/PixelF/lib +rm -rf Resampling/Resamplers/lib +rm -rf Transformation/ImgWarping/lib +rm -rf Transformation/Transform/lib +rm -rf Transformation/Visualization/lib + Property changes on: trunk/Examples/clean.sh ___________________________________________________________________ Added: svn:executable + * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ku...@us...> - 2012-10-07 17:29:02
|
Revision: 1976 http://graphics32.svn.sourceforge.net/graphics32/?rev=1976&view=rev Author: kusana Date: 2012-10-07 17:28:56 +0000 (Sun, 07 Oct 2012) Log Message: ----------- Build all Lazarus examples, assuming lazbuild in path and default primary config location Added Paths: ----------- trunk/Examples/lazbuild.bat Added: trunk/Examples/lazbuild.bat =================================================================== --- trunk/Examples/lazbuild.bat (rev 0) +++ trunk/Examples/lazbuild.bat 2012-10-07 17:28:56 UTC (rev 1976) @@ -0,0 +1,63 @@ +@echo off +lazbuild.exe Blending\PixelCombine\PixelCombine.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Blending\TextureBlend\TextureBlend.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Drawing\AntiAliasing\AntiAliasing.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Drawing\ArrowHead\ArrowHead.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Drawing\Blurs\Blurs.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Drawing\Clipper\Clipper.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Drawing\CubicSpline\CubicSpline.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Drawing\Curves\Curves.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Drawing\GammaCorrection\GammaCorrection.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Drawing\GradFills\GradFills.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Drawing\GradLines\GradLines.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Drawing\GradSampler\GradSampler.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Drawing\LineStippling\LineStippling.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Drawing\MeshGradients\MeshGradients.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Drawing\Polygons\Polygons.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Drawing\RenderText\RenderText.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Drawing\ScatterPlot\ScatterPlot.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Drawing\TextVPR\TextVPR.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe General\ByteMaps\ByteMaps.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe General\Image32\Image32.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe General\Mandelbrot\Mandelbrot.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe General\Rotate\Rotate.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Layers\ImgView_Layers\ImgView_Layers.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Layers\RotLayer\RotLayer.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Layers\Sprites\Sprites.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Resampling\NestedSampling\NestedSampling.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Resampling\PixelF\PixelF.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Resampling\Resamplers\Resamplers.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Transformation\ImgWarping\ImgWarping.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Transformation\Transform\Transform.lpi +IF ERRORLEVEL 1 PAUSE +lazbuild.exe Transformation\Visualization\Visualization.lpi +IF ERRORLEVEL 1 PAUSE This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ku...@us...> - 2012-10-07 17:13:25
|
Revision: 1975 http://graphics32.svn.sourceforge.net/graphics32/?rev=1975&view=rev Author: kusana Date: 2012-10-07 17:13:19 +0000 (Sun, 07 Oct 2012) Log Message: ----------- Clean lib output folders Added Paths: ----------- trunk/Examples/clean.bat Added: trunk/Examples/clean.bat =================================================================== --- trunk/Examples/clean.bat (rev 0) +++ trunk/Examples/clean.bat 2012-10-07 17:13:19 UTC (rev 1975) @@ -0,0 +1,32 @@ +@echo off +rmdir /S /Q Blending\PixelCombine\lib +rmdir /S /Q Blending\TextureBlend\lib +rmdir /S /Q Drawing\AntiAliasing\lib +rmdir /S /Q Drawing\ArrowHead\lib +rmdir /S /Q Drawing\Blurs\lib +rmdir /S /Q Drawing\Clipper\lib +rmdir /S /Q Drawing\CubicSpline\lib +rmdir /S /Q Drawing\Curves\lib +rmdir /S /Q Drawing\GammaCorrection\lib +rmdir /S /Q Drawing\GradFills\lib +rmdir /S /Q Drawing\GradLines\lib +rmdir /S /Q Drawing\GradSampler\lib +rmdir /S /Q Drawing\LineStippling\lib +rmdir /S /Q Drawing\MeshGradients\lib +rmdir /S /Q Drawing\Polygons\lib +rmdir /S /Q Drawing\RenderText\lib +rmdir /S /Q Drawing\ScatterPlot\lib +rmdir /S /Q Drawing\TextVPR\lib +rmdir /S /Q General\ByteMaps\lib +rmdir /S /Q General\Image32\lib +rmdir /S /Q General\Mandelbrot\lib +rmdir /S /Q General\Rotate\lib +rmdir /S /Q Layers\ImgView_Layers\lib +rmdir /S /Q Layers\RotLayer\lib +rmdir /S /Q Layers\Sprites\lib +rmdir /S /Q Resampling\NestedSampling\lib +rmdir /S /Q Resampling\PixelF\lib +rmdir /S /Q Resampling\Resamplers\lib +rmdir /S /Q Transformation\ImgWarping\lib +rmdir /S /Q Transformation\Transform\lib +rmdir /S /Q Transformation\Visualization\lib This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ku...@us...> - 2012-10-07 16:57:30
|
Revision: 1974 http://graphics32.svn.sourceforge.net/graphics32/?rev=1974&view=rev Author: kusana Date: 2012-10-07 16:57:23 +0000 (Sun, 07 Oct 2012) Log Message: ----------- Standard lib examples output folder Modified Paths: -------------- trunk/Examples/Blending/PixelCombine/PixelCombine.lpi trunk/Examples/Blending/TextureBlend/TextureBlend.lpi trunk/Examples/Drawing/AntiAliasing/AntiAliasing.lpi trunk/Examples/Drawing/ArrowHead/ArrowHead.lpi trunk/Examples/Drawing/Clipper/Clipper.lpi trunk/Examples/Drawing/CubicSpline/CubicSpline.lpi trunk/Examples/Drawing/Curves/Curves.lpi trunk/Examples/Drawing/GammaCorrection/GammaCorrection.lpi trunk/Examples/Drawing/GradFills/GradFills.lpi trunk/Examples/Drawing/GradLines/GradLines.lpi trunk/Examples/Drawing/GradSampler/GradSampler.lpi trunk/Examples/Drawing/LineStippling/LineStippling.lpi trunk/Examples/Drawing/MeshGradients/MeshGradients.lpi trunk/Examples/Drawing/Polygons/Polygons.lpi trunk/Examples/Drawing/RenderText/RenderText.lpi trunk/Examples/Drawing/ScatterPlot/ScatterPlot.lpi trunk/Examples/Drawing/TextVPR/TextVPR.lpi trunk/Examples/General/ByteMaps/ByteMaps.lpi trunk/Examples/General/Image32/Image32.lpi trunk/Examples/General/Mandelbrot/Mandelbrot.lpi trunk/Examples/General/Rotate/Rotate.lpi trunk/Examples/Layers/ImgView_Layers/ImgView_Layers.lpi trunk/Examples/Layers/RotLayer/RotLayer.lpi trunk/Examples/Layers/Sprites/Sprites.lpi trunk/Examples/Resampling/NestedSampling/NestedSampling.lpi trunk/Examples/Resampling/PixelF/PixelF.lpi trunk/Examples/Resampling/Resamplers/Resamplers.lpi trunk/Examples/Transformation/ImgWarping/ImgWarping.lpi trunk/Examples/Transformation/Transform/Transform.lpi trunk/Examples/Transformation/Visualization/Visualization.lpi Modified: trunk/Examples/Blending/PixelCombine/PixelCombine.lpi =================================================================== --- trunk/Examples/Blending/PixelCombine/PixelCombine.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Blending/PixelCombine/PixelCombine.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -15,7 +15,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> <ObjectPath Value="../../.."/> </SearchPaths> <Parsing> @@ -87,7 +87,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> <ObjectPath Value="../../.."/> </SearchPaths> <Parsing> Modified: trunk/Examples/Blending/TextureBlend/TextureBlend.lpi =================================================================== --- trunk/Examples/Blending/TextureBlend/TextureBlend.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Blending/TextureBlend/TextureBlend.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -26,7 +26,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="..\..\..\..\Packages\lib\$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> @@ -105,7 +105,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="..\..\..\..\Packages\lib\$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/Drawing/AntiAliasing/AntiAliasing.lpi =================================================================== --- trunk/Examples/Drawing/AntiAliasing/AntiAliasing.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Drawing/AntiAliasing/AntiAliasing.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -27,7 +27,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> @@ -99,7 +99,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/Drawing/ArrowHead/ArrowHead.lpi =================================================================== --- trunk/Examples/Drawing/ArrowHead/ArrowHead.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Drawing/ArrowHead/ArrowHead.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -27,7 +27,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> @@ -95,7 +95,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/Drawing/Clipper/Clipper.lpi =================================================================== --- trunk/Examples/Drawing/Clipper/Clipper.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Drawing/Clipper/Clipper.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -62,7 +62,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;..\..\..\Source"/> <OtherUnitFiles Value="../../../Source;..\..\..\Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/Drawing/CubicSpline/CubicSpline.lpi =================================================================== --- trunk/Examples/Drawing/CubicSpline/CubicSpline.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Drawing/CubicSpline/CubicSpline.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -27,7 +27,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> @@ -91,7 +91,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/Drawing/Curves/Curves.lpi =================================================================== --- trunk/Examples/Drawing/Curves/Curves.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Drawing/Curves/Curves.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -27,7 +27,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> @@ -99,7 +99,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/Drawing/GammaCorrection/GammaCorrection.lpi =================================================================== --- trunk/Examples/Drawing/GammaCorrection/GammaCorrection.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Drawing/GammaCorrection/GammaCorrection.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -25,7 +25,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> @@ -90,7 +90,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/Drawing/GradFills/GradFills.lpi =================================================================== --- trunk/Examples/Drawing/GradFills/GradFills.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Drawing/GradFills/GradFills.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -27,7 +27,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> @@ -109,7 +109,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/Drawing/GradLines/GradLines.lpi =================================================================== --- trunk/Examples/Drawing/GradLines/GradLines.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Drawing/GradLines/GradLines.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -19,7 +19,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> @@ -94,7 +94,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/Drawing/GradSampler/GradSampler.lpi =================================================================== --- trunk/Examples/Drawing/GradSampler/GradSampler.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Drawing/GradSampler/GradSampler.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -27,7 +27,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> @@ -109,7 +109,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/Drawing/LineStippling/LineStippling.lpi =================================================================== --- trunk/Examples/Drawing/LineStippling/LineStippling.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Drawing/LineStippling/LineStippling.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -19,7 +19,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> @@ -87,7 +87,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/Drawing/MeshGradients/MeshGradients.lpi =================================================================== --- trunk/Examples/Drawing/MeshGradients/MeshGradients.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Drawing/MeshGradients/MeshGradients.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -97,7 +97,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/Drawing/Polygons/Polygons.lpi =================================================================== --- trunk/Examples/Drawing/Polygons/Polygons.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Drawing/Polygons/Polygons.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -19,7 +19,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> @@ -98,7 +98,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/Drawing/RenderText/RenderText.lpi =================================================================== --- trunk/Examples/Drawing/RenderText/RenderText.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Drawing/RenderText/RenderText.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -21,7 +21,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="..\..\..\..\Packages\lib\$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> <ObjectPath Value="..\..\.."/> </SearchPaths> <Parsing> @@ -96,7 +96,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="..\..\..\..\Packages\lib\$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> <ObjectPath Value="..\..\.."/> </SearchPaths> <Parsing> Modified: trunk/Examples/Drawing/ScatterPlot/ScatterPlot.lpi =================================================================== --- trunk/Examples/Drawing/ScatterPlot/ScatterPlot.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Drawing/ScatterPlot/ScatterPlot.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -28,7 +28,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="..\..\..\..\Packages\lib\$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> @@ -93,7 +93,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="..\..\..\..\Packages\lib\$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/Drawing/TextVPR/TextVPR.lpi =================================================================== --- trunk/Examples/Drawing/TextVPR/TextVPR.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Drawing/TextVPR/TextVPR.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -27,7 +27,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> @@ -98,7 +98,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/General/ByteMaps/ByteMaps.lpi =================================================================== --- trunk/Examples/General/ByteMaps/ByteMaps.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/General/ByteMaps/ByteMaps.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -21,7 +21,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> @@ -98,7 +98,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/General/Image32/Image32.lpi =================================================================== --- trunk/Examples/General/Image32/Image32.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/General/Image32/Image32.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -19,7 +19,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> <ObjectPath Value="../../.."/> </SearchPaths> <Parsing> @@ -100,7 +100,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> <ObjectPath Value="../../.."/> </SearchPaths> <Parsing> Modified: trunk/Examples/General/Mandelbrot/Mandelbrot.lpi =================================================================== --- trunk/Examples/General/Mandelbrot/Mandelbrot.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/General/Mandelbrot/Mandelbrot.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -20,7 +20,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> @@ -103,7 +103,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/General/Rotate/Rotate.lpi =================================================================== --- trunk/Examples/General/Rotate/Rotate.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/General/Rotate/Rotate.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -25,7 +25,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> <ObjectPath Value="../../.."/> </SearchPaths> <Parsing> @@ -105,7 +105,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> <ObjectPath Value="../../.."/> </SearchPaths> <Parsing> Modified: trunk/Examples/Layers/ImgView_Layers/ImgView_Layers.lpi =================================================================== --- trunk/Examples/Layers/ImgView_Layers/ImgView_Layers.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Layers/ImgView_Layers/ImgView_Layers.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -24,7 +24,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> <ObjectPath Value="../../.."/> </SearchPaths> <Parsing> @@ -121,7 +121,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> <ObjectPath Value="../../.."/> </SearchPaths> <Parsing> Modified: trunk/Examples/Layers/RotLayer/RotLayer.lpi =================================================================== --- trunk/Examples/Layers/RotLayer/RotLayer.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Layers/RotLayer/RotLayer.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -24,7 +24,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> <ObjectPath Value="../../.."/> </SearchPaths> <Parsing> @@ -104,7 +104,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> <ObjectPath Value="../../.."/> </SearchPaths> <Parsing> Modified: trunk/Examples/Layers/Sprites/Sprites.lpi =================================================================== --- trunk/Examples/Layers/Sprites/Sprites.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Layers/Sprites/Sprites.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -25,7 +25,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> @@ -101,7 +101,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/Resampling/NestedSampling/NestedSampling.lpi =================================================================== --- trunk/Examples/Resampling/NestedSampling/NestedSampling.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Resampling/NestedSampling/NestedSampling.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -25,7 +25,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> @@ -110,7 +110,7 @@ <SearchPaths> <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/Resampling/PixelF/PixelF.lpi =================================================================== --- trunk/Examples/Resampling/PixelF/PixelF.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Resampling/PixelF/PixelF.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -19,7 +19,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> @@ -98,7 +98,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/Resampling/Resamplers/Resamplers.lpi =================================================================== --- trunk/Examples/Resampling/Resamplers/Resamplers.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Resampling/Resamplers/Resamplers.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -21,7 +21,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> @@ -124,7 +124,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/Transformation/ImgWarping/ImgWarping.lpi =================================================================== --- trunk/Examples/Transformation/ImgWarping/ImgWarping.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Transformation/ImgWarping/ImgWarping.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -22,7 +22,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> @@ -100,7 +100,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> Modified: trunk/Examples/Transformation/Transform/Transform.lpi =================================================================== --- trunk/Examples/Transformation/Transform/Transform.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Transformation/Transform/Transform.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -23,7 +23,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> <ObjectPath Value="../../.."/> </SearchPaths> <Parsing> @@ -101,7 +101,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> <ObjectPath Value="../../.."/> </SearchPaths> <Parsing> Modified: trunk/Examples/Transformation/Visualization/Visualization.lpi =================================================================== --- trunk/Examples/Transformation/Visualization/Visualization.lpi 2012-10-07 03:22:40 UTC (rev 1973) +++ trunk/Examples/Transformation/Visualization/Visualization.lpi 2012-10-07 16:57:23 UTC (rev 1974) @@ -25,7 +25,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> @@ -98,7 +98,7 @@ <IncludeFiles Value="../../../Source;$(ProjOutDir)"/> <Libraries Value="../../../../Packages/lib/$(TargetCPU)-$(TargetOS)"/> <OtherUnitFiles Value="../../../Source"/> - <UnitOutputDirectory Value="$(TargetCPU)-$(TargetOS)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2012-10-07 03:22:49
|
Revision: 1973 http://graphics32.svn.sourceforge.net/graphics32/?rev=1973&view=rev Author: angusj Date: 2012-10-07 03:22:40 +0000 (Sun, 07 Oct 2012) Log Message: ----------- Removed PNG files Removed Paths: ------------- trunk/Examples/Drawing/Blurs/GR32_Png.pas trunk/Examples/Drawing/Blurs/GR32_PngCompilerSwitches.inc trunk/Examples/Drawing/Blurs/GR32_PortableNetworkGraphic.pas trunk/Examples/Drawing/Blurs/images.res Deleted: trunk/Examples/Drawing/Blurs/GR32_Png.pas =================================================================== --- trunk/Examples/Drawing/Blurs/GR32_Png.pas 2012-10-07 03:20:45 UTC (rev 1972) +++ trunk/Examples/Drawing/Blurs/GR32_Png.pas 2012-10-07 03:22:40 UTC (rev 1973) @@ -1,1950 +0,0 @@ -unit GR32_PNG; - -(* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1 or LGPL 2.1 with linking exception - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * Alternatively, the contents of this file may be used under the terms of the - * Free Pascal modified version of the GNU Lesser General Public License - * Version 2.1 (the "FPC modified LGPL License"), in which case the provisions - * of this license are applicable instead of those above. - * Please see the file LICENSE.txt for additional information concerning this - * license. - * - * The Original Code is Graphics32 - * - * The Initial Developer of the Original Code is - * Christian-W. Budde - * - * Portions created by the Initial Developer are Copyright (C) 2000-2009 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * ***** END LICENSE BLOCK ***** *) - -interface - -{$I GR32.inc} -{$I GR32_PngCompilerSwitches.inc} - -uses - Classes, Graphics, SysUtils, GR32, GR32_PortableNetworkGraphic; - -type - TProgressEvent = procedure(Sender: TObject; Percent: Single) of object; - - TPortableNetworkGraphic32 = class(TPortableNetworkGraphic) - private - FProgressEvent : TProgressEvent; - procedure AssignPropertiesFromBitmap32(Bitmap32: TCustomBitmap32); - function GetBackgroundColor: TColor32; - protected - function GR32Scanline(Bitmap: TObject; Y: Integer): Pointer; virtual; - function GR32ScanlineProgress(Bitmap: TObject; Y: Integer): Pointer; virtual; - public - procedure AssignTo(Dest: TPersistent); override; - procedure Assign(Source: TPersistent); override; - - procedure DrawToBitmap32(Bitmap32: TCustomBitmap32); virtual; - - property Background: TColor32 read GetBackgroundColor; - property Progress: TProgressEvent read FProgressEvent write FProgressEvent; - end; - -procedure LoadBitmap32FromPNG(Bitmap: TBitmap32; const Filename: string); overload; {$IFDEF USEINLINING} inline; {$ENDIF} -procedure LoadBitmap32FromPNG(Bitmap: TBitmap32; Stream: TStream); overload; {$IFDEF USEINLINING} inline; {$ENDIF} -procedure SaveBitmap32ToPNG(Bitmap: TBitmap32; FileName: string); overload; {$IFDEF USEINLINING} inline; {$ENDIF} -procedure SaveBitmap32ToPNG(Bitmap: TBitmap32; Stream: TStream); overload; {$IFDEF USEINLINING} inline; {$ENDIF} - -implementation - -resourcestring - RCStrUnsupportedFormat = 'Unsupported Format'; - RCStrDataIncomplete = 'Data not complete'; - -type - TCustomPngNonInterlacedDecoder = class(TCustomPngDecoder) - protected - FBytesPerRow : Integer; - FRowByteSize : Integer; - procedure TransferData(Source: Pointer; Destination: PColor32); virtual; abstract; - public - constructor Create(Stream: TStream; Header: TChunkPngImageHeader; - Gamma: TChunkPngGamma = nil; Palette: TChunkPngPalette = nil; - Transparency : TCustomPngTransparency = nil); override; - destructor Destroy; override; - - procedure DecodeToScanline(Bitmap: TObject; ScanLineCallback: TScanLineCallback); override; - end; - - TPngNonInterlacedGrayscale1bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedGrayscale2bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedGrayscale4bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedGrayscale8bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedGrayscale16bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedTrueColor8bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedTrueColor16bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedPaletteDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedPalette8bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedGrayscaleAlpha8bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedGrayscaleAlpha16bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedTrueColorAlpha8bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedTrueColorAlpha16bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TCustomPngAdam7Decoder = class(TCustomPngDecoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); virtual; abstract; - public - constructor Create(Stream: TStream; Header: TChunkPngImageHeader; - Gamma: TChunkPngGamma = nil; Palette: TChunkPngPalette = nil; - Transparency : TCustomPngTransparency = nil); override; - destructor Destroy; override; - procedure DecodeToScanline(Bitmap: TObject; ScanLineCallback: TScanLineCallback); override; - end; - - TPngAdam7Grayscale1bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7Grayscale2bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7Grayscale4bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7Grayscale8bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7Grayscale16bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7TrueColor8bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7TrueColor16bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7Palette1bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7Palette2bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7Palette4bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7Palette8bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7GrayscaleAlpha8bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7GrayscaleAlpha16bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7TrueColorAlpha8bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7TrueColorAlpha16bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TCustomPngNonInterlacedEncoder = class(TCustomPngEncoder) - protected - FBytesPerRow : Integer; - FRowByteSize : Integer; - function ColorInPalette(Color: TColor32): Integer; virtual; - procedure TransferData(Source: PColor32; Destination: Pointer); virtual; abstract; - public - constructor Create(Stream: TStream; Header: TChunkPngImageHeader; - Gamma: TChunkPngGamma = nil; Palette: TChunkPngPalette = nil; - Transparency : TCustomPngTransparency = nil); override; - destructor Destroy; override; - procedure EncodeFromScanline(Bitmap: TObject; ScanLineCallback: TScanLineCallback); override; - end; - - TPngNonInterlacedGrayscale1bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPngNonInterlacedGrayscale2bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPngNonInterlacedGrayscale4bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPngNonInterlacedGrayscale8bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPngNonInterlacedTrueColor8bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPngNonInterlacedPalette1bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPngNonInterlacedPalette2bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPngNonInterlacedPalette4bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPngNonInterlacedPalette8bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPngNonInterlacedGrayscaleAlpha8bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPngNonInterlacedTrueColorAlpha8bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPalette24 = array of TRGB24; - - -procedure LoadBitmap32FromPNG(Bitmap: TBitmap32; const Filename: string); -begin - with TPortableNetworkGraphic32.Create do - begin - LoadFromFile(Filename); - AssignTo(Bitmap); - end; -end; - -procedure LoadBitmap32FromPNG(Bitmap: TBitmap32; Stream: TStream); -begin - with TPortableNetworkGraphic32.Create do - begin - LoadFromStream(Stream); - AssignTo(Bitmap); - end; -end; - -procedure SaveBitmap32ToPNG(Bitmap: TBitmap32; FileName: string); -begin - with TPortableNetworkGraphic32.Create do - begin - Assign(Bitmap); - SaveToFile(Filename); - end; -end; - -procedure SaveBitmap32ToPNG(Bitmap: TBitmap32; Stream: TStream); -begin - with TPortableNetworkGraphic32.Create do - begin - Assign(Bitmap); - SaveToStream(Stream); - end; -end; - - -{ TPortableNetworkGraphic32 } - -function TPortableNetworkGraphic32.GetBackgroundColor: TColor32; -var - ResultColor32: TColor32Entry absolute Result; -begin - if Assigned(FBackgroundChunk) then - begin - if FBackgroundChunk.Background is TPngBackgroundColorFormat04 then - with TPngBackgroundColorFormat04(FBackgroundChunk.Background) do - begin - ResultColor32.R := GraySampleValue; - ResultColor32.G := GraySampleValue; - ResultColor32.B := GraySampleValue; - ResultColor32.A := $FF; - end - else - if FBackgroundChunk.Background is TPngBackgroundColorFormat26 then - with TPngBackgroundColorFormat26(FBackgroundChunk.Background) do - begin - ResultColor32.R := RedSampleValue; - ResultColor32.G := GreenSampleValue; - ResultColor32.B := BlueSampleValue; - ResultColor32.A := $FF; - end; - if FBackgroundChunk.Background is TPngBackgroundColorFormat3 then - with TPngBackgroundColorFormat3(FBackgroundChunk.Background) do - begin - ResultColor32.R := PaletteEntry[PaletteIndex].R; - ResultColor32.G := PaletteEntry[PaletteIndex].R; - ResultColor32.B := PaletteEntry[PaletteIndex].R; - ResultColor32.A := $FF; - end; - end - else Result := $0; -end; - -function TPortableNetworkGraphic32.GR32Scanline(Bitmap: TObject; Y: Integer): Pointer; -begin - if Bitmap is TCustomBitmap32 - then Result := TCustomBitmap32(Bitmap).ScanLine[Y] - else Result := nil; -end; - -function TPortableNetworkGraphic32.GR32ScanlineProgress(Bitmap: TObject; - Y: Integer): Pointer; -begin - Result := GR32Scanline(Bitmap, Y); - if FImageHeader.Height > 0 - then FProgressEvent(Self, 100 * Y / FImageHeader.Height) - else FProgressEvent(Self, 100); -end; - -procedure TPortableNetworkGraphic32.DrawToBitmap32(Bitmap32: TCustomBitmap32); -var - DecoderClass : TCustomPngDecoderClass; - DataStream : TMemoryStream; -begin - DataStream := TMemoryStream.Create; - try - // decompress image data to data stream - DecompressImageDataToStream(DataStream); - - // reset data stream position - DataStream.Seek(0, soFromBeginning); - - case ImageHeader.InterlaceMethod of - imNone : - case ImageHeader.ColorType of - ctGrayscale : - case ImageHeader.BitDepth of - 1 : DecoderClass := TPngNonInterlacedGrayscale1bitDecoder; - 2 : DecoderClass := TPngNonInterlacedGrayscale2bitDecoder; - 4 : DecoderClass := TPngNonInterlacedGrayscale4bitDecoder; - 8 : DecoderClass := TPngNonInterlacedGrayscale8bitDecoder; - 16 : DecoderClass := TPngNonInterlacedGrayscale16bitDecoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - ctTrueColor : - case ImageHeader.BitDepth of - 8 : DecoderClass := TPngNonInterlacedTrueColor8bitDecoder; - 16 : DecoderClass := TPngNonInterlacedTrueColor16bitDecoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - ctIndexedColor : - case ImageHeader.BitDepth of - 1, 2, 4 : DecoderClass := TPngNonInterlacedPaletteDecoder; - 8 : DecoderClass := TPngNonInterlacedPalette8bitDecoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - ctGrayscaleAlpha : - case ImageHeader.BitDepth of - 8 : DecoderClass := TPngNonInterlacedGrayscaleAlpha8bitDecoder; - 16 : DecoderClass := TPngNonInterlacedGrayscaleAlpha16bitDecoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - ctTrueColorAlpha : - case ImageHeader.BitDepth of - 8 : DecoderClass := TPngNonInterlacedTrueColorAlpha8bitDecoder; - 16 : DecoderClass := TPngNonInterlacedTrueColorAlpha16bitDecoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - imAdam7 : - case ImageHeader.ColorType of - ctGrayscale : - case ImageHeader.BitDepth of - 1 : DecoderClass := TPngAdam7Grayscale1bitDecoder; - 2 : DecoderClass := TPngAdam7Grayscale2bitDecoder; - 4 : DecoderClass := TPngAdam7Grayscale4bitDecoder; - 8 : DecoderClass := TPngAdam7Grayscale8bitDecoder; - 16 : DecoderClass := TPngAdam7Grayscale16bitDecoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - ctTrueColor : - case ImageHeader.BitDepth of - 8 : DecoderClass := TPngAdam7TrueColor8bitDecoder; - 16 : DecoderClass := TPngAdam7TrueColor16bitDecoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - ctIndexedColor : - case ImageHeader.BitDepth of - 1 : DecoderClass := TPngAdam7Palette1bitDecoder; - 2 : DecoderClass := TPngAdam7Palette2bitDecoder; - 4 : DecoderClass := TPngAdam7Palette4bitDecoder; - 8 : DecoderClass := TPngAdam7Palette8bitDecoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - ctGrayscaleAlpha : - case ImageHeader.BitDepth of - 8 : DecoderClass := TPngAdam7GrayscaleAlpha8bitDecoder; - 16 : DecoderClass := TPngAdam7GrayscaleAlpha16bitDecoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - ctTrueColorAlpha : - case ImageHeader.BitDepth of - 8 : DecoderClass := TPngAdam7TrueColorAlpha8bitDecoder; - 16 : DecoderClass := TPngAdam7TrueColorAlpha16bitDecoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - - with DecoderClass.Create(DataStream, FImageHeader, FGammaChunk, FPaletteChunk) do - try - if Assigned(FProgressEvent) - then DecodeToScanline(Bitmap32, GR32ScanlineProgress) - else DecodeToScanline(Bitmap32, GR32Scanline); - finally - Free; - end; - finally - FreeAndNil(DataStream); - end; -end; - -function ColorIndexInPalette(Color: TColor32; Palette: TPalette24): Integer; -begin - for Result := 0 to Length(Palette) - 1 do - if (TColor32Entry(Color).R = Palette[Result].R) and - (TColor32Entry(Color).G = Palette[Result].G) and - (TColor32Entry(Color).B = Palette[Result].B) - then Exit; - Result := -1; -end; - -procedure TPortableNetworkGraphic32.AssignPropertiesFromBitmap32( - Bitmap32: TCustomBitmap32); -var - Index : Integer; - IsAlpha : Boolean; - IsGrayScale : Boolean; - IsPalette : Boolean; - Color : TColor32; - TempPalette : TPalette24; - TempAlpha : Byte; -begin - with Bitmap32 do - begin - // basic properties - ImageHeader.Width := Width; - ImageHeader.Height := Height; - ImageHeader.CompressionMethod := 0; - ImageHeader.InterlaceMethod := imNone; - - // initialize - SetLength(TempPalette, 0); - IsGrayScale := True; - IsPalette := True; - IsAlpha := False; - TempAlpha := 0; - - // check every pixel in the bitmap for the use of the alpha channel, - // whether the image is grayscale or whether the colors can be stored - // as a palette (and build the palette at the same time - for Index := 0 to Width * Height - 1 do - begin - Color := Bits[Index]; - - // check whether the palette is empty - if Length(TempPalette) = 0 then - begin - IsAlpha := TColor32Entry(Color).A < 255 ; - - // eventually store first alpha component - if IsAlpha - then TempAlpha := TColor32Entry(Color).A; - - SetLength(TempPalette, 1); - TempPalette[0].R := TColor32Entry(Color).R; - TempPalette[0].G := TColor32Entry(Color).G; - TempPalette[0].B := TColor32Entry(Color).B; - IsGrayScale := (TColor32Entry(Color).R = TColor32Entry(Color).G) and - (TColor32Entry(Color).B = TColor32Entry(Color).G); - end - else - begin - // check alpha channel - if (TColor32Entry(Color).A < 255) then - begin - if IsAlpha then - if IsPalette and (TempAlpha <> TColor32Entry(Color).A) - then IsPalette := False else - else TempAlpha := TColor32Entry(Color).A; - - IsAlpha := True; - end; - if ColorIndexInPalette(Color, TempPalette) < 0 then - begin - if IsPalette then - if (Length(TempPalette) < 256) then - begin - SetLength(TempPalette, Length(TempPalette) + 1); - TempPalette[Length(TempPalette) - 1].R := TColor32Entry(Color).R; - TempPalette[Length(TempPalette) - 1].G := TColor32Entry(Color).G; - TempPalette[Length(TempPalette) - 1].B := TColor32Entry(Color).B; - if IsGrayScale and not ((TColor32Entry(Color).R = TColor32Entry(Color).G) and - (TColor32Entry(Color).B = TColor32Entry(Color).G)) - then IsGrayScale := False; - end - else IsPalette := False - else - if not ((TColor32Entry(Color).R = TColor32Entry(Color).G) and - (TColor32Entry(Color).B = TColor32Entry(Color).G)) - then IsGrayScale := False; - end; - end; - - if IsAlpha and (not IsPalette) and (not IsGrayScale) - then Break; - end; - - // temporary fix for the case that a palette and an alpha channel has been detected - if IsPalette and IsAlpha - then IsPalette := False; - - // set image header - with ImageHeader do - if IsGrayScale then - if IsAlpha then - begin - ColorType := ctGrayscaleAlpha; - BitDepth := 8; - end - else - begin - ColorType := ctIndexedColor; // ctGrayscale - if Length(TempPalette) <= 2 - then BitDepth := 1 else - if Length(TempPalette) <= 4 - then BitDepth := 2 else - if Length(TempPalette) <= 16 - then BitDepth := 4 - else BitDepth := 8; - end else - if IsPalette then - begin - ColorType := ctIndexedColor; - if Length(TempPalette) <= 2 - then BitDepth := 1 else - if Length(TempPalette) <= 4 - then BitDepth := 2 else - if Length(TempPalette) <= 16 - then BitDepth := 4 - else BitDepth := 8; - end - else - if IsAlpha then - begin - ColorType := ctTrueColorAlpha; - BitDepth := 8; - end - else - begin - ColorType := ctTrueColor; - BitDepth := 8; - end; - - // eventually prepare palette - if ImageHeader.HasPalette then - begin - Assert(Length(TempPalette) <= 256); - - if not Assigned(FPaletteChunk) - then FPaletteChunk := TChunkPngPalette.Create(ImageHeader); - - FPaletteChunk.Count := Length(TempPalette); - for Index := 0 to Length(TempPalette) - 1 - do FPaletteChunk.PaletteEntry[Index] := TempPalette[Index]; - end; - - {$IFDEF StoreGamma} - // add linear gamma chunk - if not Assigned(FGammaChunk) - then FGammaChunk := TChunkPngGamma.Create(ImageHeader); - FGammaChunk.GammaAsSingle := 1; - {$ELSE} - // delete any gama correction table - if Assigned(FGammaChunk) - then FreeAndNil(FGammaChunk); - {$ENDIF} - end; -end; - -procedure TPortableNetworkGraphic32.Assign(Source: TPersistent); -var - EncoderClass : TCustomPngEncoderClass; - DataStream : TMemoryStream; -begin - if Source is TCustomBitmap32 then - with TCustomBitmap32(Source) do - begin - // Assign - AssignPropertiesFromBitmap32(TCustomBitmap32(Source)); - - case ImageHeader.ColorType of - ctGrayscale : - case ImageHeader.BitDepth of - 1 : EncoderClass := TPngNonInterlacedGrayscale1bitEncoder; - 2 : EncoderClass := TPngNonInterlacedGrayscale2bitEncoder; - 4 : EncoderClass := TPngNonInterlacedGrayscale4bitEncoder; - 8 : EncoderClass := TPngNonInterlacedGrayscale8bitEncoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - ctTrueColor : EncoderClass := TPngNonInterlacedTrueColor8bitEncoder; - ctIndexedColor : - case ImageHeader.BitDepth of - 1 : EncoderClass := TPngNonInterlacedPalette1bitEncoder; - 2 : EncoderClass := TPngNonInterlacedPalette2bitEncoder; - 4 : EncoderClass := TPngNonInterlacedPalette4bitEncoder; - 8 : EncoderClass := TPngNonInterlacedPalette8bitEncoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - ctGrayscaleAlpha : EncoderClass := TPngNonInterlacedGrayscaleAlpha8bitEncoder; - ctTrueColorAlpha : EncoderClass := TPngNonInterlacedTrueColorAlpha8bitEncoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - - DataStream := TMemoryStream.Create; - with DataStream do - try - with EncoderClass.Create(DataStream, FImageHeader, FGammaChunk, FPaletteChunk) do - try - if Assigned(FProgressEvent) - then EncodeFromScanline(TCustomBitmap32(Source), GR32ScanlineProgress) - else EncodeFromScanline(TCustomBitmap32(Source), GR32Scanline); - finally - Free; - end; - - // reset data stream position - DataStream.Seek(0, soFromBeginning); - - // compress image data from data stream - CompressImageDataFromStream(DataStream); - finally - FreeAndNil(DataStream); - end; - end - else inherited; -end; - -procedure TPortableNetworkGraphic32.AssignTo(Dest: TPersistent); -begin - if Dest is TCustomBitmap32 then - begin - TCustomBitmap32(Dest).Width := ImageHeader.Width; - TCustomBitmap32(Dest).Height := ImageHeader.Height; - DrawToBitmap32(TCustomBitmap32(Dest)); - end - else inherited; -end; - - -const - CRowStart : array [0..6] of Integer = (0, 0, 4, 0, 2, 0, 1); - CColumnStart : array [0..6] of Integer = (0, 4, 0, 2, 0, 1, 0); - CRowIncrement : array [0..6] of Integer = (8, 8, 8, 4, 4, 2, 2); - CColumnIncrement : array [0..6] of Integer = (8, 8, 4, 4, 2, 2, 1); - CGrayScaleTable1Bit : array [0..1] of Byte = (0, $FF); - CGrayScaleTable2Bit : array [0..3] of Byte = (0, $55, $AA, $FF); - CGrayScaleTable4Bit : array [0..15] of Byte = (0, $11, $22, $33, $44, $55, - $66, $77, $88, $99, $AA, $BB, $CC, $DD, $EE, $FF); - - -{ TCustomPngNonInterlacedDecoder } - -constructor TCustomPngNonInterlacedDecoder.Create(Stream: TStream; - Header: TChunkPngImageHeader; Gamma: TChunkPngGamma; - Palette: TChunkPngPalette; Transparency : TCustomPngTransparency); -begin - inherited; - FBytesPerRow := FHeader.BytesPerRow; - FRowByteSize := FBytesPerRow + 1; - GetMem(FRowBuffer[0], FRowByteSize); - GetMem(FRowBuffer[1], FRowByteSize); -end; - -destructor TCustomPngNonInterlacedDecoder.Destroy; -begin - Dispose(FRowBuffer[0]); - Dispose(FRowBuffer[1]); - inherited; -end; - -procedure TCustomPngNonInterlacedDecoder.DecodeToScanline( - Bitmap: TObject; ScanLineCallback: TScanLineCallback); -var - Index : Integer; - CurrentRow : Integer; - PixelByteSize : Integer; - UsedFilters : TAvailableAdaptiveFilterMethods; -begin - // initialize variables - CurrentRow := 0; - UsedFilters := []; - PixelByteSize := FHeader.PixelByteSize; - - FillChar(FRowBuffer[1 - CurrentRow]^[0], FRowByteSize, 0); - - for Index := 0 to FHeader.Height - 1 do - begin - // read data from stream - if FStream.Read(FRowBuffer[CurrentRow][0], FRowByteSize) <> FRowByteSize - then raise EPngError.Create(RCStrDataIncomplete); - - // filter current row - DecodeFilterRow(TAdaptiveFilterMethod(FRowBuffer[CurrentRow]^[0]), FRowBuffer[CurrentRow], FRowBuffer[1 - CurrentRow], FBytesPerRow, PixelByteSize); - - // log used row pre filters - case TAdaptiveFilterMethod(FRowBuffer[CurrentRow]) of - afmSub : UsedFilters := UsedFilters + [aafmSub]; - afmUp : UsedFilters := UsedFilters + [aafmUp]; - afmAverage : UsedFilters := UsedFilters + [aafmAverage]; - afmPaeth : UsedFilters := UsedFilters + [aafmPaeth]; - end; - - // transfer data from row to image - TransferData(@FRowBuffer[CurrentRow][1], ScanLineCallback(Bitmap, Index)); - - // flip current row - CurrentRow := 1 - CurrentRow; - end; - FHeader.AdaptiveFilterMethods := UsedFilters; -end; - - -{ TPngNonInterlacedGrayscale1bitDecoder } - -procedure TPngNonInterlacedGrayscale1bitDecoder.TransferData(Source: Pointer; - Destination: PColor32); -var - Index : Integer; - Src : PByte absolute Source; - BitIndex : Byte; -begin - BitIndex := 8; - - for Index := 0 to FHeader.Width - 1 do - begin - Dec(BitIndex); - PColor32Entry(Destination)^.R := FMappingTable[CGrayScaleTable1Bit[(Src^ shr BitIndex) and $1]]; - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := 255; - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Src); - end; - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedGrayscale2bitDecoder } - -procedure TPngNonInterlacedGrayscale2bitDecoder.TransferData(Source: Pointer; - Destination: PColor32); -var - Index : Integer; - Src : PByte absolute Source; - BitIndex : Byte; -begin - BitIndex := 8; - - for Index := 0 to FHeader.Width - 1 do - begin - Dec(BitIndex, 2); - PColor32Entry(Destination)^.R := FMappingTable[CGrayScaleTable2Bit[(Src^ shr BitIndex) and $3]]; - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := 255; - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Src); - end; - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedGrayscale4bitDecoder } - -procedure TPngNonInterlacedGrayscale4bitDecoder.TransferData(Source: Pointer; - Destination: PColor32); -var - Index : Integer; - Src : PByte absolute Source; - BitIndex : Byte; -begin - BitIndex := 8; - - for Index := 0 to FHeader.Width - 1 do - begin - Dec(BitIndex, 4); - PColor32Entry(Destination)^.R := FMappingTable[CGrayScaleTable4Bit[(Src^ shr BitIndex) and $F]]; - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := 255; - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Src); - end; - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedGrayscale8bitDecoder } - -procedure TPngNonInterlacedGrayscale8bitDecoder.TransferData(Source: Pointer; - Destination: PColor32); -var - Index : Integer; - Src : PByte absolute Source; -begin - for Index := 0 to FHeader.Width - 1 do - begin - PColor32Entry(Destination)^.R := FMappingTable[Src^]; Inc(Src); - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := 255; - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedGrayscale16bitDecoder } - -procedure TPngNonInterlacedGrayscale16bitDecoder.TransferData( - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PWord absolute Source; -begin - for Index := 0 to FHeader.Width - 1 do - begin - PColor32Entry(Destination)^.R := FMappingTable[Src^ and $FF]; Inc(Src); - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := 255; - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedTrueColor8bitDecoder } - -procedure TPngNonInterlacedTrueColor8bitDecoder.TransferData(Source: Pointer; - Destination: PColor32); -var - Index : Integer; - Src : PRGB24 absolute Source; -begin - for Index := 0 to FHeader.Width - 1 do - begin - PColor32Entry(Destination)^.R := FMappingTable[Src^.R]; - PColor32Entry(Destination)^.G := FMappingTable[Src^.G]; - PColor32Entry(Destination)^.B := FMappingTable[Src^.B]; - PColor32Entry(Destination)^.A := 255; - Inc(Src); - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedTrueColor16bitDecoder } - -procedure TPngNonInterlacedTrueColor16bitDecoder.TransferData( - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PRGB24Word absolute Source; -begin - for Index := 0 to FHeader.Width - 1 do - begin - PColor32Entry(Destination)^.R := FMappingTable[Src^.R and $FF]; - PColor32Entry(Destination)^.G := FMappingTable[Src^.G and $FF]; - PColor32Entry(Destination)^.B := FMappingTable[Src^.B and $FF]; - PColor32Entry(Destination)^.A := 255; - Inc(Src); - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedPaletteDecoder } - -procedure TPngNonInterlacedPaletteDecoder.TransferData(Source: Pointer; - Destination: PColor32); -var - Index : Integer; - Src : PByte absolute Source; - Palette : PRGB24Array; - Color : TRGB24; - BitIndex : Byte; - BitMask : Byte; - BitDepth : Byte; -begin - BitIndex := 8; - BitDepth := FHeader.BitDepth; - BitMask := (1 shl BitDepth) - 1; - Palette := PRGB24Array(FMappingTable); - - for Index := 0 to FHeader.Width - 1 do - begin - Dec(BitIndex, BitDepth); - Color := Palette[(Src^ shr BitIndex) and BitMask]; - PColor32Entry(Destination)^.R := Color.R; - PColor32Entry(Destination)^.G := Color.G; - PColor32Entry(Destination)^.B := Color.B; - PColor32Entry(Destination)^.A := FAlphaTable[(Src^ shr BitIndex) and BitMask]; - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Src); - end; - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedPalette8bitDecoder } - -procedure TPngNonInterlacedPalette8bitDecoder.TransferData(Source: Pointer; - Destination: PColor32); -var - Index : Integer; - Src : PByte absolute Source; - Palette : PRGB24Array; -begin - Palette := PRGB24Array(FMappingTable); - for Index := 0 to FHeader.Width - 1 do - begin - PColor32Entry(Destination)^.R := Palette[Src^].R; - PColor32Entry(Destination)^.G := Palette[Src^].G; - PColor32Entry(Destination)^.B := Palette[Src^].B; - PColor32Entry(Destination)^.A := FAlphaTable[Src^]; - Inc(Src); - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedGrayscaleAlpha8bitDecoder } - -procedure TPngNonInterlacedGrayscaleAlpha8bitDecoder.TransferData( - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PByte absolute Source; -begin - for Index := 0 to FHeader.Width - 1 do - begin - PColor32Entry(Destination)^.R := FMappingTable[Src^]; Inc(Src); - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := Src^; Inc(Src); - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedGrayscaleAlpha16bitDecoder } - -procedure TPngNonInterlacedGrayscaleAlpha16bitDecoder.TransferData( - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PWord absolute Source; -begin - for Index := 0 to FHeader.Width - 1 do - begin - PColor32Entry(Destination)^.R := FMappingTable[Src^ and $FF]; Inc(Src); - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := Src^ and $FF; Inc(Src); - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedTrueColorAlpha8bitDecoder } - -procedure TPngNonInterlacedTrueColorAlpha8bitDecoder.TransferData( - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PRGB32 absolute Source; -begin - for Index := 0 to FHeader.Width - 1 do - begin - PColor32Entry(Destination)^.R := FMappingTable[Src^.R]; - PColor32Entry(Destination)^.G := FMappingTable[Src^.G]; - PColor32Entry(Destination)^.B := FMappingTable[Src^.B]; - PColor32Entry(Destination)^.A := Src^.A; - Inc(Src); - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedTrueColorAlpha16bitDecoder } - -procedure TPngNonInterlacedTrueColorAlpha16bitDecoder.TransferData( - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PRGB32Word absolute Source; -begin - for Index := 0 to FHeader.Width - 1 do - begin - PColor32Entry(Destination)^.R := FMappingTable[Src^.R and $FF]; - PColor32Entry(Destination)^.G := FMappingTable[Src^.G and $FF]; - PColor32Entry(Destination)^.B := FMappingTable[Src^.B and $FF]; - PColor32Entry(Destination)^.A := Src^.A and $FF; - Inc(Src); - Inc(Destination); - end; -end; - - -{ TCustomPngAdam7Decoder } - -constructor TCustomPngAdam7Decoder.Create(Stream: TStream; - Header: TChunkPngImageHeader; Gamma: TChunkPngGamma; - Palette: TChunkPngPalette; Transparency : TCustomPngTransparency); -begin - inherited; - - // allocate row buffer memory - GetMem(FRowBuffer[0], FHeader.BytesPerRow + 1); - GetMem(FRowBuffer[1], FHeader.BytesPerRow + 1); -end; - -destructor TCustomPngAdam7Decoder.Destroy; -begin - Dispose(FRowBuffer[0]); - Dispose(FRowBuffer[1]); - inherited; -end; - -procedure TCustomPngAdam7Decoder.DecodeToScanline( - Bitmap: TObject; ScanLineCallback: TScanLineCallback); -var - CurrentRow : Integer; - RowByteSize : Integer; - PixelPerRow : Integer; - PixelByteSize : Integer; - CurrentPass : Integer; - PassRow : Integer; - UsedFilters : TAvailableAdaptiveFilterMethods; -begin - // initialize variables - CurrentRow := 0; - RowByteSize := 0; - UsedFilters := []; - PixelByteSize := FHeader.PixelByteSize; - - // The Adam7 interlacer uses 7 passes to create the complete image - for CurrentPass := 0 to 6 do - begin - // calculate some intermediate variables - PixelPerRow := (FHeader.Width - CColumnStart[CurrentPass] + CColumnIncrement[CurrentPass] - 1) div CColumnIncrement[CurrentPass]; - - with FHeader do - case ColorType of - ctGrayscale, ctIndexedColor: RowByteSize := (PixelPerRow * BitDepth + 7) div 8; - ctTrueColor: RowByteSize := (PixelPerRow * BitDepth * 3) div 8; - ctGrayscaleAlpha: RowByteSize := (PixelPerRow * BitDepth * 2) div 8; - ctTrueColorAlpha: RowByteSize := (PixelPerRow * BitDepth * 4) div 8; - else Continue; - end; - if RowByteSize = 0 - then Continue; - - PassRow := CRowStart[CurrentPass]; - - // clear previous row - FillChar(FRowBuffer[1 - CurrentRow]^[0], RowByteSize, 0); - - // process pixel - while PassRow < FHeader.Height do - begin - // get interlaced row data - if FStream.Read(FRowBuffer[CurrentRow][0], RowByteSize + 1) <> (RowByteSize + 1) - then raise EPngError.Create(RCStrDataIncomplete); - - DecodeFilterRow(TAdaptiveFilterMethod(FRowBuffer[CurrentRow]^[0]), FRowBuffer[CurrentRow], FRowBuffer[1 - CurrentRow], RowByteSize, PixelByteSize); - - // log used row pre filters - case TAdaptiveFilterMethod(FRowBuffer[CurrentRow]) of - afmSub : UsedFilters := UsedFilters + [aafmSub]; - afmUp : UsedFilters := UsedFilters + [aafmUp]; - afmAverage : UsedFilters := UsedFilters + [aafmAverage]; - afmPaeth : UsedFilters := UsedFilters + [aafmPaeth]; - end; - - // transfer and deinterlace image data - TransferData(CurrentPass, @FRowBuffer[CurrentRow][1], ScanLineCallback(Bitmap, PassRow)); - - // prepare for the next pass - Inc(PassRow, CRowIncrement[CurrentPass]); - CurrentRow := 1 - CurrentRow; - end; - end; - FHeader.AdaptiveFilterMethods := UsedFilters; -end; - - -{ TPngAdam7Grayscale1bitDecoder } - -procedure TPngAdam7Grayscale1bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - BitIndex : Integer; - Src : PByte absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - BitIndex := 8; - repeat - Dec(BitIndex); - PColor32Entry(Destination)^.R := FMappingTable[CGrayScaleTable1Bit[(Src^ shr BitIndex) and $1]]; - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := 255; - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Src); - end; - - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7Grayscale2bitDecoder } - -procedure TPngAdam7Grayscale2bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - BitIndex : Integer; - Src : PByte absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - BitIndex := 8; - repeat - Dec(BitIndex, 2); - PColor32Entry(Destination)^.R := FMappingTable[CGrayScaleTable2Bit[((Src^ shr BitIndex) and $3)]]; - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := 255; - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Src); - end; - - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7Grayscale4bitDecoder } - -procedure TPngAdam7Grayscale4bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - BitIndex : Integer; - Src : PByte absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - BitIndex := 8; - repeat - Dec(BitIndex, 4); - PColor32Entry(Destination)^.R := FMappingTable[CGrayScaleTable4Bit[((Src^ shr BitIndex) and $F)]]; - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := 255; - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Src); - end; - - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - -{ TPngAdam7Grayscale8bitDecoder } - -procedure TPngAdam7Grayscale8bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PByte absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - PColor32Entry(Destination)^.R := FMappingTable[Src^]; Inc(Src); - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := 255; - - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7Grayscale16bitDecoder } - -procedure TPngAdam7Grayscale16bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PWord absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - PColor32Entry(Destination)^.R := FMappingTable[Src^ and $FF]; Inc(Src); - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := 255; - - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7TrueColor8bitDecoder } - -procedure TPngAdam7TrueColor8bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PRGB24 absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - PColor32Entry(Destination)^.R := FMappingTable[Src^.R]; - PColor32Entry(Destination)^.G := FMappingTable[Src^.G]; - PColor32Entry(Destination)^.B := FMappingTable[Src^.B]; - PColor32Entry(Destination)^.A := 255; - - Inc(Src); - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7TrueColor16bitDecoder } - -procedure TPngAdam7TrueColor16bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PRGB24Word absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - PColor32Entry(Destination)^.R := FMappingTable[Src^.R and $FF]; - PColor32Entry(Destination)^.G := FMappingTable[Src^.G and $FF]; - PColor32Entry(Destination)^.B := FMappingTable[Src^.B and $FF]; - PColor32Entry(Destination)^.A := 255; - - Inc(Src); - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7Palette1bitDecoder } - -procedure TPngAdam7Palette1bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - BitIndex : Integer; - Src : PByte absolute Source; - Palette : PRGB24Array; - Color : TRGB24; -begin - BitIndex := 8; - Palette := PRGB24Array(FMappingTable); - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - Dec(BitIndex); - Color := Palette[(Src^ shr BitIndex) and $1]; - PColor32Entry(Destination)^.R := Color.R; - PColor32Entry(Destination)^.G := Color.G; - PColor32Entry(Destination)^.B := Color.B; - PColor32Entry(Destination)^.A := FAlphaTable[(Src^ shr BitIndex) and $1]; - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Src); - end; - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7Palette2bitDecoder } - -procedure TPngAdam7Palette2bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - BitIndex : Integer; - Src : PByte absolute Source; - Palette : PRGB24Array; - Color : TRGB24; -begin - BitIndex := 8; - Palette := PRGB24Array(FMappingTable); - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - Dec(BitIndex, 2); - Color := Palette[(Src^ shr BitIndex) and $3]; - PColor32Entry(Destination)^.R := Color.R; - PColor32Entry(Destination)^.G := Color.G; - PColor32Entry(Destination)^.B := Color.B; - PColor32Entry(Destination)^.A := FAlphaTable[(Src^ shr BitIndex) and $3]; - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Src); - end; - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7Palette4bitDecoder } - -procedure TPngAdam7Palette4bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - BitIndex : Integer; - Src : PByte absolute Source; - Palette : PRGB24Array; - Color : TRGB24; -begin - BitIndex := 8; - Palette := PRGB24Array(FMappingTable); - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - Dec(BitIndex, 4); - Color := Palette[(Src^ shr BitIndex) and $F]; - PColor32Entry(Destination)^.R := Color.R; - PColor32Entry(Destination)^.G := Color.G; - PColor32Entry(Destination)^.B := Color.B; - PColor32Entry(Destination)^.A := FAlphaTable[(Src^ shr BitIndex) and $F]; - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Src); - end; - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7Palette8bitDecoder } - -procedure TPngAdam7Palette8bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PByte absolute Source; - Palette : PRGB24Array; -begin - Palette := PRGB24Array(FMappingTable); - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - PColor32Entry(Destination)^.R := Palette[Src^].R; - PColor32Entry(Destination)^.G := Palette[Src^].G; - PColor32Entry(Destination)^.B := Palette[Src^].B; - PColor32Entry(Destination)^.A := FAlphaTable[Src^]; - - Inc(Src); - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7GrayscaleAlpha8bitDecoder } - -procedure TPngAdam7GrayscaleAlpha8bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PByte absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - PColor32Entry(Destination)^.R := FMappingTable[Src^]; Inc(Src); - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := Src^; Inc(Src); - - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7GrayscaleAlpha16bitDecoder } - -procedure TPngAdam7GrayscaleAlpha16bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PWord absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - PColor32Entry(Destination)^.R := FMappingTable[Src^ and $FF]; Inc(Src); - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := Src^ and $FF; Inc(Src); - - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7TrueColorAlpha8bitDecoder } - -procedure TPngAdam7TrueColorAlpha8bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - SrcPtr : PRGB32 absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - PColor32Entry(Destination)^.R := FMappingTable[SrcPtr^.R]; - PColor32Entry(Destination)^.G := FMappingTable[SrcPtr^.G]; - PColor32Entry(Destination)^.B := FMappingTable[SrcPtr^.B]; - PColor32Entry(Destination)^.A := SrcPtr^.A; - - Inc(SrcPtr); - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7TrueColorAlpha16bitDecoder } - -procedure TPngAdam7TrueColorAlpha16bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - SrcPtr : PRGB32Word absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - PColor32Entry(Destination)^.R := FMappingTable[SrcPtr^.R and $FF]; - PColor32Entry(Destination)^.G := FMappingTable[SrcPtr^.G and $FF]; - PColor32Entry(Destination)^.B := FMappingTable[SrcPtr^.B and $FF]; - PColor32Entry(Destination)^.A := SrcPtr^.A and $FF; - - Inc(SrcPtr); - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TCustomPngNonInterlacedEncoder } - -constructor TCustomPngNonInterlacedEncoder.Create(Stream: TStream; - Header: TChunkPngImageHeader; Gamma: TChunkPngGamma; - Palette: TChunkPngPalette; Transparency : TCustomPngTransparency); -begin - inherited; - FBytesPerRow := FHeader.BytesPerRow; - FRowByteSize := FBytesPerRow + 1; - GetMem(FRowBuffer[0], FRowByteSize); - GetMem(FRowBuffer[1], FRowByteSize); -end; - -destructor TCustomPngNonInterlacedEncoder.Destroy; -begin - Dispose(FRowBuffer[0]); - Dispose(FRowBuffer[1]); - inherited; -end; - -function TCustomPngNonInterlacedEncoder.ColorInPalette( - Color: TColor32): Integer; -var - Color24 : TRGB24; -begin - for Result := 0 to FPalette.Count - 1 do - begin - Color24 := FPalette.PaletteEntry[Result]; - if (TColor32Entry(Color).R = Color24.R) and - (TColor32Entry(Color).G = Color24.G) and - (TColor32Entry(Color).B = Color24.B) - then Exit; - end; - Result := -1; -end; - -procedure TCustomPngNonInterlacedEncoder.EncodeFromScanline(Bitmap: TObject; - ScanLineCallback: TScanLineCallback); -var - Index : Integer; - CurrentRow : Integer; - OutputRow : PByteArray; - TempBuffer : PByteArray; -begin - // initialize variables - CurrentRow := 0; - FillChar(FRowBuffer[1 - CurrentRow]^[0], FRowByteSize, 0); - - // check if pre filter is used and eventually calculate pre filter - if FHeader.ColorType <> ctIndexedColor then - begin - Assert(FRowByteSize = FBytesPerRow + 1); - GetMem(OutputRow, FRowByteSize); - GetMem(TempBuffer, FRowByteSize); - try - for Index := 0 to FHeader.Height - 1 do - begin - // transfer data from image to current row - TransferData(ScanLineCallback(Bitmap, Index), @FRowBuffer[CurrentRow][1]); - - // filter current row - EncodeFilterRow(FRowBuffer[CurrentRow], FRowBuffer[1 - CurrentRow], - OutputRow, TempBuffer, FBytesPerRow, FHeader.PixelByteSize); - Assert(OutputRow[0] in [0..4]); - - // write data to data stream - FStream.Write(OutputRow[0], FRowByteSize); - - // flip current row used - CurrentRow := 1 - CurrentRow; - end; - finally - Dispose(OutputRow); - Dispose(TempBuffer); - end; - end - else - for Index := 0 to FHeader.Height - 1 do - begin - // transfer data from image to current row - TransferData(ScanLineCallback(Bitmap, Index), @FRowBuffer[CurrentRow][1]); - - // set filter method to none - FRowBuffer[CurrentRow][0] := 0; - - // write data to data stream - FStream.Write(FRowBuffer[CurrentRow][0], FRowByteSize); - - // flip current row used - CurrentRow := 1 - CurrentRow; - end; -end; - - -{ TPngNonInterlacedGrayscale1bitEncoder } - -procedure TPngNonInterlacedGrayscale1bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PByte absolute Destination; - BitIndex : Byte; -begin - BitIndex := 8; - - for Index := 0 to FHeader.Width - 1 do - begin - Dec(BitIndex); - Dest^ := (Dest^ and not ($1 shl BitIndex)) or - (((PColor32Entry(Source)^.R shr 7) and $1) shl BitIndex); - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Dest); - end; - Inc(Source); - end; -end; - - -{ TPngNonInterlacedGrayscale2bitEncoder } - -procedure TPngNonInterlacedGrayscale2bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PByte absolute Destination; - BitIndex : Byte; -begin - BitIndex := 8; - - for Index := 0 to FHeader.Width - 1 do - begin - Dec(BitIndex, 2); - Dest^ := (Dest^ and not ($3 shl BitIndex)) or - (((PColor32Entry(Source)^.R shr 6) and $3) shl BitIndex); - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Dest); - end; - Inc(Source); - end; -end; - - -{ TPngNonInterlacedGrayscale4bitEncoder } - -procedure TPngNonInterlacedGrayscale4bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PByte absolute Destination; - BitIndex : Byte; -begin - BitIndex := 8; - - for Index := 0 to FHeader.Width - 1 do - begin - Dec(BitIndex, 4); - Dest^ := (Dest^ and not ($F shl BitIndex)) or - (((PColor32Entry(Source)^.R shr 4) and $F) shl BitIndex); - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Dest); - end; - Inc(Source); - end; -end; - - -{ TPngNonInterlacedGrayscale8bitEncoder } - -procedure TPngNonInterlacedGrayscale8bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PByte absolute Destination; -begin - for Index := 0 to FHeader.Width - 1 do - begin - Dest^ := PColor32Entry(Source)^.R; - Inc(Source); - Inc(Dest); - end; -end; - - -{ TPngNonInterlacedTrueColor8bitEncoder } - -procedure TPngNonInterlacedTrueColor8bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PRGB24 absolute Destination; -begin - for Index := 0 to FHeader.Width - 1 do - begin - Dest^.R := PColor32Entry(Source)^.R; - Dest^.G := PColor32Entry(Source)^.G ; - Dest^.B := PColor32Entry(Source)^.B; - Inc(Source); - Inc(Dest); - end; -end; - - -{ TPngNonInterlacedPalette1bitEncoder } - -procedure TPngNonInterlacedPalette1bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PByte absolute Destination; - BitIndex : Byte; -begin - BitIndex := 8; - - for Index := 0 to FHeader.Width - 1 do - begin - Dec(BitIndex); - Dest^ := (Dest^ and not ($1 shl BitIndex)) or - ((ColorInPalette(Source^) and $1) shl BitIndex); - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Dest); - end; - Inc(Source); - end; -end; - - -{ TPngNonInterlacedPalette2bitEncoder } - -procedure TPngNonInterlacedPalette2bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PByte absolute Destination; - BitIndex : Byte; -begin - BitIndex := 8; - - for Index := 0 to FHeader.Width - 1 do - begin - Dec(BitIndex, 2); - Dest^ := (Dest^ and not ($3 shl BitIndex)) or - ((ColorInPalette(Source^) and $3) shl BitIndex); - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Dest); - end; - Inc(Source); - end; -end; - - -{ TPngNonInterlacedPalette4bitEncoder } - -procedure TPngNonInterlacedPalette4bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PByte absolute Destination; - BitIndex : Byte; -begin - BitIndex := 8; - - for Index := 0 to FHeader.Width - 1 do - begin - Dec(BitIndex, 4); - Dest^ := (Dest^ and not ($F shl BitIndex)) or - ((ColorInPalette(Source^) and $F) shl BitIndex); - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Dest); - end; - Inc(Source); - end; -end; - - -{ TPngNonInterlacedPalette8bitEncoder } - -procedure TPngNonInterlacedPalette8bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PByte absolute Destination; -begin - for Index := 0 to FHeader.Width - 1 do - begin - Dest^ := ColorInPalette(Source^); - Inc(Source); - Inc(Dest); - end; -end; - - -{ TPngNonInterlacedGrayscaleAlpha8bitEncoder } - -procedure TPngNonInterlacedGrayscaleAlpha8bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PByte absolute Destination; -begin - for Index := 0 to FHeader.Width - 1 do - begin - Dest^ := PColor32Entry(Source)^.R; Inc(Dest); - Dest^ := PColor32Entry(Source)^.A; Inc(Dest); - Inc(Source); - end; -end; - - -{ TPngNonInterlacedTrueColorAlpha8bitEncoder } - -procedure TPngNonInterlacedTrueColorAlpha8bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PRGB32 absolute Destination; -begin - for Index := 0 to FHeader.Width - 1 do - begin - Dest^.R := PColor32Entry(Source)^.R; - Dest^.G := PColor32Entry(Source)^.G; - Dest^.B := PColor32Entry(Source)^.B; - Dest^.A := PColor32Entry(Source)^.A; - Inc(Dest); - Inc(Source); - end; -end; - -end. Deleted: trunk/Examples/Drawing/Blurs/GR32_PngCompilerSwitches.inc =================================================================== --- trunk/Examples/Drawing/Blurs/GR32_PngCompilerSwitches.inc 2012-10-07 03:20:45 UTC (rev 1972) +++ trunk/Examples/Drawing/Blurs/GR32_PngCompilerSwitches.inc 2012-10-07 03:22:40 UTC (rev 1973) @@ -1,39 +0,0 @@ -{ ------------------------------------------------------------------------- } -{ Various compiler switches to control the behaviour of th GR32_PNG library } -{ ---------------------------... [truncated message content] |
From: <an...@us...> - 2012-10-07 03:20:51
|
Revision: 1972 http://graphics32.svn.sourceforge.net/graphics32/?rev=1972&view=rev Author: angusj Date: 2012-10-07 03:20:45 +0000 (Sun, 07 Oct 2012) Log Message: ----------- Better resources management. Removed PNG stuff Modified Paths: -------------- trunk/Examples/Drawing/Blurs/MainUnit.dfm trunk/Examples/Drawing/Blurs/MainUnit.lfm trunk/Examples/Drawing/Blurs/MainUnit.pas trunk/Examples/Drawing/Blurs/Media.rc Modified: trunk/Examples/Drawing/Blurs/MainUnit.dfm =================================================================== --- trunk/Examples/Drawing/Blurs/MainUnit.dfm 2012-10-07 00:15:41 UTC (rev 1971) +++ trunk/Examples/Drawing/Blurs/MainUnit.dfm 2012-10-07 03:20:45 UTC (rev 1972) @@ -212,10 +212,9 @@ end end object OpenDialog: TOpenDialog - DefaultExt = 'png' + DefaultExt = 'jpg' Filter = - 'All (*.png;*.jpg;*.bmp)|*.png;*.jpg;*.bmp;|PNG Files (*.png)|*.p' + - 'ng|JPG Files (*.jpg)|*.jpg|Bitmap Files (*.bmp)|*.bmp' + 'Image Files (*.jpg;*.bmp)|*.jpg;*.bmp;' Options = [ofHideReadOnly, ofFileMustExist, ofEnableSizing] Left = 120 Top = 288 Modified: trunk/Examples/Drawing/Blurs/MainUnit.lfm =================================================================== --- trunk/Examples/Drawing/Blurs/MainUnit.lfm 2012-10-07 00:15:41 UTC (rev 1971) +++ trunk/Examples/Drawing/Blurs/MainUnit.lfm 2012-10-07 03:20:45 UTC (rev 1972) @@ -236,8 +236,8 @@ end end object OpenDialog: TOpenDialog - DefaultExt = '.png' - Filter = 'All (*.png;*.jpg;*.bmp)|*.png;*.jpg;*.bmp;|PNG Files (*.png)|*.png|JPG Files (*.jpg)|*.jpg|Bitmap Files (*.bmp)|*.bmp' + DefaultExt = '.jpg' + Filter = 'Image Files (*.jpg;*.bmp)|*.jpg;*.bmp;' Options = [ofHideReadOnly, ofFileMustExist, ofEnableSizing] left = 168 top = 56 Modified: trunk/Examples/Drawing/Blurs/MainUnit.pas =================================================================== --- trunk/Examples/Drawing/Blurs/MainUnit.pas 2012-10-07 00:15:41 UTC (rev 1971) +++ trunk/Examples/Drawing/Blurs/MainUnit.pas 2012-10-07 03:20:45 UTC (rev 1972) @@ -50,7 +50,7 @@ FReDrawFlag: Boolean; - FBalloonImage: TBitmap32; + FStoneWeedImage: TBitmap32; FIcelandImage: TBitmap32; FRandBoxImage: TBitmap32; FBmpLayer: TBitmapLayer; @@ -63,8 +63,8 @@ implementation uses - {$IFNDEF FPC} JPEG, {$ENDIF} GR32_Polygons, GR32_VectorUtils, GR32_Blurs, - GR32_Png; + {$IFNDEF FPC} JPEG, {$ELSE} LazJPG, {$ENDIF} + GR32_Polygons, GR32_VectorUtils, GR32_Blurs, GR32_Resamplers; {$IFDEF FPC} {$R *.lfm} @@ -72,8 +72,6 @@ {$R *.dfm} {$ENDIF} -{$R images.res} - { Miscellaneous functions } procedure DrawFramedBox(Bmp32: TBitmap32; const Rec: TRect; @@ -101,15 +99,19 @@ end; end; -procedure LoadResourceImage(const ResName: string; Bmp32: TBitmap32); +procedure LoadJPGResource(const ResName: string; Bmp32: TBitmap32); var - Rs: TResourceStream; + ResStream: TResourceStream; + JPEG: TJPEGImage; begin - Rs := TResourceStream.Create(hInstance, ResName, RT_RCDATA); + JPEG := TJPEGImage.Create; + ResStream := TResourceStream.Create(hInstance, ResName, 'JPG'); try - LoadBitmap32FromPNG(Bmp32, Rs); + JPEG.LoadFromStream(ResStream); + Bmp32.Assign(JPEG); finally - Rs.Free; + ResStream.Free; + JPEG.Free; end; end; @@ -127,12 +129,17 @@ clDarkMagenta32, clDarkOrange32, clDarkOrchid32, clDarkRed32, clDarkSalmon32, clDarkSeaGreen32, clDarkSlateBlue32); begin - FBalloonImage := TBitmap32.create; - LoadResourceImage('BALLOONS', FBalloonImage); - + FStoneWeedImage := TBitmap32.create; FIcelandImage := TBitmap32.create; - LoadResourceImage('ICELAND', FIcelandImage); + // Just use FStoneWeedImage momentarily to load a 600*400 image of ICELAND ... + LoadJPGResource('ICELAND', FStoneWeedImage); + FIcelandImage.SetSize(600, 400); + FStoneWeedImage.DrawTo(FIcelandImage, FIcelandImage.BoundsRect, + FStoneWeedImage.BoundsRect); + // Now load the real STONEWEED image ... + LoadJPGResource('STONEWEED', FStoneWeedImage); + FPerfTimer := TPerfTimer.Create; Randomize; @@ -153,7 +160,7 @@ procedure TFrmBlurs.FormDestroy(Sender: TObject); begin FPerfTimer.Free; - FBalloonImage.Free; + FStoneWeedImage.Free; FIcelandImage.Free; FRandBoxImage.Free; end; @@ -173,7 +180,8 @@ 0: begin ImgViewPage1.BeginUpdate; - ImgViewPage1.Bitmap.Assign(FBalloonImage); + ImgViewPage1.Bitmap.Assign(FIcelandImage); + FPerfTimer.Start; case RgpBlurType.ItemIndex of 1: GaussianBlur(ImgViewPage1.Bitmap, Radius); @@ -189,7 +197,7 @@ 1: begin ImgViewPage2.BeginUpdate; - ImgViewPage2.Bitmap.Assign(FIcelandImage); + ImgViewPage2.Bitmap.Assign(FStoneWeedImage); Pts := Star(130, 150, 90, 5, -0.5 * Pi); Pts2 := Ellipse(350, 250, 100, 60); @@ -338,10 +346,7 @@ if OpenDialog.Execute then begin Extension := Lowercase(ExtractFileExt(OpenDialog.FileName)); - if Extension = '.png' then - LoadBitmap32FromPNG(FBalloonImage, OpenDialog.FileName) - else - FBalloonImage.LoadFromFile(OpenDialog.FileName); + FIcelandImage.LoadFromFile(OpenDialog.FileName); PageControl.ActivePageIndex := 0; ReDraw; end; Modified: trunk/Examples/Drawing/Blurs/Media.rc =================================================================== --- trunk/Examples/Drawing/Blurs/Media.rc 2012-10-07 00:15:41 UTC (rev 1971) +++ trunk/Examples/Drawing/Blurs/Media.rc 2012-10-07 03:20:45 UTC (rev 1972) @@ -1 +1,3 @@ MainIcon ICON "../../Media/GR32.ico" +ICELAND JPG "../../Media/iceland.jpg" +STONEWEED JPG "../../Media/stoneweed.jpg" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <CW...@us...> - 2012-10-07 00:15:47
|
Revision: 1971 http://graphics32.svn.sourceforge.net/graphics32/?rev=1971&view=rev Author: CWBudde Date: 2012-10-07 00:15:41 +0000 (Sun, 07 Oct 2012) Log Message: ----------- * minor source code formating Modified Paths: -------------- trunk/Source/GR32_Blurs.pas Modified: trunk/Source/GR32_Blurs.pas =================================================================== --- trunk/Source/GR32_Blurs.pas 2012-10-07 00:06:10 UTC (rev 1970) +++ trunk/Source/GR32_Blurs.pas 2012-10-07 00:15:41 UTC (rev 1971) @@ -146,7 +146,7 @@ PreMulArray[X].R := DivTable[R, A]; PreMulArray[X].G := DivTable[G, A]; PreMulArray[X].B := DivTable[B, A]; - inc(Q); + Inc(Q); end; for X := RecLeft to RecRight do @@ -296,7 +296,7 @@ PreMulArray[X].R := DivTable[R, A]; PreMulArray[X].G := DivTable[G, A]; PreMulArray[X].B := DivTable[B, A]; - inc(Q); + Inc(Q); end; for X := RecLeft to RecRight do @@ -334,7 +334,7 @@ for X := RecLeft to RecRight do begin MaskClr.ARGB := Mask.Pixel[X - RecLeft, Y - RecTop]; - if (MaskClr.A = 0) then continue; + if (MaskClr.A = 0) then Continue; SumRec.A := 0; SumRec.R := 0; @@ -426,7 +426,7 @@ R := DivTable[R, A]; G := DivTable[G, A]; B := DivTable[B, A]; - inc(ImgPixel); + Inc(ImgPixel); end; end; @@ -504,7 +504,7 @@ for J := RecTop to RecBottom do begin Pixels[J] := ImagePixel^; - inc(ImagePixel, Bmp32.Width); + Inc(ImagePixel, Bmp32.Width); end; ImagePixel := PColor32Entry(@Bmp32.ScanLine[RecTop][X]); @@ -629,7 +629,7 @@ ImgPixel.R := DivTable[ImgPixel.R, ImgPixel.A]; ImgPixel.G := DivTable[ImgPixel.G, ImgPixel.A]; ImgPixel.B := DivTable[ImgPixel.B, ImgPixel.A]; - inc(ImgPixel); + Inc(ImgPixel); end; end; @@ -949,7 +949,7 @@ ImagePixel.R := DivTable[ImagePixel.R, ImagePixel.A]; ImagePixel.G := DivTable[ImagePixel.G, ImagePixel.A]; ImagePixel.B := DivTable[ImagePixel.B, ImagePixel.A]; - inc(ImagePixel); + Inc(ImagePixel); end; end; @@ -1063,7 +1063,7 @@ with ImagePixel^ do if (SumRec.Sum = 0) or (MaskClr.A = 0) then - continue + Continue else if (I = Passes) then begin Clr.A := SumRec.A div SumRec.Sum; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <CW...@us...> - 2012-10-07 00:06:16
|
Revision: 1970 http://graphics32.svn.sourceforge.net/graphics32/?rev=1970&view=rev Author: CWBudde Date: 2012-10-07 00:06:10 +0000 (Sun, 07 Oct 2012) Log Message: ----------- * fixed Lazarus issue Modified Paths: -------------- trunk/Examples/Drawing/MeshGradients/MainUnit.lfm Modified: trunk/Examples/Drawing/MeshGradients/MainUnit.lfm =================================================================== --- trunk/Examples/Drawing/MeshGradients/MainUnit.lfm 2012-10-07 00:04:15 UTC (rev 1969) +++ trunk/Examples/Drawing/MeshGradients/MainUnit.lfm 2012-10-07 00:06:10 UTC (rev 1970) @@ -1,7 +1,7 @@ object FrmMeshGradients: TFrmMeshGradients - Left = 406 + Left = 0 Height = 481 - Top = 212 + Top = 0 Width = 688 Caption = 'Mesh Gradient Demo' ClientHeight = 481 @@ -32,7 +32,7 @@ object LblVertexColor: TLabel Left = 8 Height = 14 - Top = 159 + Top = 236 Width = 30 Caption = 'Color:' ParentColor = False @@ -41,7 +41,7 @@ object VertexColorShape: TShape Left = 43 Height = 16 - Top = 157 + Top = 234 Width = 16 OnMouseDown = VertexColorShapeMouseDown Visible = False @@ -93,7 +93,7 @@ object PnlVertex: TPanel Left = 1 Height = 16 - Top = 129 + Top = 206 Width = 175 BevelOuter = bvNone Caption = 'Vertex' @@ -139,6 +139,32 @@ OnClick = BtnRecallClick TabOrder = 5 end + object PnlDelaunayTriangulation: TPanel + Left = 1 + Height = 16 + Top = 107 + Width = 175 + BevelOuter = bvNone + Caption = 'Delaunay Triangulation' + Color = clBtnShadow + Font.Color = clWindow + Font.Height = -11 + Font.Name = 'Tahoma' + ParentColor = False + ParentFont = False + TabOrder = 6 + end + object CbxColoredPolygons: TCheckBox + Left = 16 + Height = 17 + Top = 129 + Width = 127 + Caption = 'Show Colored Polygon' + Checked = True + OnClick = CbxColoredPolygonsClick + State = cbChecked + TabOrder = 7 + end end object PaintBox32: TPaintBox32 Left = 8 @@ -154,7 +180,6 @@ OnPaintBuffer = PaintBox32PaintBuffer end object ColorDialog: TColorDialog - Title = 'Select Color' Color = clBlack CustomColors.Strings = ( 'ColorA=000000' This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <CW...@us...> - 2012-10-07 00:04:22
|
Revision: 1969 http://graphics32.svn.sourceforge.net/graphics32/?rev=1969&view=rev Author: CWBudde Date: 2012-10-07 00:04:15 +0000 (Sun, 07 Oct 2012) Log Message: ----------- * updated blurs example and fixed issue with Star() function Modified Paths: -------------- trunk/Examples/Drawing/Blurs/MainUnit.pas trunk/Source/GR32_VectorUtils.pas Modified: trunk/Examples/Drawing/Blurs/MainUnit.pas =================================================================== --- trunk/Examples/Drawing/Blurs/MainUnit.pas 2012-10-06 23:57:48 UTC (rev 1968) +++ trunk/Examples/Drawing/Blurs/MainUnit.pas 2012-10-07 00:04:15 UTC (rev 1969) @@ -48,15 +48,13 @@ FPerfTimer: TPerfTimer; FDuration: string; - ReDrawing: Boolean; + FReDrawFlag: Boolean; - BalloonImage: TBitmap32; - IcelandImage: TBitmap32; - RandBoxImage: TBitmap32; - BmpLayer: TBitmapLayer; + FBalloonImage: TBitmap32; + FIcelandImage: TBitmap32; + FRandBoxImage: TBitmap32; + FBmpLayer: TBitmapLayer; procedure ReDraw; - public - { Public declarations } end; var @@ -105,34 +103,18 @@ procedure LoadResourceImage(const ResName: string; Bmp32: TBitmap32); var - Png: TPortableNetworkGraphic32; Rs: TResourceStream; begin - Png := TPortableNetworkGraphic32.Create; Rs := TResourceStream.Create(hInstance, ResName, RT_RCDATA); try - Png.LoadFromStream(Rs); - Bmp32.Assign(Png); + LoadBitmap32FromPNG(Bmp32, Rs); finally - Png.Free; Rs.Free; end; end; -procedure LoadPNGFileImage(const Filename: string; Bmp32: TBitmap32); -var - Png: TPortableNetworkGraphic32; -begin - Png := TPortableNetworkGraphic32.Create; - try - Png.LoadFromFile(Filename); - Bmp32.Assign(Png); - finally - Png.Free; - end; -end; -{ TMainForm methods } +{ TFrmBlurs } procedure TFrmBlurs.FormCreate(Sender: TObject); var @@ -145,26 +127,25 @@ clDarkMagenta32, clDarkOrange32, clDarkOrchid32, clDarkRed32, clDarkSalmon32, clDarkSeaGreen32, clDarkSlateBlue32); begin - BalloonImage := TBitmap32.create; - LoadResourceImage('BALLOONS', BalloonImage); + FBalloonImage := TBitmap32.create; + LoadResourceImage('BALLOONS', FBalloonImage); - IcelandImage := TBitmap32.create; - LoadResourceImage('ICELAND', IcelandImage); + FIcelandImage := TBitmap32.create; + LoadResourceImage('ICELAND', FIcelandImage); FPerfTimer := TPerfTimer.Create; Randomize; - RandBoxImage := TBitmap32.create; + FRandBoxImage := TBitmap32.create; //generate an image of full of random boxes ... - RandBoxImage.SetSize(192, 272); + FRandBoxImage.SetSize(192, 272); for I := 0 to 11 do for J := 0 to 16 do - RandBoxImage.FillRectS(I * 16, - J * 16, 300 + (I + 1) * 16, 40 + (J +1) * 16, - SetAlpha(Colors[Random(22)], 128)); + FRandBoxImage.FillRectS(I * 16, J * 16, 300 + (I + 1) * 16, + 40 + (J +1) * 16, SetAlpha(Colors[Random(22)], 128)); - BmpLayer := TBitmapLayer(ImgViewPage3.Layers.Add(TBitmapLayer)); - BmpLayer.Bitmap.DrawMode := dmBlend; + FBmpLayer := TBitmapLayer(ImgViewPage3.Layers.Add(TBitmapLayer)); + FBmpLayer.Bitmap.DrawMode := dmBlend; ReDraw; end; @@ -172,9 +153,9 @@ procedure TFrmBlurs.FormDestroy(Sender: TObject); begin FPerfTimer.Free; - BalloonImage.Free; - IcelandImage.Free; - RandBoxImage.Free; + FBalloonImage.Free; + FIcelandImage.Free; + FRandBoxImage.Free; end; procedure TFrmBlurs.ReDraw; @@ -183,128 +164,128 @@ Rec, Rec2: TRect; Pts, Pts2: TArrayOfFloatPoint; begin - if ReDrawing then + if FReDrawFlag then Exit; - ReDrawing := True; + FReDrawFlag := True; Radius := TbrBlurRadius.Position; Screen.Cursor := crHourGlass; case PageControl.ActivePageIndex of 0: - begin - ImgViewPage1.BeginUpdate; - ImgViewPage1.Bitmap.Assign(BalloonImage); - FPerfTimer.Start; - case RgpBlurType.ItemIndex of - 1: GaussianBlur(ImgViewPage1.Bitmap, Radius); - 2: FastBlur(ImgViewPage1.Bitmap, Radius); - 3: MotionBlur(ImgViewPage1.Bitmap, Radius, - TbrBlurAngle.Position, CbxBidirectional.Checked); + begin + ImgViewPage1.BeginUpdate; + ImgViewPage1.Bitmap.Assign(FBalloonImage); + FPerfTimer.Start; + case RgpBlurType.ItemIndex of + 1: GaussianBlur(ImgViewPage1.Bitmap, Radius); + 2: FastBlur(ImgViewPage1.Bitmap, Radius); + 3: MotionBlur(ImgViewPage1.Bitmap, Radius, + TbrBlurAngle.Position, CbxBidirectional.Checked); + end; + FDuration := FPerfTimer.ReadMilliseconds; + ImgViewPage1.EndUpdate; + ImgViewPage1.Repaint; + Application.ProcessMessages; end; - FDuration := FPerfTimer.ReadMilliseconds; - ImgViewPage1.EndUpdate; - ImgViewPage1.Repaint; - Application.ProcessMessages; - end; 1: - begin - ImgViewPage2.BeginUpdate; - ImgViewPage2.Bitmap.Assign(IcelandImage); + begin + ImgViewPage2.BeginUpdate; + ImgViewPage2.Bitmap.Assign(FIcelandImage); - Pts := Star(130, 150, 90, 5, -0.5 * Pi); - Pts2 := Ellipse(350, 250, 100, 60); + Pts := Star(130, 150, 90, 5, -0.5 * Pi); + Pts2 := Ellipse(350, 250, 100, 60); - FPerfTimer.Start; - case RgpBlurType.ItemIndex of - 1: - begin - GaussianBlur(ImgViewPage2.Bitmap, Radius, Pts); - GaussianBlur(ImgViewPage2.Bitmap, Radius, Pts2); - end; - 2: - begin - FastBlur(ImgViewPage2.Bitmap, Radius, Pts); - FastBlur(ImgViewPage2.Bitmap, Radius, Pts2); - end; - 3: - begin - MotionBlur(ImgViewPage2.Bitmap, Radius, TbrBlurAngle.Position, - Pts, CbxBidirectional.Checked); - MotionBlur(ImgViewPage2.Bitmap, Radius, TbrBlurAngle.Position, - Pts2, CbxBidirectional.Checked); - end; - end; - FDuration := FPerfTimer.ReadMilliseconds; - Application.ProcessMessages; + FPerfTimer.Start; + case RgpBlurType.ItemIndex of + 1: + begin + GaussianBlur(ImgViewPage2.Bitmap, Radius, Pts); + GaussianBlur(ImgViewPage2.Bitmap, Radius, Pts2); + end; + 2: + begin + FastBlur(ImgViewPage2.Bitmap, Radius, Pts); + FastBlur(ImgViewPage2.Bitmap, Radius, Pts2); + end; + 3: + begin + MotionBlur(ImgViewPage2.Bitmap, Radius, TbrBlurAngle.Position, + Pts, CbxBidirectional.Checked); + MotionBlur(ImgViewPage2.Bitmap, Radius, TbrBlurAngle.Position, + Pts2, CbxBidirectional.Checked); + end; + end; + FDuration := FPerfTimer.ReadMilliseconds; + Application.ProcessMessages; - PolylineFS(ImgViewPage2.Bitmap, Pts, clBlack32, True, 2.5); - PolylineFS(ImgViewPage2.Bitmap, Pts2, clBlack32, True, 2.5); - ImgViewPage2.EndUpdate; - ImgViewPage2.Repaint; - end; + PolylineFS(ImgViewPage2.Bitmap, Pts, clBlack32, True, 2.5); + PolylineFS(ImgViewPage2.Bitmap, Pts2, clBlack32, True, 2.5); + ImgViewPage2.EndUpdate; + ImgViewPage2.Repaint; + end; 2: - begin - ImgViewPage3.BeginUpdate; - ImgViewPage3.SetupBitmap(True, Color32(clBtnFace)); - BmpLayer.Bitmap.Clear(0); - - with ImgViewPage3.GetBitmapRect do begin - BmpLayer.Location := FloatRect(Left, Top, Right, Bottom); - BmpLayer.Bitmap.SetSize(Right - Left, Bottom - Top) - end; - BmpLayer.Bitmap.Draw(300, 40, RandBoxImage); + ImgViewPage3.BeginUpdate; + ImgViewPage3.SetupBitmap(True, Color32(clBtnFace)); + FBmpLayer.Bitmap.Clear(0); - Rec := Rect(40, 40, 240, 120); - DrawFramedBox(ImgViewPage3.Bitmap, Rec, clWhite32, clGray32, Radius div 2); + with ImgViewPage3.GetBitmapRect do + begin + FBmpLayer.Location := FloatRect(Left, Top, Right, Bottom); + FBmpLayer.Bitmap.SetSize(Right - Left, Bottom - Top) + end; + FBmpLayer.Bitmap.Draw(300, 40, FRandBoxImage); - Rec2 := Rect(40, 160, 240, 320); - with Rec2 do - BmpLayer.Bitmap.FillRect(Left, Top, Right, Bottom, clRed32); - InflateRect(Rec2, 20, 20); + Rec := Rect(40, 40, 240, 120); + DrawFramedBox(ImgViewPage3.Bitmap, Rec, clWhite32, clGray32, Radius div 2); - Pts := Ellipse(395, 175, 60, 100); + Rec2 := Rect(40, 160, 240, 320); + with Rec2 do + FBmpLayer.Bitmap.FillRect(Left, Top, Right, Bottom, clRed32); + InflateRect(Rec2, 20, 20); - FPerfTimer.Start; - case RgpBlurType.ItemIndex of - 1: - begin - GaussianBlur(ImgViewPage3.Bitmap, Radius, Rec); - GaussianBlur(BmpLayer.Bitmap, Radius, Rec2); - GaussianBlur(BmpLayer.Bitmap, Radius, Pts); - end; - 2: - begin - FastBlur(ImgViewPage3.Bitmap, Radius, Rec); - FastBlur(BmpLayer.Bitmap, Radius, Rec2); - FastBlur(BmpLayer.Bitmap, Radius, Pts); - end; - 3: - begin - MotionBlur(ImgViewPage3.Bitmap, Radius, - TbrBlurAngle.Position, Rec, CbxBidirectional.Checked); - MotionBlur(BmpLayer.Bitmap, Radius, - TbrBlurAngle.Position, Rec2, CbxBidirectional.Checked); - MotionBlur(BmpLayer.Bitmap, Radius, - TbrBlurAngle.Position, Pts, CbxBidirectional.Checked); - end; - end; - FDuration := FPerfTimer.ReadMilliseconds; - Application.ProcessMessages; + Pts := Ellipse(395, 175, 60, 100); - PolylineFS(BmpLayer.Bitmap, Pts, clBlack32, True, 2.5); + FPerfTimer.Start; + case RgpBlurType.ItemIndex of + 1: + begin + GaussianBlur(ImgViewPage3.Bitmap, Radius, Rec); + GaussianBlur(FBmpLayer.Bitmap, Radius, Rec2); + GaussianBlur(FBmpLayer.Bitmap, Radius, Pts); + end; + 2: + begin + FastBlur(ImgViewPage3.Bitmap, Radius, Rec); + FastBlur(FBmpLayer.Bitmap, Radius, Rec2); + FastBlur(FBmpLayer.Bitmap, Radius, Pts); + end; + 3: + begin + MotionBlur(ImgViewPage3.Bitmap, Radius, + TbrBlurAngle.Position, Rec, CbxBidirectional.Checked); + MotionBlur(FBmpLayer.Bitmap, Radius, + TbrBlurAngle.Position, Rec2, CbxBidirectional.Checked); + MotionBlur(FBmpLayer.Bitmap, Radius, + TbrBlurAngle.Position, Pts, CbxBidirectional.Checked); + end; + end; + FDuration := FPerfTimer.ReadMilliseconds; + Application.ProcessMessages; - with Rec2 do - PolylineFS(BmpLayer.Bitmap, - BuildPolygon([Left, Top, Right, Top, Right, Bottom, Left, Bottom]), - clBlack32, True, 1.0); + PolylineFS(FBmpLayer.Bitmap, Pts, clBlack32, True, 2.5); - ImgViewPage3.EndUpdate; - ImgViewPage3.Repaint; - end; + with Rec2 do + PolylineFS(FBmpLayer.Bitmap, + BuildPolygon([Left, Top, Right, Top, Right, Bottom, Left, Bottom]), + clBlack32, True, 1.0); + + ImgViewPage3.EndUpdate; + ImgViewPage3.Repaint; + end; end; SbrMain.SimpleText := Format(' Blur drawing time: %s ms', [FDuration]); Screen.Cursor := crDefault; - ReDrawing := False; + FReDrawFlag := False; end; procedure TFrmBlurs.MnuExitClick(Sender: TObject); @@ -358,8 +339,9 @@ begin Extension := Lowercase(ExtractFileExt(OpenDialog.FileName)); if Extension = '.png' then - LoadPNGFileImage(OpenDialog.FileName, BalloonImage) else - BalloonImage.LoadFromFile(OpenDialog.FileName); + LoadBitmap32FromPNG(FBalloonImage, OpenDialog.FileName) + else + FBalloonImage.LoadFromFile(OpenDialog.FileName); PageControl.ActivePageIndex := 0; ReDraw; end; Modified: trunk/Source/GR32_VectorUtils.pas =================================================================== --- trunk/Source/GR32_VectorUtils.pas 2012-10-06 23:57:48 UTC (rev 1968) +++ trunk/Source/GR32_VectorUtils.pas 2012-10-07 00:04:15 UTC (rev 1969) @@ -933,7 +933,7 @@ function Star(const X, Y, InnerRadius, OuterRadius: TFloat; Vertices: Integer = 5; Rotation: TFloat = 0): TArrayOfFloatPoint; begin - Result := Star(FloatPoint(X, Y), InnerRadius, OuterRadius, Vertices); + Result := Star(FloatPoint(X, Y), InnerRadius, OuterRadius, Vertices, Rotation); end; function Star(const P: TFloatPoint; const InnerRadius, OuterRadius: TFloat; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <CW...@us...> - 2012-10-06 23:57:54
|
Revision: 1968 http://graphics32.svn.sourceforge.net/graphics32/?rev=1968&view=rev Author: CWBudde Date: 2012-10-06 23:57:48 +0000 (Sat, 06 Oct 2012) Log Message: ----------- * replaced predefined star with algorithm Modified Paths: -------------- trunk/Examples/Drawing/Blurs/MainUnit.pas Modified: trunk/Examples/Drawing/Blurs/MainUnit.pas =================================================================== --- trunk/Examples/Drawing/Blurs/MainUnit.pas 2012-10-06 23:29:06 UTC (rev 1967) +++ trunk/Examples/Drawing/Blurs/MainUnit.pas 2012-10-06 23:57:48 UTC (rev 1968) @@ -209,11 +209,8 @@ begin ImgViewPage2.BeginUpdate; ImgViewPage2.Bitmap.Assign(IcelandImage); - //5 pointed star ... - Pts := BuildPolygon([10, 40, 40, 40, 50, 10, 60, 40, 90, 40, 65, 60, 75, 90, 50, 70, 25, 90, 35, 60]); - Pts := ScalePolygon(Pts, 2, 2); - Pts := TranslatePolygon(Pts, 30, 50); + Pts := Star(130, 150, 90, 5, -0.5 * Pi); Pts2 := Ellipse(350, 250, 100, 60); FPerfTimer.Start; @@ -230,10 +227,10 @@ end; 3: begin - MotionBlur(ImgViewPage2.Bitmap, Radius, - TbrBlurAngle.Position, Pts, CbxBidirectional.Checked); - MotionBlur(ImgViewPage2.Bitmap, Radius, - TbrBlurAngle.Position, Pts2, CbxBidirectional.Checked); + MotionBlur(ImgViewPage2.Bitmap, Radius, TbrBlurAngle.Position, + Pts, CbxBidirectional.Checked); + MotionBlur(ImgViewPage2.Bitmap, Radius, TbrBlurAngle.Position, + Pts2, CbxBidirectional.Checked); end; end; FDuration := FPerfTimer.ReadMilliseconds; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <CW...@us...> - 2012-10-06 23:29:14
|
Revision: 1967 http://graphics32.svn.sourceforge.net/graphics32/?rev=1967&view=rev Author: CWBudde Date: 2012-10-06 23:29:06 +0000 (Sat, 06 Oct 2012) Log Message: ----------- * refactored GR32_ColorGradients Modified Paths: -------------- trunk/Examples/Drawing/GradFills/MainUnit.pas trunk/Examples/Drawing/MeshGradients/MainUnit.dfm trunk/Examples/Drawing/MeshGradients/MainUnit.pas trunk/Source/GR32_ColorGradients.pas trunk/Source/GR32_System.pas Added Paths: ----------- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TColor32Gradient/ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TGourandShadedDelaunayTrianglesSampler/ Removed Paths: ------------- trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TDelaunaySampler/ trunk/Documentation/Source/Units/GR32_ColorGradients/Classes/TGradient32/ Modified: trunk/Examples/Drawing/GradFills/MainUnit.pas =================================================================== --- trunk/Examples/Drawing/GradFills/MainUnit.pas 2012-10-06 21:36:11 UTC (rev 1966) +++ trunk/Examples/Drawing/GradFills/MainUnit.pas 2012-10-06 23:29:06 UTC (rev 1967) @@ -79,7 +79,7 @@ FLinearBounds: TRect; FRadialBounds: TRect; - FGradient: TGradient32; + FGradient: TColor32Gradient; FGradientLUT: TColor32LookupTable; FTextNotesPoly: TArrayOfArrayOfFloatPoint; FTextTopPoly: TArrayOfArrayOfFloatPoint; @@ -261,7 +261,7 @@ { Miscellaneous functions } -procedure StrToArrayColor32Gradient(s: TStrings; Gradient: TGradient32); +procedure StrToArrayColor32Gradient(s: TStrings; Gradient: TColor32Gradient); var I, J: Integer; Offset: TFloat; @@ -316,7 +316,7 @@ Count := ReadInt; SetLength(Result[I], Count); for J := 0 to Count - 1 do - Result[I][J] := ReadFloatPoint; + Result[I, J] := ReadFloatPoint; end; finally ResStream.Free; @@ -338,7 +338,7 @@ FLinearBounds := Rect(50, 50, 350, 200); FRadialBounds := Rect(50, 250, 350, 400); - FGradient := TGradient32.Create; + FGradient := TColor32Gradient.Create; StrToArrayColor32Gradient(MemoColorStops.Lines, FGradient); FGradientLUT := TColor32LookupTable.Create; Modified: trunk/Examples/Drawing/MeshGradients/MainUnit.dfm =================================================================== --- trunk/Examples/Drawing/MeshGradients/MainUnit.dfm 2012-10-06 21:36:11 UTC (rev 1966) +++ trunk/Examples/Drawing/MeshGradients/MainUnit.dfm 2012-10-06 23:29:06 UTC (rev 1967) @@ -36,7 +36,7 @@ end object LblVertexColor: TLabel Left = 8 - Top = 159 + Top = 236 Width = 29 Height = 13 Caption = 'Color:' @@ -44,7 +44,7 @@ end object VertexColorShape: TShape Left = 43 - Top = 157 + Top = 234 Width = 16 Height = 16 Visible = False @@ -94,7 +94,7 @@ end object PnlVertex: TPanel Left = 1 - Top = 129 + Top = 206 Width = 175 Height = 16 BevelOuter = bvNone @@ -141,6 +141,33 @@ TabOrder = 5 OnClick = BtnRecallClick end + object PnlDelaunayTriangulation: TPanel + Left = 1 + Top = 107 + Width = 175 + Height = 16 + BevelOuter = bvNone + Caption = 'Delaunay Triangulation' + Color = clBtnShadow + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindow + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + TabOrder = 6 + end + object CbxColoredPolygons: TCheckBox + Left = 16 + Top = 129 + Width = 129 + Height = 17 + Caption = 'Show Colored Polygon' + Checked = True + State = cbChecked + TabOrder = 7 + OnClick = CbxColoredPolygonsClick + end end object PaintBox32: TPaintBox32 Left = 8 Modified: trunk/Examples/Drawing/MeshGradients/MainUnit.pas =================================================================== --- trunk/Examples/Drawing/MeshGradients/MainUnit.pas 2012-10-06 21:36:11 UTC (rev 1966) +++ trunk/Examples/Drawing/MeshGradients/MainUnit.pas 2012-10-06 23:29:06 UTC (rev 1967) @@ -22,6 +22,8 @@ VertexColorShape: TShape; BtnStore: TButton; BtnRecall: TButton; + PnlDelaunayTriangulation: TPanel; + CbxColoredPolygons: TCheckBox; procedure FormCreate(Sender: TObject); procedure BtnStoreClick(Sender: TObject); procedure BtnRecallClick(Sender: TObject); @@ -38,6 +40,7 @@ procedure SelectVertexColorClick(Sender: TObject); procedure VertexColorShapeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure CbxColoredPolygonsClick(Sender: TObject); private FColorPoints: TArrayOfColor32FloatPoint; FClipboard: TArrayOfColor32FloatPoint; @@ -245,19 +248,22 @@ for Index := 0 to High(FColorPoints) do Points[Index] := FColorPoints[Index].Point; - Renderer := TPolygonRenderer32VPR.Create(PaintBox32.Buffer); - try - Delaunay := TGourandShadedDelaunayTrianglesSampler.Create; + if CbxColoredPolygons.Checked then + begin + Renderer := TPolygonRenderer32VPR.Create(PaintBox32.Buffer); try - Renderer.FillMode := pfWinding; - Renderer.Filler := TSamplerFiller.Create(Delaunay); - Delaunay.SetColorPoints(FColorPoints); - Renderer.PolygonFS(Points); + Delaunay := TGourandShadedDelaunayTrianglesSampler.Create; + try + Renderer.FillMode := pfWinding; + Renderer.Filler := TSamplerFiller.Create(Delaunay); + Delaunay.SetColorPoints(FColorPoints); + Renderer.PolygonFS(Points); + finally + Delaunay.Free; + end; finally - Delaunay.Free; + Renderer.Free; end; - finally - Renderer.Free; end; with PaintBox32.Buffer do @@ -321,6 +327,11 @@ PaintBox32.Invalidate; end; +procedure TFrmMeshGradients.CbxColoredPolygonsClick(Sender: TObject); +begin + PaintBox32.Invalidate; +end; + procedure TFrmMeshGradients.CmbBackgroundSamplerChange(Sender: TObject); begin LblPower.Visible := CmbBackgroundSampler.ItemIndex = 4; Modified: trunk/Source/GR32_ColorGradients.pas =================================================================== --- trunk/Source/GR32_ColorGradients.pas 2012-10-06 21:36:11 UTC (rev 1966) +++ trunk/Source/GR32_ColorGradients.pas 2012-10-06 23:29:06 UTC (rev 1967) @@ -45,6 +45,12 @@ end; TArrayOfColor32GradientStop = array of TColor32GradientStop; + TColor32FloatPoint = record + Point: TFloatPoint; + Color32: TColor32; + end; + TArrayOfColor32FloatPoint = array of TColor32FloatPoint; + TColor32LookupTable = class(TPersistent) private FGradientLUT: PColor32Array; @@ -71,7 +77,7 @@ property OnOrderChanged: TNotifyEvent read FOnOrderChanged write FOnOrderChanged; end; - TGradient32 = class(TInterfacedPersistent, IStreamPersist) + TColor32Gradient = class(TInterfacedPersistent, IStreamPersist) private FGradientColors: TArrayOfColor32GradientStop; FOnGradientColorsChanged: TNotifyEvent; @@ -98,10 +104,10 @@ procedure SetColors(const GradientColors: TArrayOfColor32); overload; procedure SetColors(const Palette: TPalette32); overload; function GetColorAt(Fraction: TFloat): TColor32; + procedure FillColorLookUpTable(var ColorLUT: array of TColor32); overload; procedure FillColorLookUpTable(ColorLUT: PColor32Array; Count: Integer); overload; procedure FillColorLookUpTable(ColorLUT: TColor32LookupTable); overload; - property GradientEntry[Index: Integer]: TColor32GradientStop read GetGradientEntry; property GradientCount: Integer read GetGradientCount; property StartColor: TColor32 read GetStartColor write SetStartColor; @@ -110,12 +116,6 @@ read FOnGradientColorsChanged write FOnGradientColorsChanged; end; - TColor32FloatPoint = record - Point: TFloatPoint; - Color32: TColor32; - end; - TArrayOfColor32FloatPoint = array of TColor32FloatPoint; - TCustomSparsePointGradientSampler = class(TCustomSampler) protected function GetCount: Integer; virtual; abstract; @@ -213,7 +213,7 @@ TInvertedDistanceWeightingSampler = class(TCustomArbitrarySparsePointGradientSampler) private - FDists: PFloatArray; + FDists: TArrayOfFloat; FUsePower: Boolean; FPower: TFloat; FScaledPower: TFloat; @@ -243,9 +243,9 @@ TCustomGradientSampler = class(TCustomSampler) private - FGradient: TGradient32; + FGradient: TColor32Gradient; FWrapMode: TWrapMode; - procedure SetGradient(const Value: TGradient32); + procedure SetGradient(const Value: TColor32Gradient); procedure SetWrapMode(const Value: TWrapMode); protected FInitialized: Boolean; @@ -258,14 +258,14 @@ property Initialized: Boolean read FInitialized; public constructor Create; overload; virtual; - constructor Create(ColorGradient: TGradient32); overload; virtual; + constructor Create(ColorGradient: TColor32Gradient); overload; virtual; destructor Destroy; override; procedure PrepareSampling; override; function GetSampleInt(X, Y: Integer): TColor32; override; function GetSampleFixed(X, Y: TFixed): TColor32; override; - property Gradient: TGradient32 read FGradient write SetGradient; + property Gradient: TColor32Gradient read FGradient write SetGradient; property WrapMode: TWrapMode read FWrapMode write SetWrapMode; end; @@ -419,7 +419,7 @@ TCustomGradientPolygonFiller = class(TCustomPolygonFiller) private - FGradient: TGradient32; + FGradient: TColor32Gradient; FOwnsGradient: Boolean; FWrapMode: TWrapMode; FWrapProc: TWrapProc; @@ -433,10 +433,10 @@ procedure WrapModeChanged; public constructor Create; overload; - constructor Create(ColorGradient: TGradient32); overload; virtual; + constructor Create(ColorGradient: TColor32Gradient); overload; virtual; destructor Destroy; override; - property Gradient: TGradient32 read FGradient; + property Gradient: TColor32Gradient read FGradient; property WrapMode: TWrapMode read FWrapMode write SetWrapMode; end; @@ -505,7 +505,7 @@ property Initialized: Boolean read FInitialized; public - constructor Create(ColorGradient: TGradient32); overload; override; + constructor Create(ColorGradient: TColor32Gradient); overload; override; constructor Create(LookupTable: TColor32LookupTable); overload; virtual; destructor Destroy; override; @@ -523,7 +523,7 @@ property Initialized: Boolean read FInitialized; procedure LUTChangedHandler(Sender: TObject); public - constructor Create(ColorGradient: TGradient32); overload; override; + constructor Create(ColorGradient: TColor32Gradient); overload; override; constructor Create(LookupTable: TColor32LookupTable); overload; virtual; destructor Destroy; override; @@ -636,47 +636,350 @@ Result.Offset := Offset; end; +type + TLinear3PointInterpolation = function (A, B, C: TColor32; WA, WB, WC: Single): TColor32; + TLinear4PointInterpolation = function (A, B, C, D: TColor32; WA, WB, WC, WD: Single): TColor32; -{ TGradient32 } +{ Linear interpolation of several (3, 4) colors } -constructor TGradient32.Create(Color: TColor32); +var + Linear3PointInterpolation: TLinear3PointInterpolation; + Linear4PointInterpolation: TLinear4PointInterpolation; + +function Linear3PointInterpolation_Pas(A, B, C: TColor32; WA, WB, WC: Single): TColor32; +var + Clr: TColor32Entry absolute Result; begin + Clr.B := Clamp(Round( + WA * TColor32Entry(A).B + + WB * TColor32Entry(B).B + + WC * TColor32Entry(C).B)); + Clr.G := Clamp(Round( + WA * TColor32Entry(A).G + + WB * TColor32Entry(B).G + + WC * TColor32Entry(C).G)); + Clr.R := Clamp(Round( + WA * TColor32Entry(A).R + + WB * TColor32Entry(B).R + + WC * TColor32Entry(C).R)); + Clr.A := Clamp(Round( + WA * TColor32Entry(A).A + + WB * TColor32Entry(B).A + + WC * TColor32Entry(C).A)); +end; + +function Linear4PointInterpolation_Pas(A, B, C, D: TColor32; WA, WB, WC, + WD: Single): TColor32; +var + Clr: TColor32Entry absolute Result; +begin + Clr.B := Clamp(Round( + WA * TColor32Entry(A).B + + WB * TColor32Entry(B).B + + WC * TColor32Entry(C).B + + WD * TColor32Entry(D).B)); + Clr.G := Clamp(Round( + WA * TColor32Entry(A).G + + WB * TColor32Entry(B).G + + WC * TColor32Entry(C).G + + WD * TColor32Entry(D).G)); + Clr.R := Clamp(Round( + WA * TColor32Entry(A).R + + WB * TColor32Entry(B).R + + WC * TColor32Entry(C).R + + WD * TColor32Entry(D).R)); + Clr.A := Clamp(Round( + WA * TColor32Entry(A).A + + WB * TColor32Entry(B).A + + WC * TColor32Entry(C).A + + WD * TColor32Entry(D).A)); +end; + +{$IFNDEF OMIT_SSE2} + +{$IFNDEF PUREPASCAL} +function Linear3PointInterpolation_SSE2(A, B, C: TColor32; WA, WB, WC: Single): TColor32; +asm +{$IFDEF TARGET_X86} + PXOR XMM3,XMM3 + MOVD XMM0,EAX + PUNPCKLBW XMM0,XMM3 + PUNPCKLWD XMM0,XMM3 + CVTDQ2PS XMM0,XMM0 + MOVD XMM1,EDX + PUNPCKLBW XMM1,XMM3 + PUNPCKLWD XMM1,XMM3 + CVTDQ2PS XMM1,XMM1 + MOVD XMM2,ECX + PUNPCKLBW XMM2,XMM3 + PUNPCKLWD XMM2,XMM3 + CVTDQ2PS XMM2,XMM2 + + MOV EAX, WA + MOV EDX, WB + MOV ECX, WC + MOVD XMM4,EAX + SHUFPS XMM4,XMM4,0 + MOVD XMM5,EDX + SHUFPS XMM5,XMM5,0 + MOVD XMM6,ECX + SHUFPS XMM6,XMM6,0 + + MULPS XMM0,XMM4 + MULPS XMM1,XMM5 + MULPS XMM2,XMM6 + ADDPS XMM0,XMM1 + ADDPS XMM0,XMM2 + CVTPS2DQ XMM0,XMM0 + PACKSSDW XMM0,XMM3 + PACKUSWB XMM0,XMM3 + MOVD EAX,XMM0 +{$ENDIF} +{$IFDEF TARGET_X64} + MOVQ XMM0,XMM3 + SHUFPS XMM0,XMM0,0 + MOVD XMM1,WB + SHUFPS XMM1,XMM1,0 + MOVD XMM2,WC + SHUFPS XMM2,XMM2,0 + + PXOR XMM3,XMM3 + MOVD XMM4,ECX + PUNPCKLBW XMM4,XMM3 + PUNPCKLWD XMM4,XMM3 + CVTDQ2PS XMM4,XMM4 + MOVD XMM5,EDX + PUNPCKLBW XMM5,XMM3 + PUNPCKLWD XMM5,XMM3 + CVTDQ2PS XMM5,XMM5 + MOVD XMM6,R8D + PUNPCKLBW XMM6,XMM3 + PUNPCKLWD XMM6,XMM3 + CVTDQ2PS XMM6,XMM6 + + MULPS XMM0,XMM4 + MULPS XMM1,XMM5 + MULPS XMM2,XMM6 + ADDPS XMM0,XMM1 + ADDPS XMM0,XMM2 + CVTPS2DQ XMM0,XMM0 + PACKSSDW XMM0,XMM3 + PACKUSWB XMM0,XMM3 + MOVD EAX,XMM0 +{$ENDIF} +end; + +function Linear4PointInterpolation_SSE2(A, B, C, D: TColor32; WA, WB, WC, WD: Single): TColor32; +asm +{$IFDEF TARGET_X86} + PXOR XMM7,XMM7 + + MOVD XMM0,EAX + PUNPCKLBW XMM0,XMM7 + PUNPCKLWD XMM0,XMM7 + CVTDQ2PS XMM0,XMM0 + MOVD XMM1,EDX + PUNPCKLBW XMM1,XMM7 + PUNPCKLWD XMM1,XMM7 + CVTDQ2PS XMM1,XMM1 + + MOV EAX, WA + MOVD XMM4,EAX + SHUFPS XMM4,XMM4,0 + MULPS XMM0,XMM4 + + MOV EDX, WB + MOVD XMM5,EDX + SHUFPS XMM5,XMM5,0 + MULPS XMM1,XMM5 + ADDPS XMM0,XMM1 + + MOVD XMM2,ECX + PUNPCKLBW XMM2,XMM7 + PUNPCKLWD XMM2,XMM7 + CVTDQ2PS XMM2,XMM2 + MOVD XMM3,D + PUNPCKLBW XMM3,XMM7 + PUNPCKLWD XMM3,XMM7 + CVTDQ2PS XMM3,XMM3 + + MOV EAX, WC + MOVD XMM4,EAX + SHUFPS XMM4,XMM4,0 + MULPS XMM2,XMM4 + + MOV EDX, WD + MOVD XMM5,EDX + SHUFPS XMM5,XMM5,0 + MULPS XMM3,XMM5 + ADDPS XMM2,XMM3 + ADDPS XMM0,XMM2 + + CVTPS2DQ XMM0,XMM0 + PACKSSDW XMM0,XMM7 + PACKUSWB XMM0,XMM7 + MOVD EAX,XMM0 +{$ENDIF} +{$IFDEF TARGET_X64} + PXOR XMM7,XMM7 + + MOVD XMM0,A + PUNPCKLBW XMM0,XMM7 + PUNPCKLWD XMM0,XMM7 + CVTDQ2PS XMM0,XMM0 + MOVD XMM1,B + PUNPCKLBW XMM1,XMM7 + PUNPCKLWD XMM1,XMM7 + CVTDQ2PS XMM1,XMM1 + + MOV EAX, WA + MOVD XMM4,EAX + SHUFPS XMM4,XMM4,0 + MULPS XMM0,XMM4 + + MOV EDX, WB + MOVD XMM5,EDX + SHUFPS XMM5,XMM5,0 + MULPS XMM1,XMM5 + ADDPS XMM0,XMM1 + + MOVD XMM2,C + PUNPCKLBW XMM2,XMM7 + PUNPCKLWD XMM2,XMM7 + CVTDQ2PS XMM2,XMM2 + MOVD XMM3,D + PUNPCKLBW XMM3,XMM7 + PUNPCKLWD XMM3,XMM7 + CVTDQ2PS XMM3,XMM3 + + MOV EAX, WC + MOVD XMM4,EAX + SHUFPS XMM4,XMM4,0 + MULPS XMM2,XMM4 + + MOV EDX, WD + MOVD XMM5,EDX + SHUFPS XMM5,XMM5,0 + MULPS XMM3,XMM5 + ADDPS XMM2,XMM3 + ADDPS XMM0,XMM2 + + CVTPS2DQ XMM0,XMM0 + PACKSSDW XMM0,XMM7 + PACKUSWB XMM0,XMM7 + MOVD EAX,XMM0 +{$ENDIF} +end; +{$ENDIF} +{$ENDIF} + + +{ TColor32LookupTable } + +constructor TColor32LookupTable.Create(Order: Byte); +begin + inherited Create; + FOrder := Order; + OrderChanged; +end; + +destructor TColor32LookupTable.Destroy; +begin +{$WARNINGS OFF} + FreeMem(FGradientLUT); +{$WARNINGS ON} + inherited; +end; + +procedure TColor32LookupTable.AssignTo(Dest: TPersistent); +begin + if Dest is TColor32LookupTable then + with TColor32LookupTable(Dest) do + begin + FOrder := Self.FOrder; + OrderChanged; + Move(Self.FGradientLUT^, FGradientLUT^, FSize * SizeOf(TColor32)); + end + else + inherited; +end; + +function TColor32LookupTable.GetColor32(Index: Integer): TColor32; +begin + Result := FGradientLUT^[Index and FMask]; +end; + +procedure TColor32LookupTable.OrderChanged; +begin + FSize := 1 shl FOrder; + FMask := FSize - 1; +{$WARNINGS OFF} + GetMem(FGradientLUT, FSize * SizeOf(TColor32)); +{$WARNINGS ON} + if Assigned(FOnOrderChanged) then + FOnOrderChanged(Self); +end; + +procedure TColor32LookupTable.SetColor32(Index: Integer; const Value: TColor32); +begin + if (Index < 0) or (Index > Integer(FMask)) then + raise Exception.CreateFmt(RCStrIndexOutOfBounds, [Index]) + else + FGradientLUT^[Index] := Value; +end; + +procedure TColor32LookupTable.SetOrder(const Value: Byte); +begin + if FOrder <> Value then + begin + FOrder := Value; + OrderChanged; + end; +end; + + +{ TColor32Gradient; } + +constructor TColor32Gradient.Create(Color: TColor32); +begin Create(Color, Color); end; -constructor TGradient32.Create(StartColor, EndColor: TColor32); +constructor TColor32Gradient.Create(StartColor, EndColor: TColor32); var Temp: TArrayOfColor32GradientStop; begin + // simple gradient using 2 color stops SetLength(Temp, 2); Temp[0].Offset := 0; Temp[0].Color32 := StartColor; Temp[1].Offset := 1; Temp[1].Color32 := EndColor; + Create(Temp); end; -constructor TGradient32.Create(const GradientColors: TArrayOfColor32GradientStop); +constructor TColor32Gradient.Create(const GradientColors: TArrayOfColor32GradientStop); begin inherited Create; SetColors(GradientColors); end; -procedure TGradient32.AssignTo(Dest: TPersistent); +procedure TColor32Gradient.AssignTo(Dest: TPersistent); begin - if Dest is TGradient32 then - TGradient32(Dest).SetColors(Self.FGradientColors) + if Dest is TColor32Gradient then + TColor32Gradient(Dest).SetColors(Self.FGradientColors) else inherited; end; -procedure TGradient32.ClearColors; +procedure TColor32Gradient.ClearColors; begin SetLength(FGradientColors, 0); GradientColorsChanged; end; -procedure TGradient32.SetColors(const GradientColors: TArrayOfColor32GradientStop); +procedure TColor32Gradient.SetColors(const GradientColors: TArrayOfColor32GradientStop); var Index: Integer; begin @@ -693,7 +996,7 @@ end; end; -procedure TGradient32.SetColors(const GradientColors: TArrayOfColor32); +procedure TColor32Gradient.SetColors(const GradientColors: TArrayOfColor32); var Index: Integer; Scale: TFloat; @@ -728,14 +1031,14 @@ end; end; -procedure TGradient32.SetColors(const Palette: TPalette32); +procedure TColor32Gradient.SetColors(const Palette: TPalette32); var Index: Integer; Scale: TFloat; begin + // TPalette32 contains 256 colors SetLength(FGradientColors, Length(Palette)); - // several colors (at least 2) Scale := 1 / (Length(Palette) - 1); for Index := 0 to Length(Palette) - 1 do begin @@ -746,7 +1049,7 @@ GradientColorsChanged; end; -procedure TGradient32.SetStartColor(const Value: TColor32); +procedure TColor32Gradient.SetStartColor(const Value: TColor32); var HasChanged: Boolean; begin @@ -770,7 +1073,7 @@ GradientColorsChanged; end; -procedure TGradient32.SetEndColor(const Value: TColor32); +procedure TColor32Gradient.SetEndColor(const Value: TColor32); var HasChanged: Boolean; begin @@ -794,12 +1097,12 @@ GradientColorsChanged; end; -function TGradient32.GetGradientCount: Integer; +function TColor32Gradient.GetGradientCount: Integer; begin Result := Length(FGradientColors); end; -function TGradient32.GetGradientEntry(Index: Integer): TColor32GradientStop; +function TColor32Gradient.GetGradientEntry(Index: Integer): TColor32GradientStop; begin if Index > Length(FGradientColors) then raise Exception.CreateFmt(RCStrIndexOutOfBounds, [Index]) @@ -807,7 +1110,7 @@ Result := FGradientColors[Index]; end; -function TGradient32.GetStartColor: TColor32; +function TColor32Gradient.GetStartColor: TColor32; begin if Length(FGradientColors) = 0 then Result := clNone32 @@ -815,7 +1118,7 @@ Result := FGradientColors[0].Color32; end; -function TGradient32.GetEndColor: TColor32; +function TColor32Gradient.GetEndColor: TColor32; var Count: Integer; begin @@ -826,9 +1129,9 @@ Result := FGradientColors[Count - 1].Color32; end; -function TGradient32.GetColorAt(Fraction: TFloat): TColor32; +function TColor32Gradient.GetColorAt(Fraction: TFloat): TColor32; var - I, Count: Integer; + Index, Count: Integer; begin Count := GradientCount; if (Count = 0) or (Fraction <= FGradientColors[0].Offset) then @@ -837,37 +1140,44 @@ Result := EndColor else begin - I := 1; - while (I < Count) and (Fraction > FGradientColors[I].Offset) do - Inc(I); - Fraction := (Fraction - FGradientColors[I - 1].Offset) / - (FGradientColors[I].Offset - FGradientColors[I - 1].Offset); + Index := 1; + + // find color index for a given fraction (between 0 and 1) + while (Index < Count) and (Fraction > FGradientColors[Index].Offset) do + Inc(Index); + + // calculate new fraction (between two colors before and at 'Index') + Fraction := (Fraction - FGradientColors[Index - 1].Offset) / + (FGradientColors[Index].Offset - FGradientColors[Index - 1].Offset); + + // check if fraction is out of bounds if Fraction <= 0 then - Result := FGradientColors[I - 1].Color32 + Result := FGradientColors[Index - 1].Color32 else if Fraction >= 1 then - Result := FGradientColors[I].Color32 + Result := FGradientColors[Index].Color32 else begin - Result := CombineReg(FGradientColors[I].Color32, - FGradientColors[I - 1].Color32, Round($FF * Fraction)); + // interpolate color + Result := CombineReg(FGradientColors[Index].Color32, + FGradientColors[Index - 1].Color32, Round($FF * Fraction)); EMMS; end; end; end; -procedure TGradient32.FillColorLookUpTable(ColorLUT: TColor32LookupTable); +procedure TColor32Gradient.FillColorLookUpTable(ColorLUT: TColor32LookupTable); begin FillColorLookUpTable(ColorLUT.Color32Ptr, ColorLUT.Size); end; -procedure TGradient32.FillColorLookUpTable(var ColorLUT: array of TColor32); +procedure TColor32Gradient.FillColorLookUpTable(var ColorLUT: array of TColor32); begin {$WARNINGS OFF} FillColorLookUpTable(@ColorLUT[0], Length(ColorLUT)); {$WARNINGS ON} end; -procedure TGradient32.FillColorLookUpTable(ColorLUT: PColor32Array; +procedure TColor32Gradient.FillColorLookUpTable(ColorLUT: PColor32Array; Count: Integer); var LutIndex, StopIndex, GradCount: Integer; @@ -884,6 +1194,7 @@ Exit; end; + // set first (start) and last (end) color ColorLUT^[0] := StartColor; ColorLUT^[Count - 1] := EndColor; Delta := 1 / Count; @@ -940,30 +1251,38 @@ end; end; -procedure TGradient32.GradientColorsChanged; +procedure TColor32Gradient.GradientColorsChanged; begin if Assigned(FOnGradientColorsChanged) then FOnGradientColorsChanged(Self); end; -procedure TGradient32.AddColorStop(Offset: TFloat; Color: TColor32); +procedure TColor32Gradient.AddColorStop(Offset: TFloat; Color: TColor32); var Index, OldCount: Integer; begin + OldCount := Length(FGradientColors); Index := 0; + + // navigate to index where the color stop shall be inserted while (Index < OldCount) and (Offset >= FGradientColors[Index].Offset) do Inc(Index); + SetLength(FGradientColors, OldCount + 1); + + // move existing color stops to make space for the new color stop if (Index < OldCount) then Move(FGradientColors[Index], FGradientColors[Index + 1], (OldCount - Index) * SizeOf(TColor32GradientStop)); + + // finally insert new color stop FGradientColors[Index].Offset := Offset; FGradientColors[Index].Color32 := Color; GradientColorsChanged; end; -procedure TGradient32.LoadFromStream(Stream: TStream); +procedure TColor32Gradient.LoadFromStream(Stream: TStream); var Index: Integer; ChunkName: array [0..3] of AnsiChar; @@ -989,7 +1308,7 @@ GradientColorsChanged; end; -procedure TGradient32.SaveToStream(Stream: TStream); +procedure TColor32Gradient.SaveToStream(Stream: TStream); var Index: Integer; ChunkName: array [0..3] of AnsiChar; @@ -1013,69 +1332,6 @@ end; -{ TColor32LookupTable } - -procedure TColor32LookupTable.AssignTo(Dest: TPersistent); -begin - if Dest is TColor32LookupTable then - with TColor32LookupTable(Dest) do - begin - FOrder := Self.FOrder; - OrderChanged; - Move(Self.FGradientLUT^, FGradientLUT^, FSize * SizeOf(TColor32)); - end - else - inherited; -end; - -constructor TColor32LookupTable.Create(Order: Byte); -begin - inherited Create; - FOrder := Order; - OrderChanged; -end; - -destructor TColor32LookupTable.Destroy; -begin -{$WARNINGS OFF} - FreeMem(FGradientLUT); -{$WARNINGS ON} - inherited; -end; - -function TColor32LookupTable.GetColor32(Index: Integer): TColor32; -begin - Result := FGradientLUT^[Index and FMask]; -end; - -procedure TColor32LookupTable.OrderChanged; -begin - FSize := 1 shl FOrder; - FMask := FSize - 1; -{$WARNINGS OFF} - GetMem(FGradientLUT, FSize * SizeOf(TColor32)); -{$WARNINGS ON} - if Assigned(FOnOrderChanged) then - FOnOrderChanged(Self); -end; - -procedure TColor32LookupTable.SetColor32(Index: Integer; const Value: TColor32); -begin - if (Index < 0) or (Index > Integer(FMask)) then - raise Exception.CreateFmt(RCStrIndexOutOfBounds, [Index]) - else - FGradientLUT^[Index] := Value; -end; - -procedure TColor32LookupTable.SetOrder(const Value: Byte); -begin - if FOrder <> Value then - begin - FOrder := Value; - OrderChanged; - end; -end; - { TCustomSparsePointGradientSampler } function TCustomSparsePointGradientSampler.GetSampleFixed(X, Y: TFixed): TColor32; @@ -1088,241 +1344,7 @@ Result := GetSampleFloat(X, Y); end; -type - TLinear3PointInterpolation = function (A, B, C: TColor32; WA, WB, WC: Single): TColor32; - TLinear4PointInterpolation = function (A, B, C, D: TColor32; WA, WB, WC, WD: Single): TColor32; -var - Linear3PointInterpolation: TLinear3PointInterpolation; - Linear4PointInterpolation: TLinear4PointInterpolation; - -function Linear3PointInterpolation_Pas(A, B, C: TColor32; WA, WB, WC: Single): TColor32; -var - Clr: TColor32Entry absolute Result; -begin - Clr.B := Clamp(Round( - WA * TColor32Entry(A).B + - WB * TColor32Entry(B).B + - WC * TColor32Entry(C).B)); - Clr.G := Clamp(Round( - WA * TColor32Entry(A).G + - WB * TColor32Entry(B).G + - WC * TColor32Entry(C).G)); - Clr.R := Clamp(Round( - WA * TColor32Entry(A).R + - WB * TColor32Entry(B).R + - WC * TColor32Entry(C).R)); - Clr.A := Clamp(Round( - WA * TColor32Entry(A).A + - WB * TColor32Entry(B).A + - WC * TColor32Entry(C).A)); -end; - -function Linear4PointInterpolation_Pas(A, B, C, D: TColor32; WA, WB, WC, - WD: Single): TColor32; -var - Clr: TColor32Entry absolute Result; -begin - Clr.B := Clamp(Round( - WA * TColor32Entry(A).B + - WB * TColor32Entry(B).B + - WC * TColor32Entry(C).B + - WD * TColor32Entry(D).B)); - Clr.G := Clamp(Round( - WA * TColor32Entry(A).G + - WB * TColor32Entry(B).G + - WC * TColor32Entry(C).G + - WD * TColor32Entry(D).G)); - Clr.R := Clamp(Round( - WA * TColor32Entry(A).R + - WB * TColor32Entry(B).R + - WC * TColor32Entry(C).R + - WD * TColor32Entry(D).R)); - Clr.A := Clamp(Round( - WA * TColor32Entry(A).A + - WB * TColor32Entry(B).A + - WC * TColor32Entry(C).A + - WD * TColor32Entry(D).A)); -end; - -{$IFNDEF OMIT_SSE2} - -{$IFNDEF PUREPASCAL} -function Linear3PointInterpolation_SSE2(A, B, C: TColor32; WA, WB, WC: Single): TColor32; -asm -{$IFDEF TARGET_X86} - PXOR XMM3,XMM3 - MOVD XMM0,EAX - PUNPCKLBW XMM0,XMM3 - PUNPCKLWD XMM0,XMM3 - CVTDQ2PS XMM0,XMM0 - MOVD XMM1,EDX - PUNPCKLBW XMM1,XMM3 - PUNPCKLWD XMM1,XMM3 - CVTDQ2PS XMM1,XMM1 - MOVD XMM2,ECX - PUNPCKLBW XMM2,XMM3 - PUNPCKLWD XMM2,XMM3 - CVTDQ2PS XMM2,XMM2 - - MOV EAX, WA - MOV EDX, WB - MOV ECX, WC - MOVD XMM4,EAX - SHUFPS XMM4,XMM4,0 - MOVD XMM5,EDX - SHUFPS XMM5,XMM5,0 - MOVD XMM6,ECX - SHUFPS XMM6,XMM6,0 - - MULPS XMM0,XMM4 - MULPS XMM1,XMM5 - MULPS XMM2,XMM6 - ADDPS XMM0,XMM1 - ADDPS XMM0,XMM2 - CVTPS2DQ XMM0,XMM0 - PACKSSDW XMM0,XMM3 - PACKUSWB XMM0,XMM3 - MOVD EAX,XMM0 -{$ENDIF} -{$IFDEF TARGET_X64} - MOVQ XMM0,XMM3 - SHUFPS XMM0,XMM0,0 - MOVD XMM1,WB - SHUFPS XMM1,XMM1,0 - MOVD XMM2,WC - SHUFPS XMM2,XMM2,0 - - PXOR XMM3,XMM3 - MOVD XMM4,ECX - PUNPCKLBW XMM4,XMM3 - PUNPCKLWD XMM4,XMM3 - CVTDQ2PS XMM4,XMM4 - MOVD XMM5,EDX - PUNPCKLBW XMM5,XMM3 - PUNPCKLWD XMM5,XMM3 - CVTDQ2PS XMM5,XMM5 - MOVD XMM6,R8D - PUNPCKLBW XMM6,XMM3 - PUNPCKLWD XMM6,XMM3 - CVTDQ2PS XMM6,XMM6 - - MULPS XMM0,XMM4 - MULPS XMM1,XMM5 - MULPS XMM2,XMM6 - ADDPS XMM0,XMM1 - ADDPS XMM0,XMM2 - CVTPS2DQ XMM0,XMM0 - PACKSSDW XMM0,XMM3 - PACKUSWB XMM0,XMM3 - MOVD EAX,XMM0 -{$ENDIF} -end; - -function Linear4PointInterpolation_SSE2(A, B, C, D: TColor32; WA, WB, WC, WD: Single): TColor32; -asm -{$IFDEF TARGET_X86} - PXOR XMM7,XMM7 - - MOVD XMM0,EAX - PUNPCKLBW XMM0,XMM7 - PUNPCKLWD XMM0,XMM7 - CVTDQ2PS XMM0,XMM0 - MOVD XMM1,EDX - PUNPCKLBW XMM1,XMM7 - PUNPCKLWD XMM1,XMM7 - CVTDQ2PS XMM1,XMM1 - - MOV EAX, WA - MOVD XMM4,EAX - SHUFPS XMM4,XMM4,0 - MULPS XMM0,XMM4 - - MOV EDX, WB - MOVD XMM5,EDX - SHUFPS XMM5,XMM5,0 - MULPS XMM1,XMM5 - ADDPS XMM0,XMM1 - - MOVD XMM2,ECX - PUNPCKLBW XMM2,XMM7 - PUNPCKLWD XMM2,XMM7 - CVTDQ2PS XMM2,XMM2 - MOVD XMM3,D - PUNPCKLBW XMM3,XMM7 - PUNPCKLWD XMM3,XMM7 - CVTDQ2PS XMM3,XMM3 - - MOV EAX, WC - MOVD XMM4,EAX - SHUFPS XMM4,XMM4,0 - MULPS XMM2,XMM4 - - MOV EDX, WD - MOVD XMM5,EDX - SHUFPS XMM5,XMM5,0 - MULPS XMM3,XMM5 - ADDPS XMM2,XMM3 - ADDPS XMM0,XMM2 - - CVTPS2DQ XMM0,XMM0 - PACKSSDW XMM0,XMM7 - PACKUSWB XMM0,XMM7 - MOVD EAX,XMM0 -{$ENDIF} -{$IFDEF TARGET_X64} - PXOR XMM7,XMM7 - - MOVD XMM0,A - PUNPCKLBW XMM0,XMM7 - PUNPCKLWD XMM0,XMM7 - CVTDQ2PS XMM0,XMM0 - MOVD XMM1,B - PUNPCKLBW XMM1,XMM7 - PUNPCKLWD XMM1,XMM7 - CVTDQ2PS XMM1,XMM1 - - MOV EAX, WA - MOVD XMM4,EAX - SHUFPS XMM4,XMM4,0 - MULPS XMM0,XMM4 - - MOV EDX, WB - MOVD XMM5,EDX - SHUFPS XMM5,XMM5,0 - MULPS XMM1,XMM5 - ADDPS XMM0,XMM1 - - MOVD XMM2,C - PUNPCKLBW XMM2,XMM7 - PUNPCKLWD XMM2,XMM7 - CVTDQ2PS XMM2,XMM2 - MOVD XMM3,D - PUNPCKLBW XMM3,XMM7 - PUNPCKLWD XMM3,XMM7 - CVTDQ2PS XMM3,XMM3 - - MOV EAX, WC - MOVD XMM4,EAX - SHUFPS XMM4,XMM4,0 - MULPS XMM2,XMM4 - - MOV EDX, WD - MOVD XMM5,EDX - SHUFPS XMM5,XMM5,0 - MULPS XMM3,XMM5 - ADDPS XMM2,XMM3 - ADDPS XMM0,XMM2 - - CVTPS2DQ XMM0,XMM0 - PACKSSDW XMM0,XMM7 - PACKUSWB XMM0,XMM7 - MOVD EAX,XMM0 -{$ENDIF} -end; -{$ENDIF} -{$ENDIF} - { TBarycentricGradientSampler } constructor TBarycentricGradientSampler.Create(P1, P2, P3: TColor32FloatPoint); @@ -1811,13 +1833,12 @@ constructor TInvertedDistanceWeightingSampler.Create; begin FPower := 2; - FDists := nil; end; procedure TInvertedDistanceWeightingSampler.FinalizeSampling; begin inherited; - FreeMem(FDists); + Finalize(FDists); end; function TInvertedDistanceWeightingSampler.GetSampleFloat(X, Y: TFloat): TColor32; @@ -1833,19 +1854,17 @@ end; with FColorPoints[0] do - if FUsePower then - Temp := Math.Power(Sqr(X - Point.X) + Sqr(Y - Point.Y), FScaledPower) - else - Temp := Sqr(X - Point.X) + Sqr(Y - Point.Y); + Temp := Sqr(X - Point.X) + Sqr(Y - Point.Y); + if FUsePower then + Temp := Math.Power(Temp, FScaledPower); FDists[0] := 1 / Max(1, Temp); DistSum := FDists[0]; for Index := 1 to Count - 1 do with FColorPoints[Index] do begin + Temp := Sqr(X - Point.X) + Sqr(Y - Point.Y); if FUsePower then - Temp := Math.Power(Sqr(X - Point.X) + Sqr(Y - Point.Y), FScaledPower) - else - Temp := Sqr(X - Point.X) + Sqr(Y - Point.Y); + Temp := Math.Power(Temp, FScaledPower); FDists[Index] := 1 / Max(1, Temp); DistSum := DistSum + FDists[Index]; end; @@ -1853,6 +1872,28 @@ Assert(DistSum <> 0); DistSum := 1 / DistSum; Scale := FDists[0] * DistSum; + + case Count of + 3: + begin + // optimization for 3-Point interpolation + Result := Linear3PointInterpolation(FColorPoints[0].Color32, + FColorPoints[1].Color32, FColorPoints[2].Color32, FDists[0] * DistSum, + FDists[1] * DistSum, FDists[2] * DistSum); + Exit; + end; + 4: + begin + // optimization for 4-Point interpolation + Result := Linear4PointInterpolation(FColorPoints[0].Color32, + FColorPoints[1].Color32, FColorPoints[2].Color32, + FColorPoints[3].Color32, FDists[0] * DistSum, FDists[1] * DistSum, + FDists[2] * DistSum, FDists[3] * DistSum); + Exit; + end; + end; + + // general n-Point interpolation R := Scale * TColor32Entry(FColorPoints[0].Color32).R; G := Scale * TColor32Entry(FColorPoints[0].Color32).G; B := Scale * TColor32Entry(FColorPoints[0].Color32).B; @@ -1872,7 +1913,7 @@ procedure TInvertedDistanceWeightingSampler.PrepareSampling; begin - ReallocMem(FDists, Count * SizeOf(TFloat)); + SetLength(FDists, Count); FUsePower := FPower <> 2; FScaledPower := 0.5 * FPower; inherited; @@ -1913,7 +1954,8 @@ var I, J, K: Integer; begin - if Values[Indexes[I2]].Point.X < Values[Indexes[J1]].Point.X then Exit; + if Values[Indexes[I2]].Point.X < Values[Indexes[J1]].Point.X then + Exit; I := I1; J := J1; K := 0; @@ -1985,10 +2027,13 @@ if S = 0 then S := 1; Indexes[0] := 0; + + // initialize bounds Bounds.Left := Values[0].Point.X; Bounds.Top := Values[0].Point.Y; Bounds.Right := Bounds.Left; Bounds.Bottom := Bounds.Top; + for I := 1 to High(Values) do begin if Math.Sign(Values[I].Point.X - Values[I - 1].Point.X) = -S then @@ -1997,6 +2042,7 @@ Inc(Index); end; + // determine bounds if Values[I].Point.X < Bounds.Left then Bounds.Left := Values[I].Point.X; if Values[I].Point.Y < Bounds.Top then @@ -2045,7 +2091,7 @@ AbsY1Y2 := Abs(Pt1.Y - Pt2.Y); AbsY2Y3 := Abs(Pt2.Y - Pt3.Y); - // Check for coincident points + // check for coincident points if (AbsY1Y2 < CTolerance) and (AbsY2Y3 < CTolerance) then begin Result := False; @@ -2248,7 +2294,10 @@ begin inherited; + // perform triangulation FTriangles := DelaunayTriangulation(FColorPoints); + + // setup internal barycentric samplers SetLength(FBarycentric, Length(FTriangles)); for Index := 0 to Length(FTriangles) - 1 do begin @@ -2273,6 +2322,7 @@ Exit; end; + // check first barycentric interpolator FBarycentric[0].CalculateBarycentricCoordinates(X, Y, U, V, W); if (U >= 0) and (V >= 0) and (W >= 0) then begin @@ -2281,11 +2331,13 @@ Exit; end; + // calculate minimum distance MinDist := Sqr(U - 0.5) + Sqr(V - 0.5) + Sqr(W - 0.5); MinIndex := 0; for Index := 1 to High(FBarycentric) do begin + // check barycentric interpolator FBarycentric[Index].CalculateBarycentricCoordinates(X, Y, U, V, W); if (U >= 0) and (V >= 0) and (W >= 0) then begin @@ -2293,6 +2345,8 @@ FBarycentric[Index].Color[1], FBarycentric[Index].Color[2], U, V, W); Exit; end; + + // calculate distance and eventually update minimum distance Dist := Sqr(U - 0.5) + Sqr(V - 0.5) + Sqr(W - 0.5); if Dist < MinDist then begin @@ -2324,13 +2378,13 @@ constructor TCustomGradientSampler.Create; begin inherited; - FGradient := TGradient32.Create(clNone32); + FGradient := TColor32Gradient.Create(clNone32); FGradient.OnGradientColorsChanged := GradientChangedHandler; FWrapMode := wmMirror; WrapModeChanged; end; -constructor TCustomGradientSampler.Create(ColorGradient: TGradient32); +constructor TCustomGradientSampler.Create(ColorGradient: TColor32Gradient); begin Create; @@ -2356,7 +2410,7 @@ inherited; end; -procedure TCustomGradientSampler.SetGradient(const Value: TGradient32); +procedure TCustomGradientSampler.SetGradient(const Value: TColor32Gradient); begin if not Assigned(Value) then FGradient.ClearColors @@ -2537,8 +2591,8 @@ function TRadialGradientSampler.GetSampleFloat(X, Y: TFloat): TColor32; begin Transform(X, Y); - Result := FGradientLUT.Color32Ptr^[FWrapProc(Round(Sqrt(Sqr(X) + Sqr(Y)) * FScale), - FLutMask)]; + Result := FGradientLUT.Color32Ptr^[ + FWrapProc(Round(Sqrt(Sqr(X) + Sqr(Y)) * FScale), FLutMask)]; end; procedure TRadialGradientSampler.UpdateInternals; @@ -2670,13 +2724,13 @@ constructor TCustomGradientPolygonFiller.Create; begin - Create(TGradient32.Create(clNone32)); + Create(TColor32Gradient.Create(clNone32)); FOwnsGradient := True; FWrapMode := wmClamp; FWrapProc := Clamp; end; -constructor TCustomGradientPolygonFiller.Create(ColorGradient: TGradient32); +constructor TCustomGradientPolygonFiller.Create(ColorGradient: TColor32Gradient); begin FOwnsGradient := False; FGradient := ColorGradient; @@ -2831,7 +2885,8 @@ { TCustomLinearGradientPolygonFiller } -procedure TCustomLinearGradientPolygonFiller.SetStartPoint(const Value: TFloatPoint); +procedure TCustomLinearGradientPolygonFiller.SetStartPoint( + const Value: TFloatPoint); begin if (FStartPoint.X <> Value.X) or (FStartPoint.Y <> Value.Y) then begin @@ -2853,7 +2908,8 @@ end; end; -procedure TCustomLinearGradientPolygonFiller.SetEndPoint(const Value: TFloatPoint); +procedure TCustomLinearGradientPolygonFiller.SetEndPoint( + const Value: TFloatPoint); begin if (FEndPoint.X <> Value.X) or (FEndPoint.Y <> Value.Y) then begin @@ -2898,11 +2954,12 @@ function TLinearGradientPolygonFiller.ColorStopToScanLine(Index: Integer; Y: Integer): TFloat; var - Offset: TFloat; + Offset: array [0 .. 1] of TFloat; begin - Offset := FGradient.FGradientColors[Index].Offset; - Result := (1 - Offset) * FStartPoint.X + Offset * FEndPoint.X + - ((1 - Offset) * (FStartPoint.Y - Y) + Offset * (FEndPoint.Y - Y)) * FIncline; + Offset[0] := FGradient.FGradientColors[Index].Offset; + Offset[1] := 1 - Offset[0]; + Result := Offset[1] * FStartPoint.X + Offset[0] * FEndPoint.X + FIncline * + (Offset[1] * (FStartPoint.Y - Y) + Offset[0] * (FEndPoint.Y - Y)); end; function TLinearGradientPolygonFiller.GetFillLine: TFillLineEvent; @@ -2941,8 +2998,8 @@ EMMS; end; -procedure TLinearGradientPolygonFiller.FillLineVerticalExtreme(Dst: PColor32; DstX, - DstY, Length: Integer; AlphaValues: PColor32); +procedure TLinearGradientPolygonFiller.FillLineVerticalExtreme(Dst: PColor32; + DstX, DstY, Length: Integer; AlphaValues: PColor32); var X: Integer; Color32: TColor32; @@ -3086,7 +3143,7 @@ if XPos[1] > XPos[2] then XPos[1] := XPos[2]; - // check whether + // check whether next color needs to be drawn if XPos[1] > XPos[0] then begin Scale := 1 / (XOffset[1] - XOffset[0]); @@ -3126,7 +3183,7 @@ { TLinearGradientLookupTablePolygonFiller } constructor TLinearGradientLookupTablePolygonFiller.Create( - ColorGradient: TGradient32); + ColorGradient: TColor32Gradient); begin FGradientLUT := TColor32LookupTable.Create; FOwnsLUT := True; @@ -3153,7 +3210,8 @@ inherited; end; -procedure TLinearGradientLookupTablePolygonFiller.GradientColorsChangedHandler(Sender: TObject); +procedure TLinearGradientLookupTablePolygonFiller.GradientColorsChangedHandler( + Sender: TObject); begin GradientFillerChanged; end; @@ -3218,8 +3276,8 @@ EMMS; end; -procedure TLinearGradientLookupTablePolygonFiller.FillLineVerticalPadExtreme(Dst: PColor32; DstX, - DstY, Length: Integer; AlphaValues: PColor32); +procedure TLinearGradientLookupTablePolygonFiller.FillLineVerticalPadExtreme( + Dst: PColor32; DstX, DstY, Length: Integer; AlphaValues: PColor32); var X: Integer; Color32: TColor32; @@ -3290,8 +3348,8 @@ Scale := Mask / (XOffset[1] - XOffset[0]); for X := DstX to DstX + Length - 1 do begin - BlendMemEx(ColorLUT^[FWrapProc(Round((X - XOffset[0]) * Scale), Mask)], Dst^, - AlphaValues^); + BlendMemEx(ColorLUT^[FWrapProc(Round((X - XOffset[0]) * Scale), Mask)], + Dst^, AlphaValues^); EMMS; Inc(Dst); @@ -3334,8 +3392,8 @@ Scale := Mask / (XOffset[1] - XOffset[0]); for X := DstX to DstX + Length - 1 do begin - BlendMemEx(ColorLUT^[FWrapProc(Round((XOffset[1] - X) * Scale), Mask)], Dst^, - AlphaValues^); + BlendMemEx(ColorLUT^[FWrapProc(Round((XOffset[1] - X) * Scale), Mask)], + Dst^, AlphaValues^); EMMS; Inc(Dst); @@ -3408,7 +3466,7 @@ { TCustomRadialGradientPolygonFiller } constructor TCustomRadialGradientPolygonFiller.Create( - ColorGradient: TGradient32); + ColorGradient: TColor32Gradient); begin inherited; FGradientLUT := TColor32LookupTable.Create; Modified: trunk/Source/GR32_System.pas =================================================================== --- trunk/Source/GR32_System.pas 2012-10-06 21:36:11 UTC (rev 1966) +++ trunk/Source/GR32_System.pas 2012-10-06 23:29:06 UTC (rev 1967) @@ -199,7 +199,7 @@ Result := FloatToStrF(1000 * (FPerformanceCountStop - FPerformanceCountStart) / FFrequency, ffFixed, 15, 3); end; -function TPerfTimer.ReadSeconds: String; +function TPerfTimer.ReadSeconds: string; begin QueryPerformanceCounter(FPerformanceCountStop); QueryPerformanceFrequency(FFrequency); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <CW...@us...> - 2012-10-06 21:36:19
|
Revision: 1966 http://graphics32.svn.sourceforge.net/graphics32/?rev=1966&view=rev Author: CWBudde Date: 2012-10-06 21:36:11 +0000 (Sat, 06 Oct 2012) Log Message: ----------- * updated PNG library (shall be replaced by adding the code to the GR32 library or as external) Modified Paths: -------------- trunk/Examples/Drawing/Blurs/GR32_Png.pas trunk/Examples/Drawing/Blurs/GR32_PngCompilerSwitches.inc trunk/Examples/Drawing/Blurs/GR32_PortableNetworkGraphic.pas Modified: trunk/Examples/Drawing/Blurs/GR32_Png.pas =================================================================== --- trunk/Examples/Drawing/Blurs/GR32_Png.pas 2012-10-06 21:35:15 UTC (rev 1965) +++ trunk/Examples/Drawing/Blurs/GR32_Png.pas 2012-10-06 21:36:11 UTC (rev 1966) @@ -1,1908 +1,1950 @@ -unit GR32_PNG; - -(* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1 or LGPL 2.1 with linking exception - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * Alternatively, the contents of this file may be used under the terms of the - * Free Pascal modified version of the GNU Lesser General Public License - * Version 2.1 (the "FPC modified LGPL License"), in which case the provisions - * of this license are applicable instead of those above. - * Please see the file LICENSE.txt for additional information concerning this - * license. - * - * The Original Code is Graphics32 - * - * The Initial Developer of the Original Code is - * Christian-W. Budde - * - * Portions created by the Initial Developer are Copyright (C) 2000-2009 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * ***** END LICENSE BLOCK ***** *) - -interface - -{$I GR32.inc} -{$I GR32_PngCompilerSwitches.inc} - -uses - Classes, Graphics, SysUtils, GR32, GR32_PortableNetworkGraphic; - -type - TProgressEvent = procedure(Sender: TObject; Percent: Single) of object; - - TPortableNetworkGraphic32 = class(TPortableNetworkGraphic) - private - FProgressEvent : TProgressEvent; - procedure AssignPropertiesFromBitmap32(Bitmap32: TCustomBitmap32); - function GetBackgroundColor: TColor32; - protected - function GR32Scanline(Bitmap: TObject; Y: Integer): Pointer; virtual; - function GR32ScanlineProgress(Bitmap: TObject; Y: Integer): Pointer; virtual; - public - procedure AssignTo(Dest: TPersistent); override; - procedure Assign(Source: TPersistent); override; - - procedure DrawToBitmap32(Bitmap32: TCustomBitmap32); virtual; - - property Background: TColor32 read GetBackgroundColor; - property Progress: TProgressEvent read FProgressEvent write FProgressEvent; - end; - -implementation - -resourcestring - RCStrUnsupportedFormat = 'Unsupported Format'; - RCStrDataIncomplete = 'Data not complete'; - -type - TCustomPngNonInterlacedDecoder = class(TCustomPngDecoder) - protected - FBytesPerRow : Integer; - FRowByteSize : Integer; - procedure TransferData(Source: Pointer; Destination: PColor32); virtual; abstract; - public - constructor Create(Stream: TStream; Header: TChunkPngImageHeader; - Gamma: TChunkPngGamma = nil; Palette: TChunkPngPalette = nil; - Transparency : TCustomPngTransparency = nil); override; - destructor Destroy; override; - - procedure DecodeToScanline(Bitmap: TObject; ScanLineCallback: TScanLineCallback); override; - end; - - TPngNonInterlacedGrayscale1bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedGrayscale2bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedGrayscale4bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedGrayscale8bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedGrayscale16bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedTrueColor8bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedTrueColor16bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedPaletteDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedPalette8bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedGrayscaleAlpha8bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedGrayscaleAlpha16bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedTrueColorAlpha8bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TPngNonInterlacedTrueColorAlpha16bitDecoder = class(TCustomPngNonInterlacedDecoder) - protected - procedure TransferData(Source: Pointer; Destination: PColor32); override; - end; - - TCustomPngAdam7Decoder = class(TCustomPngDecoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); virtual; abstract; - public - constructor Create(Stream: TStream; Header: TChunkPngImageHeader; - Gamma: TChunkPngGamma = nil; Palette: TChunkPngPalette = nil; - Transparency : TCustomPngTransparency = nil); override; - destructor Destroy; override; - procedure DecodeToScanline(Bitmap: TObject; ScanLineCallback: TScanLineCallback); override; - end; - - TPngAdam7Grayscale1bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7Grayscale2bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7Grayscale4bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7Grayscale8bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7Grayscale16bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7TrueColor8bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7TrueColor16bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7Palette1bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7Palette2bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7Palette4bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7Palette8bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7GrayscaleAlpha8bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7GrayscaleAlpha16bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7TrueColorAlpha8bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TPngAdam7TrueColorAlpha16bitDecoder = class(TCustomPngAdam7Decoder) - protected - procedure TransferData(const Pass: Byte; Source: Pointer; Destination: PColor32); override; - end; - - TCustomPngNonInterlacedEncoder = class(TCustomPngEncoder) - protected - FBytesPerRow : Integer; - FRowByteSize : Integer; - function ColorInPalette(Color: TColor32): Integer; virtual; - procedure TransferData(Source: PColor32; Destination: Pointer); virtual; abstract; - public - constructor Create(Stream: TStream; Header: TChunkPngImageHeader; - Gamma: TChunkPngGamma = nil; Palette: TChunkPngPalette = nil; - Transparency : TCustomPngTransparency = nil); override; - destructor Destroy; override; - procedure EncodeFromScanline(Bitmap: TObject; ScanLineCallback: TScanLineCallback); override; - end; - - TPngNonInterlacedGrayscale1bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPngNonInterlacedGrayscale2bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPngNonInterlacedGrayscale4bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPngNonInterlacedGrayscale8bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPngNonInterlacedTrueColor8bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPngNonInterlacedPalette1bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPngNonInterlacedPalette2bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPngNonInterlacedPalette4bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPngNonInterlacedPalette8bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPngNonInterlacedGrayscaleAlpha8bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPngNonInterlacedTrueColorAlpha8bitEncoder = class(TCustomPngNonInterlacedEncoder) - protected - procedure TransferData(Source: PColor32; Destination: Pointer); override; - end; - - TPalette24 = array of TRGB24; - - -{ TPortableNetworkGraphic32 } - -function TPortableNetworkGraphic32.GetBackgroundColor: TColor32; -var - ResultColor32: TColor32Entry absolute Result; -begin - if Assigned(FBackgroundChunk) then - begin - if FBackgroundChunk.Background is TPngBackgroundColorFormat04 then - with TPngBackgroundColorFormat04(FBackgroundChunk.Background) do - begin - ResultColor32.R := GraySampleValue; - ResultColor32.G := GraySampleValue; - ResultColor32.B := GraySampleValue; - ResultColor32.A := $FF; - end - else - if FBackgroundChunk.Background is TPngBackgroundColorFormat26 then - with TPngBackgroundColorFormat26(FBackgroundChunk.Background) do - begin - ResultColor32.R := RedSampleValue; - ResultColor32.G := GreenSampleValue; - ResultColor32.B := BlueSampleValue; - ResultColor32.A := $FF; - end; - if FBackgroundChunk.Background is TPngBackgroundColorFormat3 then - with TPngBackgroundColorFormat3(FBackgroundChunk.Background) do - begin - ResultColor32.R := PaletteEntry[PaletteIndex].R; - ResultColor32.G := PaletteEntry[PaletteIndex].R; - ResultColor32.B := PaletteEntry[PaletteIndex].R; - ResultColor32.A := $FF; - end; - end - else Result := $0; -end; - -function TPortableNetworkGraphic32.GR32Scanline(Bitmap: TObject; Y: Integer): Pointer; -begin - if Bitmap is TBitmap32 - then Result := TBitmap32(Bitmap).ScanLine[Y] - else Result := nil; -end; - -function TPortableNetworkGraphic32.GR32ScanlineProgress(Bitmap: TObject; - Y: Integer): Pointer; -begin - Result := GR32Scanline(Bitmap, Y); - if FImageHeader.Height > 0 - then FProgressEvent(Self, 100 * Y / FImageHeader.Height) - else FProgressEvent(Self, 100); -end; - -procedure TPortableNetworkGraphic32.DrawToBitmap32(Bitmap32: TCustomBitmap32); -var - DecoderClass : TCustomPngDecoderClass; - DataStream : TMemoryStream; -begin - DataStream := TMemoryStream.Create; - try - // decompress image data to data stream - DecompressImageDataToStream(DataStream); - - // reset data stream position - DataStream.Seek(0, soFromBeginning); - - case ImageHeader.InterlaceMethod of - imNone : - case ImageHeader.ColorType of - ctGrayscale : - case ImageHeader.BitDepth of - 1 : DecoderClass := TPngNonInterlacedGrayscale1bitDecoder; - 2 : DecoderClass := TPngNonInterlacedGrayscale2bitDecoder; - 4 : DecoderClass := TPngNonInterlacedGrayscale4bitDecoder; - 8 : DecoderClass := TPngNonInterlacedGrayscale8bitDecoder; - 16 : DecoderClass := TPngNonInterlacedGrayscale16bitDecoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - ctTrueColor : - case ImageHeader.BitDepth of - 8 : DecoderClass := TPngNonInterlacedTrueColor8bitDecoder; - 16 : DecoderClass := TPngNonInterlacedTrueColor16bitDecoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - ctIndexedColor : - case ImageHeader.BitDepth of - 1, 2, 4 : DecoderClass := TPngNonInterlacedPaletteDecoder; - 8 : DecoderClass := TPngNonInterlacedPalette8bitDecoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - ctGrayscaleAlpha : - case ImageHeader.BitDepth of - 8 : DecoderClass := TPngNonInterlacedGrayscaleAlpha8bitDecoder; - 16 : DecoderClass := TPngNonInterlacedGrayscaleAlpha16bitDecoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - ctTrueColorAlpha : - case ImageHeader.BitDepth of - 8 : DecoderClass := TPngNonInterlacedTrueColorAlpha8bitDecoder; - 16 : DecoderClass := TPngNonInterlacedTrueColorAlpha16bitDecoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - imAdam7 : - case ImageHeader.ColorType of - ctGrayscale : - case ImageHeader.BitDepth of - 1 : DecoderClass := TPngAdam7Grayscale1bitDecoder; - 2 : DecoderClass := TPngAdam7Grayscale2bitDecoder; - 4 : DecoderClass := TPngAdam7Grayscale4bitDecoder; - 8 : DecoderClass := TPngAdam7Grayscale8bitDecoder; - 16 : DecoderClass := TPngAdam7Grayscale16bitDecoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - ctTrueColor : - case ImageHeader.BitDepth of - 8 : DecoderClass := TPngAdam7TrueColor8bitDecoder; - 16 : DecoderClass := TPngAdam7TrueColor16bitDecoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - ctIndexedColor : - case ImageHeader.BitDepth of - 1 : DecoderClass := TPngAdam7Palette1bitDecoder; - 2 : DecoderClass := TPngAdam7Palette2bitDecoder; - 4 : DecoderClass := TPngAdam7Palette4bitDecoder; - 8 : DecoderClass := TPngAdam7Palette8bitDecoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - ctGrayscaleAlpha : - case ImageHeader.BitDepth of - 8 : DecoderClass := TPngAdam7GrayscaleAlpha8bitDecoder; - 16 : DecoderClass := TPngAdam7GrayscaleAlpha16bitDecoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - ctTrueColorAlpha : - case ImageHeader.BitDepth of - 8 : DecoderClass := TPngAdam7TrueColorAlpha8bitDecoder; - 16 : DecoderClass := TPngAdam7TrueColorAlpha16bitDecoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - - with DecoderClass.Create(DataStream, FImageHeader, FGammaChunk, FPaletteChunk) do - try - if Assigned(FProgressEvent) - then DecodeToScanline(Bitmap32, GR32ScanlineProgress) - else DecodeToScanline(Bitmap32, GR32Scanline); - finally - Free; - end; - finally - FreeAndNil(DataStream); - end; -end; - -function ColorIndexInPalette(Color: TColor32; Palette: TPalette24): Integer; -begin - for Result := 0 to Length(Palette) - 1 do - if (TColor32Entry(Color).R = Palette[Result].R) and - (TColor32Entry(Color).G = Palette[Result].G) and - (TColor32Entry(Color).B = Palette[Result].B) - then Exit; - Result := -1; -end; - -procedure TPortableNetworkGraphic32.AssignPropertiesFromBitmap32( - Bitmap32: TCustomBitmap32); -var - Index : Integer; - IsAlpha : Boolean; - IsGrayScale : Boolean; - IsPalette : Boolean; - Color : TColor32; - TempPalette : TPalette24; - TempAlpha : Byte; -begin - with Bitmap32 do - begin - // basic properties - ImageHeader.Width := Width; - ImageHeader.Height := Height; - ImageHeader.CompressionMethod := 0; - ImageHeader.InterlaceMethod := imNone; - - // initialize - SetLength(TempPalette, 0); - IsGrayScale := True; - IsPalette := True; - IsAlpha := False; - TempAlpha := 0; - - // check every pixel in the bitmap for the use of the alpha channel, - // whether the image is grayscale or whether the colors can be stored - // as a palette (and build the palette at the same time - for Index := 0 to Width * Height - 1 do - begin - Color := Bits[Index]; - - // check whether the palette is empty - if Length(TempPalette) = 0 then - begin - IsAlpha := TColor32Entry(Color).A < 255 ; - - // eventually store first alpha component - if IsAlpha - then TempAlpha := TColor32Entry(Color).A; - - SetLength(TempPalette, 1); - TempPalette[0].R := TColor32Entry(Color).R; - TempPalette[0].G := TColor32Entry(Color).G; - TempPalette[0].B := TColor32Entry(Color).B; - IsGrayScale := (TColor32Entry(Color).R = TColor32Entry(Color).G) and - (TColor32Entry(Color).B = TColor32Entry(Color).G); - end - else - begin - // check alpha channel - if (TColor32Entry(Color).A < 255) then - begin - if IsAlpha then - if IsPalette and (TempAlpha <> TColor32Entry(Color).A) - then IsPalette := False else - else TempAlpha := TColor32Entry(Color).A; - - IsAlpha := True; - end; - if ColorIndexInPalette(Color, TempPalette) < 0 then - begin - if IsPalette then - if (Length(TempPalette) < 256) then - begin - SetLength(TempPalette, Length(TempPalette) + 1); - TempPalette[Length(TempPalette) - 1].R := TColor32Entry(Color).R; - TempPalette[Length(TempPalette) - 1].G := TColor32Entry(Color).G; - TempPalette[Length(TempPalette) - 1].B := TColor32Entry(Color).B; - if IsGrayScale and not ((TColor32Entry(Color).R = TColor32Entry(Color).G) and - (TColor32Entry(Color).B = TColor32Entry(Color).G)) - then IsGrayScale := False; - end - else IsPalette := False - else - if not ((TColor32Entry(Color).R = TColor32Entry(Color).G) and - (TColor32Entry(Color).B = TColor32Entry(Color).G)) - then IsGrayScale := False; - end; - end; - - if IsAlpha and (not IsPalette) and (not IsGrayScale) - then Break; - end; - - // temporary fix for the case that a palette and an alpha channel has been detected - if IsPalette and IsAlpha - then IsPalette := False; - - // set image header - with ImageHeader do - if IsGrayScale then - if IsAlpha then - begin - ColorType := ctGrayscaleAlpha; - BitDepth := 8; - end - else - begin - ColorType := ctIndexedColor; // ctGrayscale - if Length(TempPalette) <= 2 - then BitDepth := 1 else - if Length(TempPalette) <= 4 - then BitDepth := 2 else - if Length(TempPalette) <= 16 - then BitDepth := 4 - else BitDepth := 8; - end else - if IsPalette then - begin - ColorType := ctIndexedColor; - if Length(TempPalette) <= 2 - then BitDepth := 1 else - if Length(TempPalette) <= 4 - then BitDepth := 2 else - if Length(TempPalette) <= 16 - then BitDepth := 4 - else BitDepth := 8; - end - else - if IsAlpha then - begin - ColorType := ctTrueColorAlpha; - BitDepth := 8; - end - else - begin - ColorType := ctTrueColor; - BitDepth := 8; - end; - - // eventually prepare palette - if ImageHeader.HasPalette then - begin - Assert(Length(TempPalette) <= 256); - - if not Assigned(FPaletteChunk) - then FPaletteChunk := TChunkPngPalette.Create(ImageHeader); - - FPaletteChunk.Count := Length(TempPalette); - for Index := 0 to Length(TempPalette) - 1 - do FPaletteChunk.PaletteEntry[Index] := TempPalette[Index]; - end; - - {$IFDEF StoreGamma} - // add linear gamma chunk - if not Assigned(FGammaChunk) - then FGammaChunk := TChunkPngGamma.Create(ImageHeader); - FGammaChunk.GammaAsSingle := 1; - {$ELSE} - // delete any gama correction table - if Assigned(FGammaChunk) - then FreeAndNil(FGammaChunk); - {$ENDIF} - end; -end; - -procedure TPortableNetworkGraphic32.Assign(Source: TPersistent); -var - EncoderClass : TCustomPngEncoderClass; - DataStream : TMemoryStream; -begin - if Source is TCustomBitmap32 then - with TCustomBitmap32(Source) do - begin - // Assign - AssignPropertiesFromBitmap32(TCustomBitmap32(Source)); - - case ImageHeader.ColorType of - ctGrayscale : - case ImageHeader.BitDepth of - 1 : EncoderClass := TPngNonInterlacedGrayscale1bitEncoder; - 2 : EncoderClass := TPngNonInterlacedGrayscale2bitEncoder; - 4 : EncoderClass := TPngNonInterlacedGrayscale4bitEncoder; - 8 : EncoderClass := TPngNonInterlacedGrayscale8bitEncoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - ctTrueColor : EncoderClass := TPngNonInterlacedTrueColor8bitEncoder; - ctIndexedColor : - case ImageHeader.BitDepth of - 1 : EncoderClass := TPngNonInterlacedPalette1bitEncoder; - 2 : EncoderClass := TPngNonInterlacedPalette2bitEncoder; - 4 : EncoderClass := TPngNonInterlacedPalette4bitEncoder; - 8 : EncoderClass := TPngNonInterlacedPalette8bitEncoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - ctGrayscaleAlpha : EncoderClass := TPngNonInterlacedGrayscaleAlpha8bitEncoder; - ctTrueColorAlpha : EncoderClass := TPngNonInterlacedTrueColorAlpha8bitEncoder; - else raise EPngError.Create(RCStrUnsupportedFormat); - end; - - DataStream := TMemoryStream.Create; - with DataStream do - try - with EncoderClass.Create(DataStream, FImageHeader, FGammaChunk, FPaletteChunk) do - try - if Assigned(FProgressEvent) - then EncodeFromScanline(TCustomBitmap32(Source), GR32ScanlineProgress) - else EncodeFromScanline(TCustomBitmap32(Source), GR32Scanline); - finally - Free; - end; - - // reset data stream position - DataStream.Seek(0, soFromBeginning); - - // compress image data from data stream - CompressImageDataFromStream(DataStream); - finally - FreeAndNil(DataStream); - end; - end - else inherited; -end; - -procedure TPortableNetworkGraphic32.AssignTo(Dest: TPersistent); -begin - if Dest is TCustomBitmap32 then - begin - TCustomBitmap32(Dest).Width := ImageHeader.Width; - TCustomBitmap32(Dest).Height := ImageHeader.Height; - DrawToBitmap32(TCustomBitmap32(Dest)); - end - else inherited; -end; - - -const - CRowStart : array [0..6] of Integer = (0, 0, 4, 0, 2, 0, 1); - CColumnStart : array [0..6] of Integer = (0, 4, 0, 2, 0, 1, 0); - CRowIncrement : array [0..6] of Integer = (8, 8, 8, 4, 4, 2, 2); - CColumnIncrement : array [0..6] of Integer = (8, 8, 4, 4, 2, 2, 1); - CGrayScaleTable1Bit : array [0..1] of Byte = (0, $FF); - CGrayScaleTable2Bit : array [0..3] of Byte = (0, $55, $AA, $FF); - CGrayScaleTable4Bit : array [0..15] of Byte = (0, $11, $22, $33, $44, $55, - $66, $77, $88, $99, $AA, $BB, $CC, $DD, $EE, $FF); - - -{ TCustomPngNonInterlacedDecoder } - -constructor TCustomPngNonInterlacedDecoder.Create(Stream: TStream; - Header: TChunkPngImageHeader; Gamma: TChunkPngGamma; - Palette: TChunkPngPalette; Transparency : TCustomPngTransparency); -begin - inherited; - FBytesPerRow := FHeader.BytesPerRow; - FRowByteSize := FBytesPerRow + 1; - GetMem(FRowBuffer[0], FRowByteSize); - GetMem(FRowBuffer[1], FRowByteSize); -end; - -destructor TCustomPngNonInterlacedDecoder.Destroy; -begin - Dispose(FRowBuffer[0]); - Dispose(FRowBuffer[1]); - inherited; -end; - -procedure TCustomPngNonInterlacedDecoder.DecodeToScanline( - Bitmap: TObject; ScanLineCallback: TScanLineCallback); -var - Index : Integer; - CurrentRow : Integer; - PixelByteSize : Integer; - UsedFilters : TAvailableAdaptiveFilterMethods; -begin - // initialize variables - CurrentRow := 0; - UsedFilters := []; - PixelByteSize := FHeader.PixelByteSize; - - FillChar(FRowBuffer[1 - CurrentRow]^[0], FRowByteSize, 0); - - for Index := 0 to FHeader.Height - 1 do - begin - // read data from stream - if FStream.Read(FRowBuffer[CurrentRow][0], FRowByteSize) <> FRowByteSize - then raise EPngError.Create(RCStrDataIncomplete); - - // filter current row - DecodeFilterRow(TAdaptiveFilterMethod(FRowBuffer[CurrentRow]^[0]), FRowBuffer[CurrentRow], FRowBuffer[1 - CurrentRow], FBytesPerRow, PixelByteSize); - - // log used row pre filters - case TAdaptiveFilterMethod(FRowBuffer[CurrentRow]) of - afmSub : UsedFilters := UsedFilters + [aafmSub]; - afmUp : UsedFilters := UsedFilters + [aafmUp]; - afmAverage : UsedFilters := UsedFilters + [aafmAverage]; - afmPaeth : UsedFilters := UsedFilters + [aafmPaeth]; - end; - - // transfer data from row to image - TransferData(@FRowBuffer[CurrentRow][1], ScanLineCallback(Bitmap, Index)); - - // flip current row - CurrentRow := 1 - CurrentRow; - end; - FHeader.AdaptiveFilterMethods := UsedFilters; -end; - - -{ TPngNonInterlacedGrayscale1bitDecoder } - -procedure TPngNonInterlacedGrayscale1bitDecoder.TransferData(Source: Pointer; - Destination: PColor32); -var - Index : Integer; - Src : PByte absolute Source; - BitIndex : Byte; -begin - BitIndex := 8; - - for Index := 0 to FHeader.Width - 1 do - begin - Dec(BitIndex); - PColor32Entry(Destination)^.R := FMappingTable[CGrayScaleTable1Bit[(Src^ shr BitIndex) and $1]]; - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := 255; - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Src); - end; - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedGrayscale2bitDecoder } - -procedure TPngNonInterlacedGrayscale2bitDecoder.TransferData(Source: Pointer; - Destination: PColor32); -var - Index : Integer; - Src : PByte absolute Source; - BitIndex : Byte; -begin - BitIndex := 8; - - for Index := 0 to FHeader.Width - 1 do - begin - Dec(BitIndex, 2); - PColor32Entry(Destination)^.R := FMappingTable[CGrayScaleTable2Bit[(Src^ shr BitIndex) and $3]]; - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := 255; - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Src); - end; - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedGrayscale4bitDecoder } - -procedure TPngNonInterlacedGrayscale4bitDecoder.TransferData(Source: Pointer; - Destination: PColor32); -var - Index : Integer; - Src : PByte absolute Source; - BitIndex : Byte; -begin - BitIndex := 8; - - for Index := 0 to FHeader.Width - 1 do - begin - Dec(BitIndex, 4); - PColor32Entry(Destination)^.R := FMappingTable[CGrayScaleTable4Bit[(Src^ shr BitIndex) and $F]]; - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := 255; - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Src); - end; - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedGrayscale8bitDecoder } - -procedure TPngNonInterlacedGrayscale8bitDecoder.TransferData(Source: Pointer; - Destination: PColor32); -var - Index : Integer; - Src : PByte absolute Source; -begin - for Index := 0 to FHeader.Width - 1 do - begin - PColor32Entry(Destination)^.R := FMappingTable[Src^]; Inc(Src); - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := 255; - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedGrayscale16bitDecoder } - -procedure TPngNonInterlacedGrayscale16bitDecoder.TransferData( - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PWord absolute Source; -begin - for Index := 0 to FHeader.Width - 1 do - begin - PColor32Entry(Destination)^.R := FMappingTable[Src^ and $FF]; Inc(Src); - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := 255; - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedTrueColor8bitDecoder } - -procedure TPngNonInterlacedTrueColor8bitDecoder.TransferData(Source: Pointer; - Destination: PColor32); -var - Index : Integer; - Src : PRGB24 absolute Source; -begin - for Index := 0 to FHeader.Width - 1 do - begin - PColor32Entry(Destination)^.R := FMappingTable[Src^.R]; - PColor32Entry(Destination)^.G := FMappingTable[Src^.G]; - PColor32Entry(Destination)^.B := FMappingTable[Src^.B]; - PColor32Entry(Destination)^.A := 255; - Inc(Src); - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedTrueColor16bitDecoder } - -procedure TPngNonInterlacedTrueColor16bitDecoder.TransferData( - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PRGB24Word absolute Source; -begin - for Index := 0 to FHeader.Width - 1 do - begin - PColor32Entry(Destination)^.R := FMappingTable[Src^.R and $FF]; - PColor32Entry(Destination)^.G := FMappingTable[Src^.G and $FF]; - PColor32Entry(Destination)^.B := FMappingTable[Src^.B and $FF]; - PColor32Entry(Destination)^.A := 255; - Inc(Src); - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedPaletteDecoder } - -procedure TPngNonInterlacedPaletteDecoder.TransferData(Source: Pointer; - Destination: PColor32); -var - Index : Integer; - Src : PByte absolute Source; - Palette : PRGB24Array; - Color : TRGB24; - BitIndex : Byte; - BitMask : Byte; - BitDepth : Byte; -begin - BitIndex := 8; - BitDepth := FHeader.BitDepth; - BitMask := (1 shl BitDepth) - 1; - Palette := PRGB24Array(FMappingTable); - - for Index := 0 to FHeader.Width - 1 do - begin - Dec(BitIndex, BitDepth); - Color := Palette[(Src^ shr BitIndex) and BitMask]; - PColor32Entry(Destination)^.R := Color.R; - PColor32Entry(Destination)^.G := Color.G; - PColor32Entry(Destination)^.B := Color.B; - PColor32Entry(Destination)^.A := FAlphaTable[(Src^ shr BitIndex) and BitMask]; - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Src); - end; - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedPalette8bitDecoder } - -procedure TPngNonInterlacedPalette8bitDecoder.TransferData(Source: Pointer; - Destination: PColor32); -var - Index : Integer; - Src : PByte absolute Source; - Palette : PRGB24Array; -begin - Palette := PRGB24Array(FMappingTable); - for Index := 0 to FHeader.Width - 1 do - begin - PColor32Entry(Destination)^.R := Palette[Src^].R; - PColor32Entry(Destination)^.G := Palette[Src^].G; - PColor32Entry(Destination)^.B := Palette[Src^].B; - PColor32Entry(Destination)^.A := FAlphaTable[Src^]; - Inc(Src); - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedGrayscaleAlpha8bitDecoder } - -procedure TPngNonInterlacedGrayscaleAlpha8bitDecoder.TransferData( - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PByte absolute Source; -begin - for Index := 0 to FHeader.Width - 1 do - begin - PColor32Entry(Destination)^.R := FMappingTable[Src^]; Inc(Src); - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := Src^; Inc(Src); - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedGrayscaleAlpha16bitDecoder } - -procedure TPngNonInterlacedGrayscaleAlpha16bitDecoder.TransferData( - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PWord absolute Source; -begin - for Index := 0 to FHeader.Width - 1 do - begin - PColor32Entry(Destination)^.R := FMappingTable[Src^ and $FF]; Inc(Src); - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := Src^ and $FF; Inc(Src); - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedTrueColorAlpha8bitDecoder } - -procedure TPngNonInterlacedTrueColorAlpha8bitDecoder.TransferData( - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PRGB32 absolute Source; -begin - for Index := 0 to FHeader.Width - 1 do - begin - PColor32Entry(Destination)^.R := FMappingTable[Src^.R]; - PColor32Entry(Destination)^.G := FMappingTable[Src^.G]; - PColor32Entry(Destination)^.B := FMappingTable[Src^.B]; - PColor32Entry(Destination)^.A := Src^.A; - Inc(Src); - Inc(Destination); - end; -end; - - -{ TPngNonInterlacedTrueColorAlpha16bitDecoder } - -procedure TPngNonInterlacedTrueColorAlpha16bitDecoder.TransferData( - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PRGB32Word absolute Source; -begin - for Index := 0 to FHeader.Width - 1 do - begin - PColor32Entry(Destination)^.R := FMappingTable[Src^.R and $FF]; - PColor32Entry(Destination)^.G := FMappingTable[Src^.G and $FF]; - PColor32Entry(Destination)^.B := FMappingTable[Src^.B and $FF]; - PColor32Entry(Destination)^.A := Src^.A and $FF; - Inc(Src); - Inc(Destination); - end; -end; - - -{ TCustomPngAdam7Decoder } - -constructor TCustomPngAdam7Decoder.Create(Stream: TStream; - Header: TChunkPngImageHeader; Gamma: TChunkPngGamma; - Palette: TChunkPngPalette; Transparency : TCustomPngTransparency); -begin - inherited; - - // allocate row buffer memory - GetMem(FRowBuffer[0], FHeader.BytesPerRow + 1); - GetMem(FRowBuffer[1], FHeader.BytesPerRow + 1); -end; - -destructor TCustomPngAdam7Decoder.Destroy; -begin - Dispose(FRowBuffer[0]); - Dispose(FRowBuffer[1]); - inherited; -end; - -procedure TCustomPngAdam7Decoder.DecodeToScanline( - Bitmap: TObject; ScanLineCallback: TScanLineCallback); -var - CurrentRow : Integer; - RowByteSize : Integer; - PixelPerRow : Integer; - PixelByteSize : Integer; - CurrentPass : Integer; - PassRow : Integer; - UsedFilters : TAvailableAdaptiveFilterMethods; -begin - // initialize variables - CurrentRow := 0; - RowByteSize := 0; - UsedFilters := []; - PixelByteSize := FHeader.PixelByteSize; - - // The Adam7 interlacer uses 7 passes to create the complete image - for CurrentPass := 0 to 6 do - begin - // calculate some intermediate variables - PixelPerRow := (FHeader.Width - CColumnStart[CurrentPass] + CColumnIncrement[CurrentPass] - 1) div CColumnIncrement[CurrentPass]; - - with FHeader do - case ColorType of - ctGrayscale, ctIndexedColor: RowByteSize := (PixelPerRow * BitDepth + 7) div 8; - ctTrueColor: RowByteSize := (PixelPerRow * BitDepth * 3) div 8; - ctGrayscaleAlpha: RowByteSize := (PixelPerRow * BitDepth * 2) div 8; - ctTrueColorAlpha: RowByteSize := (PixelPerRow * BitDepth * 4) div 8; - else Continue; - end; - if RowByteSize = 0 - then Continue; - - PassRow := CRowStart[CurrentPass]; - - // clear previous row - FillChar(FRowBuffer[1 - CurrentRow]^[0], RowByteSize, 0); - - // process pixel - while PassRow < FHeader.Height do - begin - // get interlaced row data - if FStream.Read(FRowBuffer[CurrentRow][0], RowByteSize + 1) <> (RowByteSize + 1) - then raise EPngError.Create(RCStrDataIncomplete); - - DecodeFilterRow(TAdaptiveFilterMethod(FRowBuffer[CurrentRow]^[0]), FRowBuffer[CurrentRow], FRowBuffer[1 - CurrentRow], RowByteSize, PixelByteSize); - - // log used row pre filters - case TAdaptiveFilterMethod(FRowBuffer[CurrentRow]) of - afmSub : UsedFilters := UsedFilters + [aafmSub]; - afmUp : UsedFilters := UsedFilters + [aafmUp]; - afmAverage : UsedFilters := UsedFilters + [aafmAverage]; - afmPaeth : UsedFilters := UsedFilters + [aafmPaeth]; - end; - - // transfer and deinterlace image data - TransferData(CurrentPass, @FRowBuffer[CurrentRow][1], ScanLineCallback(Bitmap, PassRow)); - - // prepare for the next pass - Inc(PassRow, CRowIncrement[CurrentPass]); - CurrentRow := 1 - CurrentRow; - end; - end; - FHeader.AdaptiveFilterMethods := UsedFilters; -end; - - -{ TPngAdam7Grayscale1bitDecoder } - -procedure TPngAdam7Grayscale1bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - BitIndex : Integer; - Src : PByte absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - BitIndex := 8; - repeat - Dec(BitIndex); - PColor32Entry(Destination)^.R := FMappingTable[CGrayScaleTable1Bit[(Src^ shr BitIndex) and $1]]; - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := 255; - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Src); - end; - - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7Grayscale2bitDecoder } - -procedure TPngAdam7Grayscale2bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - BitIndex : Integer; - Src : PByte absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - BitIndex := 8; - repeat - Dec(BitIndex, 2); - PColor32Entry(Destination)^.R := FMappingTable[CGrayScaleTable2Bit[((Src^ shr BitIndex) and $3)]]; - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := 255; - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Src); - end; - - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7Grayscale4bitDecoder } - -procedure TPngAdam7Grayscale4bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - BitIndex : Integer; - Src : PByte absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - BitIndex := 8; - repeat - Dec(BitIndex, 4); - PColor32Entry(Destination)^.R := FMappingTable[CGrayScaleTable4Bit[((Src^ shr BitIndex) and $F)]]; - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := 255; - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Src); - end; - - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - -{ TPngAdam7Grayscale8bitDecoder } - -procedure TPngAdam7Grayscale8bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PByte absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - PColor32Entry(Destination)^.R := FMappingTable[Src^]; Inc(Src); - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := 255; - - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7Grayscale16bitDecoder } - -procedure TPngAdam7Grayscale16bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PWord absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - PColor32Entry(Destination)^.R := FMappingTable[Src^ and $FF]; Inc(Src); - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := 255; - - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7TrueColor8bitDecoder } - -procedure TPngAdam7TrueColor8bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PRGB24 absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - PColor32Entry(Destination)^.R := FMappingTable[Src^.R]; - PColor32Entry(Destination)^.G := FMappingTable[Src^.G]; - PColor32Entry(Destination)^.B := FMappingTable[Src^.B]; - PColor32Entry(Destination)^.A := 255; - - Inc(Src); - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7TrueColor16bitDecoder } - -procedure TPngAdam7TrueColor16bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PRGB24Word absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - PColor32Entry(Destination)^.R := FMappingTable[Src^.R and $FF]; - PColor32Entry(Destination)^.G := FMappingTable[Src^.G and $FF]; - PColor32Entry(Destination)^.B := FMappingTable[Src^.B and $FF]; - PColor32Entry(Destination)^.A := 255; - - Inc(Src); - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7Palette1bitDecoder } - -procedure TPngAdam7Palette1bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - BitIndex : Integer; - Src : PByte absolute Source; - Palette : PRGB24Array; - Color : TRGB24; -begin - BitIndex := 8; - Palette := PRGB24Array(FMappingTable); - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - Dec(BitIndex); - Color := Palette[(Src^ shr BitIndex) and $1]; - PColor32Entry(Destination)^.R := Color.R; - PColor32Entry(Destination)^.G := Color.G; - PColor32Entry(Destination)^.B := Color.B; - PColor32Entry(Destination)^.A := FAlphaTable[(Src^ shr BitIndex) and $1]; - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Src); - end; - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7Palette2bitDecoder } - -procedure TPngAdam7Palette2bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - BitIndex : Integer; - Src : PByte absolute Source; - Palette : PRGB24Array; - Color : TRGB24; -begin - BitIndex := 8; - Palette := PRGB24Array(FMappingTable); - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - Dec(BitIndex, 2); - Color := Palette[(Src^ shr BitIndex) and $3]; - PColor32Entry(Destination)^.R := Color.R; - PColor32Entry(Destination)^.G := Color.G; - PColor32Entry(Destination)^.B := Color.B; - PColor32Entry(Destination)^.A := FAlphaTable[(Src^ shr BitIndex) and $3]; - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Src); - end; - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7Palette4bitDecoder } - -procedure TPngAdam7Palette4bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - BitIndex : Integer; - Src : PByte absolute Source; - Palette : PRGB24Array; - Color : TRGB24; -begin - BitIndex := 8; - Palette := PRGB24Array(FMappingTable); - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - Dec(BitIndex, 4); - Color := Palette[(Src^ shr BitIndex) and $F]; - PColor32Entry(Destination)^.R := Color.R; - PColor32Entry(Destination)^.G := Color.G; - PColor32Entry(Destination)^.B := Color.B; - PColor32Entry(Destination)^.A := FAlphaTable[(Src^ shr BitIndex) and $F]; - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Src); - end; - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7Palette8bitDecoder } - -procedure TPngAdam7Palette8bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PByte absolute Source; - Palette : PRGB24Array; -begin - Palette := PRGB24Array(FMappingTable); - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - PColor32Entry(Destination)^.R := Palette[Src^].R; - PColor32Entry(Destination)^.G := Palette[Src^].G; - PColor32Entry(Destination)^.B := Palette[Src^].B; - PColor32Entry(Destination)^.A := FAlphaTable[Src^]; - - Inc(Src); - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7GrayscaleAlpha8bitDecoder } - -procedure TPngAdam7GrayscaleAlpha8bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PByte absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - PColor32Entry(Destination)^.R := FMappingTable[Src^]; Inc(Src); - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := Src^; Inc(Src); - - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7GrayscaleAlpha16bitDecoder } - -procedure TPngAdam7GrayscaleAlpha16bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - Src : PWord absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - PColor32Entry(Destination)^.R := FMappingTable[Src^ and $FF]; Inc(Src); - PColor32Entry(Destination)^.G := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.B := PColor32Entry(Destination)^.R; - PColor32Entry(Destination)^.A := Src^ and $FF; Inc(Src); - - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7TrueColorAlpha8bitDecoder } - -procedure TPngAdam7TrueColorAlpha8bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - SrcPtr : PRGB32 absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - PColor32Entry(Destination)^.R := FMappingTable[SrcPtr^.R]; - PColor32Entry(Destination)^.G := FMappingTable[SrcPtr^.G]; - PColor32Entry(Destination)^.B := FMappingTable[SrcPtr^.B]; - PColor32Entry(Destination)^.A := SrcPtr^.A; - - Inc(SrcPtr); - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TPngAdam7TrueColorAlpha16bitDecoder } - -procedure TPngAdam7TrueColorAlpha16bitDecoder.TransferData(const Pass: Byte; - Source: Pointer; Destination: PColor32); -var - Index : Integer; - SrcPtr : PRGB32Word absolute Source; -begin - Index := CColumnStart[Pass]; - Inc(Destination, Index); - repeat - PColor32Entry(Destination)^.R := FMappingTable[SrcPtr^.R and $FF]; - PColor32Entry(Destination)^.G := FMappingTable[SrcPtr^.G and $FF]; - PColor32Entry(Destination)^.B := FMappingTable[SrcPtr^.B and $FF]; - PColor32Entry(Destination)^.A := SrcPtr^.A and $FF; - - Inc(SrcPtr); - Inc(Destination, CColumnIncrement[Pass]); - Inc(Index, CColumnIncrement[Pass]); - until Index >= FHeader.Width; -end; - - -{ TCustomPngNonInterlacedEncoder } - -constructor TCustomPngNonInterlacedEncoder.Create(Stream: TStream; - Header: TChunkPngImageHeader; Gamma: TChunkPngGamma; - Palette: TChunkPngPalette; Transparency : TCustomPngTransparency); -begin - inherited; - FBytesPerRow := FHeader.BytesPerRow; - FRowByteSize := FBytesPerRow + 1; - GetMem(FRowBuffer[0], FRowByteSize); - GetMem(FRowBuffer[1], FRowByteSize); -end; - -destructor TCustomPngNonInterlacedEncoder.Destroy; -begin - Dispose(FRowBuffer[0]); - Dispose(FRowBuffer[1]); - inherited; -end; - -function TCustomPngNonInterlacedEncoder.ColorInPalette( - Color: TColor32): Integer; -var - Color24 : TRGB24; -begin - for Result := 0 to FPalette.Count - 1 do - begin - Color24 := FPalette.PaletteEntry[Result]; - if (TColor32Entry(Color).R = Color24.R) and - (TColor32Entry(Color).G = Color24.G) and - (TColor32Entry(Color).B = Color24.B) - then Exit; - end; - Result := -1; -end; - -procedure TCustomPngNonInterlacedEncoder.EncodeFromScanline(Bitmap: TObject; - ScanLineCallback: TScanLineCallback); -var - Index : Integer; - CurrentRow : Integer; - OutputRow : PByteArray; - TempBuffer : PByteArray; -begin - // initialize variables - CurrentRow := 0; - FillChar(FRowBuffer[1 - CurrentRow]^[0], FRowByteSize, 0); - - // check if pre filter is used and eventually calculate pre filter - if FHeader.ColorType <> ctIndexedColor then - begin - Assert(FRowByteSize = FBytesPerRow + 1); - GetMem(OutputRow, FRowByteSize); - GetMem(TempBuffer, FRowByteSize); - try - for Index := 0 to FHeader.Height - 1 do - begin - // transfer data from image to current row - TransferData(ScanLineCallback(Bitmap, Index), @FRowBuffer[CurrentRow][1]); - - // filter current row - EncodeFilterRow(FRowBuffer[CurrentRow], FRowBuffer[1 - CurrentRow], - OutputRow, TempBuffer, FBytesPerRow, FHeader.PixelByteSize); - Assert(OutputRow[0] in [0..4]); - - // write data to data stream - FStream.Write(OutputRow[0], FRowByteSize); - - // flip current row used - CurrentRow := 1 - CurrentRow; - end; - finally - Dispose(OutputRow); - Dispose(TempBuffer); - end; - end - else - for Index := 0 to FHeader.Height - 1 do - begin - // transfer data from image to current row - TransferData(ScanLineCallback(Bitmap, Index), @FRowBuffer[CurrentRow][1]); - - // set filter method to none - FRowBuffer[CurrentRow][0] := 0; - - // write data to data stream - FStream.Write(FRowBuffer[CurrentRow][0], FRowByteSize); - - // flip current row used - CurrentRow := 1 - CurrentRow; - end; -end; - - -{ TPngNonInterlacedGrayscale1bitEncoder } - -procedure TPngNonInterlacedGrayscale1bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PByte absolute Destination; - BitIndex : Byte; -begin - BitIndex := 8; - - for Index := 0 to FHeader.Width - 1 do - begin - Dec(BitIndex); - Dest^ := (Dest^ and not ($1 shl BitIndex)) or - (((PColor32Entry(Source)^.R shr 7) and $1) shl BitIndex); - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Dest); - end; - Inc(Source); - end; -end; - - -{ TPngNonInterlacedGrayscale2bitEncoder } - -procedure TPngNonInterlacedGrayscale2bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PByte absolute Destination; - BitIndex : Byte; -begin - BitIndex := 8; - - for Index := 0 to FHeader.Width - 1 do - begin - Dec(BitIndex, 2); - Dest^ := (Dest^ and not ($3 shl BitIndex)) or - (((PColor32Entry(Source)^.R shr 6) and $3) shl BitIndex); - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Dest); - end; - Inc(Source); - end; -end; - - -{ TPngNonInterlacedGrayscale4bitEncoder } - -procedure TPngNonInterlacedGrayscale4bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PByte absolute Destination; - BitIndex : Byte; -begin - BitIndex := 8; - - for Index := 0 to FHeader.Width - 1 do - begin - Dec(BitIndex, 4); - Dest^ := (Dest^ and not ($F shl BitIndex)) or - (((PColor32Entry(Source)^.R shr 4) and $F) shl BitIndex); - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Dest); - end; - Inc(Source); - end; -end; - - -{ TPngNonInterlacedGrayscale8bitEncoder } - -procedure TPngNonInterlacedGrayscale8bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PByte absolute Destination; -begin - for Index := 0 to FHeader.Width - 1 do - begin - Dest^ := PColor32Entry(Source)^.R; - Inc(Source); - Inc(Dest); - end; -end; - - -{ TPngNonInterlacedTrueColor8bitEncoder } - -procedure TPngNonInterlacedTrueColor8bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PRGB24 absolute Destination; -begin - for Index := 0 to FHeader.Width - 1 do - begin - Dest^.R := PColor32Entry(Source)^.R; - Dest^.G := PColor32Entry(Source)^.G ; - Dest^.B := PColor32Entry(Source)^.B; - Inc(Source); - Inc(Dest); - end; -end; - - -{ TPngNonInterlacedPalette1bitEncoder } - -procedure TPngNonInterlacedPalette1bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PByte absolute Destination; - BitIndex : Byte; -begin - BitIndex := 8; - - for Index := 0 to FHeader.Width - 1 do - begin - Dec(BitIndex); - Dest^ := (Dest^ and not ($1 shl BitIndex)) or - ((ColorInPalette(Source^) and $1) shl BitIndex); - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Dest); - end; - Inc(Source); - end; -end; - - -{ TPngNonInterlacedPalette2bitEncoder } - -procedure TPngNonInterlacedPalette2bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PByte absolute Destination; - BitIndex : Byte; -begin - BitIndex := 8; - - for Index := 0 to FHeader.Width - 1 do - begin - Dec(BitIndex, 2); - Dest^ := (Dest^ and not ($3 shl BitIndex)) or - ((ColorInPalette(Source^) and $3) shl BitIndex); - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Dest); - end; - Inc(Source); - end; -end; - - -{ TPngNonInterlacedPalette4bitEncoder } - -procedure TPngNonInterlacedPalette4bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PByte absolute Destination; - BitIndex : Byte; -begin - BitIndex := 8; - - for Index := 0 to FHeader.Width - 1 do - begin - Dec(BitIndex, 4); - Dest^ := (Dest^ and not ($F shl BitIndex)) or - ((ColorInPalette(Source^) and $F) shl BitIndex); - - if BitIndex = 0 then - begin - BitIndex := 8; - Inc(Dest); - end; - Inc(Source); - end; -end; - - -{ TPngNonInterlacedPalette8bitEncoder } - -procedure TPngNonInterlacedPalette8bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PByte absolute Destination; -begin - for Index := 0 to FHeader.Width - 1 do - begin - Dest^ := ColorInPalette(Source^); - Inc(Source); - Inc(Dest); - end; -end; - - -{ TPngNonInterlacedGrayscaleAlpha8bitEncoder } - -procedure TPngNonInterlacedGrayscaleAlpha8bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PByte absolute Destination; -begin - for Index := 0 to FHeader.Width - 1 do - begin - Dest^ := PColor32Entry(Source)^.R; Inc(Dest); - Dest^ := PColor32Entry(Source)^.A; Inc(Dest); - Inc(Source); - end; -end; - - -{ TPngNonInterlacedTrueColorAlpha8bitEncoder } - -procedure TPngNonInterlacedTrueColorAlpha8bitEncoder.TransferData(Source: PColor32; - Destination: Pointer); -var - Index : Integer; - Dest : PRGB32 absolute Destination; -begin - for Index := 0 to FHeader.Width - 1 do - begin - Dest^.R := PColor32Entry(Source)^.R; - Dest^.G := PColor32Entry(Source)^.G; - Dest^.B := PColor32Entry(Source)^.B; - Dest^.A := PColor32Entry(Source)^.A; - Inc(Dest); - Inc(Source); - end; -end; - -end. +unit GR32_PNG; + +(* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1 or LGPL 2.1 with linking exception + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * Alternatively, the contents of this file may be used under the terms of the + * Free Pascal modified version of the GNU Lesser General Public License + * Version 2.1 (the "FPC modified LGPL License"), in which case the provisions + * of this license are applicable instead of those above. + * Please see the file LICENSE.txt for additional information concerning this + * license. + * + * The Original Code is Graphics32 + * + * The Initial Developer of the Original Code is + * Christian-W. Budde + * + * Portions created by the Initial Developer are Copyright (C) 2000-2009 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * ***** END LICENSE BLOCK ***** *) + +interface + +{$I GR32.inc} +{$I GR32_PngCompilerSwitches.inc} + +uses + Classes, Graphics, SysUtils, GR32, GR32_PortableNetworkGraphic; + +type + TProgressEvent = procedure(Sender: TObject; Percent: Single) of object; + + TPortableNetworkGraphic32 = class(TPortableNetworkGraphic) + private + FProgressEvent : TProgressEvent; + procedure AssignPropertiesFromBitmap32(Bitmap32: TCustomBitmap32); + function GetBackgroundColor: TColor32; + ... [truncated message content] |
From: <CW...@us...> - 2012-10-06 21:35:21
|
Revision: 1965 http://graphics32.svn.sourceforge.net/graphics32/?rev=1965&view=rev Author: CWBudde Date: 2012-10-06 21:35:15 +0000 (Sat, 06 Oct 2012) Log Message: ----------- * removed dependency of Windows unit for Lazarus Modified Paths: -------------- trunk/Examples/Drawing/Blurs/Blurs.lpi trunk/Examples/Drawing/Blurs/MainUnit.pas Modified: trunk/Examples/Drawing/Blurs/Blurs.lpi =================================================================== --- trunk/Examples/Drawing/Blurs/Blurs.lpi 2012-10-06 21:16:42 UTC (rev 1964) +++ trunk/Examples/Drawing/Blurs/Blurs.lpi 2012-10-06 21:35:15 UTC (rev 1965) @@ -68,11 +68,19 @@ <PackageName Value="LCL"/> </Item2> </RequiredPackages> - <Units Count="1"> + <Units Count="2"> <Unit0> <Filename Value="Blurs.lpr"/> <IsPartOfProject Value="True"/> </Unit0> + <Unit1> + <Filename Value="MainUnit.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="FrmBlurs"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="MainUnit"/> + </Unit1> </Units> </ProjectOptions> <CompilerOptions> Modified: trunk/Examples/Drawing/Blurs/MainUnit.pas =================================================================== --- trunk/Examples/Drawing/Blurs/MainUnit.pas 2012-10-06 21:16:42 UTC (rev 1964) +++ trunk/Examples/Drawing/Blurs/MainUnit.pas 2012-10-06 21:35:15 UTC (rev 1965) @@ -3,19 +3,11 @@ interface uses -{$IFNDEF FPC} - Windows, -{$ELSE} - LCLIntf, LCLType, LMessages, Windows, -{$ENDIF} - Messages, SysUtils, Classes, Graphics, Controls, Forms, Menus, Dialogs, - ComCtrls, ExtCtrls, StdCtrls, Math, GR32, GR32_Image, GR32_Layers; + {$IFNDEF FPC} Windows, {$ELSE} LCLIntf, LCLType, {$ENDIF} + SysUtils, Classes, Graphics, Controls, Forms, Menus, Dialogs, ComCtrls, + ExtCtrls, StdCtrls, Math, GR32, GR32_Image, GR32_Layers, GR32_System; type -{$IFDEF FPC} - TLargeInteger = Int64; -{$ENDIF} - TFrmBlurs = class(TForm) MnuBlurType: TMenuItem; CbxBidirectional: TCheckBox; @@ -53,10 +45,10 @@ procedure TbrBlurAngleChange(Sender: TObject); procedure TbrBlurRadiusChange(Sender: TObject); private - ReDrawing: boolean; + FPerfTimer: TPerfTimer; + FDuration: string; - QPF: TLargeInteger; - QPCounter1, QPCounter2: TLargeInteger; + ReDrawing: Boolean; BalloonImage: TBitmap32; IcelandImage: TBitmap32; @@ -74,7 +66,7 @@ uses {$IFNDEF FPC} JPEG, {$ENDIF} GR32_Polygons, GR32_VectorUtils, GR32_Blurs, - GR32_Png, GR32_System; + GR32_Png; {$IFDEF FPC} {$R *.lfm} @@ -159,6 +151,8 @@ IcelandImage := TBitmap32.create; LoadResourceImage('ICELAND', IcelandImage); + FPerfTimer := TPerfTimer.Create; + Randomize; RandBoxImage := TBitmap32.create; //generate an image of full of random boxes ... @@ -172,12 +166,12 @@ BmpLayer := TBitmapLayer(ImgViewPage3.Layers.Add(TBitmapLayer)); BmpLayer.Bitmap.DrawMode := dmBlend; - QueryPerformanceFrequency(QPF); ReDraw; end; procedure TFrmBlurs.FormDestroy(Sender: TObject); begin + FPerfTimer.Free; BalloonImage.Free; IcelandImage.Free; RandBoxImage.Free; @@ -191,7 +185,7 @@ begin if ReDrawing then Exit; - ReDrawing := true; + ReDrawing := True; Radius := TbrBlurRadius.Position; Screen.Cursor := crHourGlass; case PageControl.ActivePageIndex of @@ -199,14 +193,14 @@ begin ImgViewPage1.BeginUpdate; ImgViewPage1.Bitmap.Assign(BalloonImage); - QueryPerformanceCounter(QPCounter1); + FPerfTimer.Start; case RgpBlurType.ItemIndex of 1: GaussianBlur(ImgViewPage1.Bitmap, Radius); 2: FastBlur(ImgViewPage1.Bitmap, Radius); 3: MotionBlur(ImgViewPage1.Bitmap, Radius, TbrBlurAngle.Position, CbxBidirectional.Checked); end; - QueryPerformanceCounter(QPCounter2); + FDuration := FPerfTimer.ReadMilliseconds; ImgViewPage1.EndUpdate; ImgViewPage1.Repaint; Application.ProcessMessages; @@ -222,7 +216,7 @@ Pts2 := Ellipse(350, 250, 100, 60); - QueryPerformanceCounter(QPCounter1); + FPerfTimer.Start; case RgpBlurType.ItemIndex of 1: begin @@ -242,18 +236,18 @@ TbrBlurAngle.Position, Pts2, CbxBidirectional.Checked); end; end; - QueryPerformanceCounter(QPCounter2); + FDuration := FPerfTimer.ReadMilliseconds; Application.ProcessMessages; - PolylineFS(ImgViewPage2.Bitmap, Pts, clBlack32, true, 2.5); - PolylineFS(ImgViewPage2.Bitmap, Pts2, clBlack32, true, 2.5); + PolylineFS(ImgViewPage2.Bitmap, Pts, clBlack32, True, 2.5); + PolylineFS(ImgViewPage2.Bitmap, Pts2, clBlack32, True, 2.5); ImgViewPage2.EndUpdate; ImgViewPage2.Repaint; end; 2: begin ImgViewPage3.BeginUpdate; - ImgViewPage3.SetupBitmap(true, Color32(clBtnFace)); + ImgViewPage3.SetupBitmap(True, Color32(clBtnFace)); BmpLayer.Bitmap.Clear(0); with ImgViewPage3.GetBitmapRect do @@ -263,17 +257,17 @@ end; BmpLayer.Bitmap.Draw(300, 40, RandBoxImage); - Rec := Rect(40,40,240,120); + Rec := Rect(40, 40, 240, 120); DrawFramedBox(ImgViewPage3.Bitmap, Rec, clWhite32, clGray32, Radius div 2); - Rec2 := Rect(40,160,240,320); + Rec2 := Rect(40, 160, 240, 320); with Rec2 do BmpLayer.Bitmap.FillRect(Left, Top, Right, Bottom, clRed32); InflateRect(Rec2, 20, 20); - Pts := Ellipse(395,175, 60, 100); + Pts := Ellipse(395, 175, 60, 100); - QueryPerformanceCounter(QPCounter1); + FPerfTimer.Start; case RgpBlurType.ItemIndex of 1: begin @@ -297,25 +291,23 @@ TbrBlurAngle.Position, Pts, CbxBidirectional.Checked); end; end; - - QueryPerformanceCounter(QPCounter2); + FDuration := FPerfTimer.ReadMilliseconds; Application.ProcessMessages; - PolylineFS(BmpLayer.Bitmap, Pts, clBlack32, true, 2.5); + PolylineFS(BmpLayer.Bitmap, Pts, clBlack32, True, 2.5); with Rec2 do PolylineFS(BmpLayer.Bitmap, - BuildPolygon([Left,Top,Right,Top,Right,Bottom,Left,Bottom]), - clBlack32, true, 1.0); + BuildPolygon([Left, Top, Right, Top, Right, Bottom, Left, Bottom]), + clBlack32, True, 1.0); ImgViewPage3.EndUpdate; ImgViewPage3.Repaint; end; end; - SbrMain.SimpleText := Format(' Blur drawing time: %0.2n ms',[ - 1000 * (QPCounter2 - QPCounter1) / QPF]); + SbrMain.SimpleText := Format(' Blur drawing time: %s ms', [FDuration]); Screen.Cursor := crDefault; - ReDrawing := false; + ReDrawing := False; end; procedure TFrmBlurs.MnuExitClick(Sender: TObject); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <CW...@us...> - 2012-10-06 21:16:48
|
Revision: 1964 http://graphics32.svn.sourceforge.net/graphics32/?rev=1964&view=rev Author: CWBudde Date: 2012-10-06 21:16:42 +0000 (Sat, 06 Oct 2012) Log Message: ----------- * minor changes to have extension ".exe" appended on windows Modified Paths: -------------- trunk/Examples/Drawing/Blurs/Blurs.lpi Modified: trunk/Examples/Drawing/Blurs/Blurs.lpi =================================================================== --- trunk/Examples/Drawing/Blurs/Blurs.lpi 2012-10-06 21:14:51 UTC (rev 1963) +++ trunk/Examples/Drawing/Blurs/Blurs.lpi 2012-10-06 21:16:42 UTC (rev 1964) @@ -21,9 +21,6 @@ <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> - <Target> - <Filename Value="project1"/> - </Target> <SearchPaths> <IncludeFiles Value="..\..\..\Source;$(ProjOutDir)"/> <OtherUnitFiles Value="..\..\..\Source"/> @@ -81,9 +78,6 @@ <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> - <Target> - <Filename ApplyConventions="False"/> - </Target> <SearchPaths> <IncludeFiles Value="..\..\..\Source;$(ProjOutDir)"/> <OtherUnitFiles Value="..\..\..\Source"/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |