Sfoglia il codice sorgente

Added Filters in library
ToDo: check if Rect, Point and PointF are supported in c# or create alternative functions.

lainz 10 anni fa
parent
commit
e5ba94b85d

+ 174 - 1
bgra_pascalscript_library/bgra_pascalscript_library.lpr

@@ -7,6 +7,7 @@ library bgra_pascalscript_library;
 {$ENDIF}
 
 uses
+  Classes,
   BGRAPascalScript,
   BGRABitmapTypes;
 
@@ -109,6 +110,11 @@ uses
     BGRAPascalScript.bgra_Destroy(id);
   end;
 
+  procedure DestroyAll; {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_DestroyAll;
+  end;
+
   procedure SaveToFile(id: integer; filename: PWideChar); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
   begin
     BGRAPascalScript.bgra_SaveToFile(id, PWideCharToUTF8(filename));
@@ -121,11 +127,150 @@ uses
     BGRAPascalScript.bgra_FilterSmartZoom3(id, Option);
   end;
 
+  procedure FilterMedian(id: integer; Option: TMedianOption); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterMedian(id, Option);
+  end;
+
+  procedure FilterSmooth(id: integer); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterSmooth(id);
+  end;
+
+  procedure FilterSharpen(id: integer; Amount: single); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterSharpen(id, Amount);
+  end;
+
+  procedure FilterSharpenRect(id: integer; ABounds: TRect; Amount: single); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterSharpenRect(id, ABounds, Amount);
+  end;
+
+  procedure FilterContour(id: integer); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterContour(id);
+  end;
+
+  procedure FilterPixelate(id: integer; pixelSize: integer;
+  useResample: boolean; filter: TResampleFilter); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterPixelate(id, pixelSize, useResample, filter);
+  end;
+
+  procedure FilterBlurRadial(id: integer; radius: integer; blurType: TRadialBlurType); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterBlurRadial(id, radius, blurType);
+  end;
+
+  procedure FilterBlurRadialRect(id: integer; ABounds: TRect;
+  radius: integer; blurType: TRadialBlurType); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterBlurRadialRect(id, ABounds, radius, blurType);
+  end;
+
+  procedure FilterBlurMotion(id: integer; distance: integer;
+    angle: single; oriented: boolean); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterBlurMotion(id, distance, angle, oriented);
+  end;
+
+  procedure FilterBlurMotionRect(id: integer; ABounds: TRect;
+    distance: integer; angle: single; oriented: boolean); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterBlurMotionRect(id, ABounds, distance, angle, oriented);
+  end;
+
+  procedure FilterCustomBlur(id: integer; mask: integer); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterCustomBlur(id, mask);
+  end;
+
+  procedure FilterCustomBlurRect(id: integer; ABounds: TRect; mask: integer); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterCustomBlurRect(id, ABounds, mask);
+  end;
+
+  procedure FilterEmboss(id: integer; angle: single); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterEmboss(id, angle);
+  end;
+
+  procedure FilterEmbossRect(id: integer; angle: single; ABounds: TRect); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterEmbossRect(id, angle, ABounds);
+  end;
+
+  procedure FilterEmbossHighlight(id: integer; FillSelection: boolean); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterEmbossHighlight(id, FillSelection);
+  end;
+
+  procedure FilterEmbossHighlightBorder(id: integer; FillSelection: boolean;
+    BorderColor: TBGRAColor); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterEmbossHighlightBorder(id, FillSelection, BorderColor);
+  end;
+
+  procedure FilterEmbossHighlightBorderAndOffset(id: integer;
+    FillSelection: boolean; BorderColor: TBGRAColor; Offset: TPoint); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterEmbossHighlightBorderAndOffset(id, FillSelection, BorderColor, Offset);
+  end;
+
   procedure FilterGrayscale(id: integer); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
   begin
     BGRAPascalScript.bgra_FilterGrayscale(id);
   end;
 
+  procedure FilterGrayscaleRect(id: integer; ABounds: TRect); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterGrayscaleRect(id, ABounds);
+  end;
+
+  procedure FilterNormalize(id: integer; eachChannel: boolean); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterNormalize(id, eachChannel);
+  end;
+
+  procedure FilterNormalizeRect(id: integer; ABounds: TRect; eachChannel: boolean); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterNormalizeRect(id, ABounds, eachChannel);
+  end;
+
+  procedure FilterRotate(id: integer; origin: TPointF; angle: single;
+    correctBlur: boolean); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterRotate(id, origin, angle, correctBlur);
+  end;
+
+  procedure FilterSphere(id: integer); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterSphere(id);
+  end;
+
+  procedure FilterTwirl(id: integer; ACenter: TPoint; ARadius: single;
+    ATurn: single; AExponent: single); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterTwirl(id, ACenter, ARadius, ATurn, AExponent);
+  end;
+
+  procedure FilterTwirlRect(id: integer; ABounds: TRect; ACenter: TPoint;
+    ARadius: single; ATurn: single; AExponent: single); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterTwirlRect(id, ABounds, ACenter, ARadius, ATurn, AExponent);
+  end;
+
+  procedure FilterCylinder(id: integer); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterCylinder(id);
+  end;
+
+  procedure FilterPlane(id: integer); {$IFDEF stdcall}stdcall;{$ELSE}cdecl;{$ENDIF}
+  begin
+    BGRAPascalScript.bgra_FilterPlane(id);
+  end;
+
 exports
   GetHighestID name 'gethighestid',
   rgb name 'rgb',
@@ -145,9 +290,37 @@ exports
   GetPixel name 'getpixel',
   CreateFromFile name 'createfromfile',
   Destroy name 'destroy',
+  DestroyAll name 'destroyall',
   SaveToFile name 'savetofile',
+  { Filters }
   FilterSmartZoom3 name 'filtersmartzoom3',
-  FilterGrayscale name 'filtergrayscale';
+  FilterMedian name 'filtermedian',
+  FilterSmooth name 'filtersmooth',
+  FilterSharpen name 'filtersharpen',
+  FilterSharpenRect name 'filtersharpenrect',
+  FilterContour name 'filtercontour',
+  FilterPixelate name 'filterpixelate',
+  FilterBlurRadial name 'filterblurradial',
+  FilterBlurRadialRect name 'filterblurradialrect',
+  FilterBlurMotion name 'filterblurmotion',
+  FilterBlurMotionRect name 'filterblurmotionrect',
+  FilterCustomBlur name 'filtercustomblur',
+  FilterCustomBlurRect name 'filtercustomblurrect',
+  FilterEmboss name 'filteremboss',
+  FilterEmbossRect name 'filterembossrect',
+  FilterEmbossHighlight name 'filterembosshighlight',
+  FilterEmbossHighlightBorder name 'filterembosshighlightborder',
+  FilterEmbossHighlightBorderAndOffset name 'filterembosshighlightborderandoffset',
+  FilterGrayscale name 'filtergrayscale',
+  FilterGrayscaleRect name 'filtergrayscalerect',
+  FilterNormalize name 'filternormalize',
+  FilterNormalizeRect name 'filternormalizerect',
+  FilterRotate name 'filterrotate',
+  FilterSphere name 'filtersphere',
+  FilterTwirl name 'filtertwirl',
+  FilterTwirlRect name 'filtertwirlrect',
+  FilterCylinder name 'filtercylinder',
+  FilterPlane name 'filterplane';
 
 begin
 end.

+ 77 - 3
bgra_pascalscript_library/c#/BGRABitmap.cs

@@ -6,7 +6,14 @@ namespace BGRABitmapLibrary
     public class BGRABitmap
     {
         /* Types */
-        public enum TMedianOption : byte { moNone, moLowSmooth, moMediumSmooth, moHighSmooth };
+
+        // ToDo: Rect, Point, PointF
+        
+		public enum MedianOption : byte { None, LowSmooth, MediumSmooth, HighSmooth };
+		
+		public enum ResampleFilter : byte { Box, Linear, HalfCosine, Cosine, Bicubic, Mitchell, Spline, Lanczos2, Lanczos3, Lanczos4, BestQuality };
+		
+		public enum RadialBlurType : byte { Normal, Disk, Corona, Precise, Fast, Box };
 
         /* Constructors */
 
@@ -76,9 +83,76 @@ namespace BGRABitmapLibrary
         /* Filters */
 
         [DllImport("bgrabitmap", EntryPoint = "filtersmartzoom3")]
-        public static extern void FilterSmartZoom3(int id, TMedianOption Option);
-
+        public static extern void FilterSmartZoom3(int id, MedianOption Option);
+		
+		[DllImport("bgrabitmap", EntryPoint = "filtermedian")]
+        public static extern void FilterMedian(int id, MedianOption Option);
+		
+		[DllImport("bgrabitmap", EntryPoint = "filtersmooth")]
+        public static extern void FilterSmooth(int id);
+		
+		[DllImport("bgrabitmap", EntryPoint = "filtersharpen")]
+        public static extern void FilterSharpen(int id, Single Amount);
+		
+		// filtersharpenrect
+		
+		[DllImport("bgrabitmap", EntryPoint = "filtercontour")]
+        public static extern void FilterContour(int id);
+		
+		[DllImport("bgrabitmap", EntryPoint = "filterpixelate")]
+        public static extern void FilterPixelate(int id, int pixelSize, bool useResample, ResampleFilter filter);
+		
+		[DllImport("bgrabitmap", EntryPoint = "filterblurradial")]
+        public static extern void FilterBlurRadial(int id, int radius, RadialBlurType blurType);
+		
+		// filterblurradialrect
+		
+		[DllImport("bgrabitmap", EntryPoint = "filterblurmotion")]
+        public static extern void FilterBlurMotion(int id, int distance, Single angle, bool oriented);
+		
+		// filterblurmotionrect
+		
+		[DllImport("bgrabitmap", EntryPoint = "filtercustomblur")]
+        public static extern void FilterCustomBlur(int id, int mask);
+		
+		// filtercustomblurrect
+		
+		[DllImport("bgrabitmap", EntryPoint = "filteremboss")]
+        public static extern void FilterEmboss(int id, Single angle);
+		
+		// filterembossrect
+		
+		[DllImport("bgrabitmap", EntryPoint = "filterembosshighlight")]
+        public static extern void FilterEmboss(int id, bool FillSelection);
+		
+		[DllImport("bgrabitmap", EntryPoint = "filterembosshighlightborder")]
+        public static extern void FilterEmboss(int id, bool FillSelection, uint BorderColor);
+		
+		// filterembosshighlightborderandoffset
+        
         [DllImport("bgrabitmap", EntryPoint = "filtergrayscale")]
         public static extern void FilterGrayscale(int id);
+		
+		// filtergrayscalerect
+		
+		[DllImport("bgrabitmap", EntryPoint = "filternormalize")]
+        public static extern void FilterNormalize(int id, bool eachChannel);
+		
+		// filternormalizerect
+		
+		// filterrotate
+		
+		[DllImport("bgrabitmap", EntryPoint = "filtersphere")]
+        public static extern void FilterSphere(int id);
+		
+		// filtertwirl
+		
+		// filtertwirlrect
+		
+		[DllImport("bgrabitmap", EntryPoint = "filtercylinder")]
+        public static extern void FilterCylinder(int id);
+		
+		[DllImport("bgrabitmap", EntryPoint = "filterplane")]
+        public static extern void FilterPlane(int id);
     }
 }