Browse Source

--- Merging r26171 into '.':
U packages/fcl-image/src/fpreadjpeg.pas

# revisions: 26171
r26171 | michael | 2013-12-03 14:05:45 +0100 (Tue, 03 Dec 2013) | 1 line
Changed paths:
M /trunk/packages/fcl-image/src/fpreadjpeg.pas

* Applied patch to support YCCK values (bug ID 21916)

git-svn-id: branches/fixes_2_6@26325 -

marco 11 years ago
parent
commit
178696220f
1 changed files with 23 additions and 0 deletions
  1. 23 0
      packages/fcl-image/src/fpreadjpeg.pas

+ 23 - 0
packages/fcl-image/src/fpreadjpeg.pas

@@ -229,6 +229,20 @@ var
   end;
 
   function CorrectCMYK(const C: TFPColor): TFPColor;
+  var
+    MinColor: word;
+  begin
+    // accuracy not 100%
+    if C.red<C.green then MinColor:=C.red
+    else MinColor:= C.green;
+    if C.blue<MinColor then MinColor:= C.blue;
+    if MinColor+ C.alpha>$FF then MinColor:=$FF-C.alpha;
+    Result.red:=(C.red-MinColor) shl 8;
+    Result.green:=(C.green-MinColor) shl 8;
+    Result.blue:=(C.blue-MinColor) shl 8;
+    Result.alpha:=alphaOpaque;
+  end;
+  function CorrectYCCK(const C: TFPColor): TFPColor;
   var
     MinColor: word;
   begin
@@ -275,6 +289,15 @@ var
           Img.Colors[x,y]:=CorrectCMYK(Color);
         end
         else
+        if (FInfo.jpeg_color_space = JCS_YCCK) then
+        for x:=0 to FInfo.output_width-1 do begin
+          Color.Red:=SampRow^[x*4+0];
+          Color.Green:=SampRow^[x*4+1];
+          Color.Blue:=SampRow^[x*4+2];
+          Color.alpha:=SampRow^[x*4+3];
+          Img.Colors[x,y]:=CorrectYCCK(Color);
+        end
+        else
         if fgrayscale then begin
          for x:=0 to FInfo.output_width-1 do begin
            c:= SampRow^[x] shl 8;