diff --git a/apophysis7x/Apophysis7X.dproj b/apophysis7x/Apophysis7X.dproj index ab37c92..6177d7e 100644 --- a/apophysis7x/Apophysis7X.dproj +++ b/apophysis7x/Apophysis7X.dproj @@ -3,7 +3,7 @@ {AC01F3AB-4101-4C09-A648-1CC8E2C412D5} Apophysis7X.dpr True - Debug + Release 3 Application VCL diff --git a/apophysis7x/Rendering/ImageMaker.pas b/apophysis7x/Rendering/ImageMaker.pas index da03b03..f5cd245 100644 --- a/apophysis7x/Rendering/ImageMaker.pas +++ b/apophysis7x/Rendering/ImageMaker.pas @@ -367,28 +367,28 @@ procedure TImageMaker.SetCP(CP: TControlPoint); Fcp := CP; end; -procedure InvertLuminance(var red: integer; var green: integer; var blue: integer); +procedure InvertLuminance(var rgb: TRGB); var - max, min, c: integer; + max, min, c: byte; begin - max := red; - min := red; + max := rgb.red; + min := rgb.red; - if max < green then - max := green; - if min > green then - min := green; + if max < rgb.green then + max := rgb.green; + if min > rgb.green then + min := rgb.green; - if max < blue then - max := blue; - if min > blue then - min := blue; + if max < rgb.blue then + max := rgb.blue; + if min > rgb.blue then + min := rgb.blue; c := 255 - max - min; - red := red + c; - green := green + c; - blue := blue + c; + rgb.red := rgb.red + c; + rgb.green := rgb.green + c; + rgb.blue := rgb.blue + c; end; /////////////////////////////////////////////////////////////////////////////// @@ -408,7 +408,7 @@ procedure TImageMaker.CreateImage(YOffset: integer); Row: PRGBArray; AlphaRow: PbyteArray; vib, notvib: Integer; - bgi: array[0..2] of Integer; + bgi: TRGB; // bucketpos: Integer; filterValue: double; // filterpos: Integer; @@ -449,12 +449,15 @@ procedure TImageMaker.CreateImage(YOffset: integer); funcval := power(fcp.gamma_threshold, gamma - 1) { / fcp.gamma_threshold; } else funcval := 0; - bgi[0] := round(fcp.background[0]); - bgi[1] := round(fcp.background[1]); - bgi[2] := round(fcp.background[2]); - bgtot.red := bgi[0]; - bgtot.green := bgi[1]; - bgtot.blue := bgi[2]; + //MS + bgi.red := round(fcp.background[0]); + bgi.green := round(fcp.background[1]); + bgi.blue := round(fcp.background[2]); + if fcp.invert_luminance then + InvertLuminance(bgi); + bgtot.red := bgi.red; + bgtot.green := bgi.green; + bgtot.blue := bgi.blue; zero_BG.red := 0; zero_BG.green := 0; zero_BG.blue := 0; @@ -670,12 +673,14 @@ procedure TImageMaker.CreateImage(YOffset: integer); if (bi < 0) then bi := 0 else if (bi > 255) then bi := 255; - //MS MUTATION - if fcp.invert_luminance then - InvertLuminance(ri, gi, bi); Row[j].red := ri; Row[j].green := gi; Row[j].blue := bi; + + //MS MUTATION + if fcp.invert_luminance then + InvertLuminance(Row[j]); + AlphaRow[j] := ai; end else begin // ------------------------------------------- No transparency @@ -698,6 +703,8 @@ procedure TImageMaker.CreateImage(YOffset: integer); // no intensity so simply set the BG; //MS XXX Row[j] := bgtot; + if fcp.invert_luminance then + InvertLuminance(Row[j]); continue; end; @@ -716,24 +723,26 @@ procedure TImageMaker.CreateImage(YOffset: integer); if (gi >= 0) and (gi <= 256) and (curvesSet) then gi := Round(csa[2][Round(csa[0][gi])]); if (bi >= 0) and (bi <= 256) and (curvesSet) then bi := Round(csa[3][Round(csa[0][bi])]); - ri := ri + (ia * bgi[0]) shr 8; + ri := ri + (ia * bgi.red) shr 8; if (ri < 0) then ri := 0 else if (ri > 255) then ri := 255; - gi := gi + (ia * bgi[1]) shr 8; + gi := gi + (ia * bgi.green) shr 8; if (gi < 0) then gi := 0 else if (gi > 255) then gi := 255; - bi := bi + (ia * bgi[2]) shr 8; + bi := bi + (ia * bgi.blue) shr 8; if (bi < 0) then bi := 0 else if (bi > 255) then bi := 255; - //MS MUTATION - if fcp.invert_luminance then - InvertLuminance(ri, gi, bi); Row[j].red := ri; Row[j].green := gi; Row[j].blue := bi; + + //MS MUTATION + if fcp.invert_luminance then + InvertLuminance(Row[j]); + AlphaRow[j] := ai;//? end end;