فهرست منبع

--- Merging r39747 into '.':
U packages/fcl-image/src/fpcolcnv.inc
--- Recording mergeinfo for merge of r39747 into '.':
U .
--- Merging r39748 into '.':
U packages/fcl-image/src/fpinterpolation.inc
U packages/fcl-image/src/fpcanvas.inc
--- Recording mergeinfo for merge of r39748 into '.':
G .

# revisions: 39747,39748

git-svn-id: branches/fixes_3_2@39811 -

marco 6 سال پیش
والد
کامیت
2f4f80a406
3فایلهای تغییر یافته به همراه15 افزوده شده و 8 حذف شده
  1. 1 1
      packages/fcl-image/src/fpcanvas.inc
  2. 13 6
      packages/fcl-image/src/fpcolcnv.inc
  3. 1 1
      packages/fcl-image/src/fpinterpolation.inc

+ 1 - 1
packages/fcl-image/src/fpcanvas.inc

@@ -784,7 +784,7 @@ begin
     begin
     xx := r - x;
     for t := yi to ym do
-      colors [r,t] := image.colors[xx,t-y];
+      colors [r,t] := AlphaBlend(colors [r,t], image.colors[xx,t-y]);
     end;
 end;
 

+ 13 - 6
packages/fcl-image/src/fpcolcnv.inc

@@ -298,18 +298,25 @@ end;
 
 function AlphaBlend(color1, color2: TFPColor): TFPColor;
 var
-  factor: single;
+  factor1, factor2: single;
 begin
   if color2.alpha = $ffff then
     Result := color2
   else
+  if color2.alpha = 0 then
+    Result := color1
+  else
+  if color1.alpha = 0 then
+    Result := color2
+  else
   begin
-    factor := (color1.alpha / $ffff) * (1 - color2.alpha / $ffff);
+    factor1 := (color1.alpha / $ffff) * (1 - color2.alpha / $ffff);
+    factor2 := color2.alpha / $ffff;
 
-    Result.red := Round(color1.red * factor + color2.red * color2.alpha / $ffff);
-    Result.green := Round(color1.green * factor + color2.green * color2.alpha / $ffff);
-    Result.blue := Round(color1.blue * factor + color2.blue * color2.alpha / $ffff);
-    Result.alpha := Round(factor * $ffff + color2.alpha);
+    Result.red := Round(color1.red * factor1 + color2.red * factor2);
+    Result.green := Round(color1.green * factor1 + color2.green * factor2);
+    Result.blue := Round(color1.blue * factor1 + color2.blue * factor2);
+    Result.alpha := Round(factor1 * $ffff + color2.alpha);
   end;
 end;
 

+ 1 - 1
packages/fcl-image/src/fpinterpolation.inc

@@ -223,7 +223,7 @@ begin
           NewCol.blue:=Min(NewCol.blue+round(Col.blue*f),$ffff);
           NewCol.alpha:=Min(NewCol.alpha+round(Col.alpha*f),$ffff);
         end;
-        Canvas.Colors[x+dx,y+dy]:=NewCol;
+        Canvas.Colors[x+dx,y+dy]:=AlphaBlend(Canvas.Colors[x+dx,y+dy], NewCol);
       end;
     end;
   finally