mirror of
https://gitee.com/csharpui/CPF.git
synced 2025-04-05 17:37:51 +08:00
241 lines
8.2 KiB
C#
241 lines
8.2 KiB
C#
![]() |
using CPF.Mac.CoreGraphics;
|
||
|
using CPF.Mac.Foundation;
|
||
|
using CPF.Mac.ObjCRuntime;
|
||
|
using System;
|
||
|
using System.ComponentModel;
|
||
|
|
||
|
namespace CPF.Mac.CoreImage
|
||
|
{
|
||
|
[Register("CIContext", true)]
|
||
|
public class CIContext : NSObject
|
||
|
{
|
||
|
private static readonly IntPtr selContextWithCGContextOptions_Handle = Selector.GetHandle("contextWithCGContext:options:");
|
||
|
|
||
|
private static readonly IntPtr selDrawImageAtPointFromRect_Handle = Selector.GetHandle("drawImage:atPoint:fromRect:");
|
||
|
|
||
|
private static readonly IntPtr selDrawImageInRectFromRect_Handle = Selector.GetHandle("drawImage:inRect:fromRect:");
|
||
|
|
||
|
private static readonly IntPtr selCreateCGImageFromRect_Handle = Selector.GetHandle("createCGImage:fromRect:");
|
||
|
|
||
|
private static readonly IntPtr selCreateCGImageFromRectFormatColorSpace_Handle = Selector.GetHandle("createCGImage:fromRect:format:colorSpace:");
|
||
|
|
||
|
private static readonly IntPtr selCreateCGLayerWithSizeInfo_Handle = Selector.GetHandle("createCGLayerWithSize:info:");
|
||
|
|
||
|
private static readonly IntPtr selRenderToBitmapRowBytesBoundsFormatColorSpace_Handle = Selector.GetHandle("render:toBitmap:rowBytes:bounds:format:colorSpace:");
|
||
|
|
||
|
private static readonly IntPtr selReclaimResourcesHandle = Selector.GetHandle("reclaimResources");
|
||
|
|
||
|
private static readonly IntPtr selClearCachesHandle = Selector.GetHandle("clearCaches");
|
||
|
|
||
|
private static readonly IntPtr class_ptr = Class.GetHandle("CIContext");
|
||
|
|
||
|
private static NSString _OutputColorSpace;
|
||
|
|
||
|
private static NSString _WorkingColorSpace;
|
||
|
|
||
|
private static NSString _UseSoftwareRenderer;
|
||
|
|
||
|
public override IntPtr ClassHandle => class_ptr;
|
||
|
|
||
|
[Field("kCIContextOutputColorSpace", "Quartz")]
|
||
|
internal static NSString OutputColorSpace
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if (_OutputColorSpace == null)
|
||
|
{
|
||
|
_OutputColorSpace = Dlfcn.GetStringConstant(Libraries.Quartz.Handle, "kCIContextOutputColorSpace");
|
||
|
}
|
||
|
return _OutputColorSpace;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[Field("kCIContextWorkingColorSpace", "Quartz")]
|
||
|
internal static NSString WorkingColorSpace
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if (_WorkingColorSpace == null)
|
||
|
{
|
||
|
_WorkingColorSpace = Dlfcn.GetStringConstant(Libraries.Quartz.Handle, "kCIContextWorkingColorSpace");
|
||
|
}
|
||
|
return _WorkingColorSpace;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[Field("kCIContextUseSoftwareRenderer", "Quartz")]
|
||
|
internal static NSString UseSoftwareRenderer
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if (_UseSoftwareRenderer == null)
|
||
|
{
|
||
|
_UseSoftwareRenderer = Dlfcn.GetStringConstant(Libraries.Quartz.Handle, "kCIContextUseSoftwareRenderer");
|
||
|
}
|
||
|
return _UseSoftwareRenderer;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static CIContext FromContext(CGContext ctx, CIContextOptions options)
|
||
|
{
|
||
|
NSDictionary options2 = options?.ToDictionary();
|
||
|
return FromContext(ctx, options2);
|
||
|
}
|
||
|
|
||
|
public static CIContext FromContext(CGContext ctx)
|
||
|
{
|
||
|
return FromContext(ctx, (CIContextOptions)null);
|
||
|
}
|
||
|
|
||
|
public CGLayer CreateCGLayer(CGSize size)
|
||
|
{
|
||
|
return CreateCGLayer(size, null);
|
||
|
}
|
||
|
|
||
|
[EditorBrowsable(EditorBrowsableState.Advanced)]
|
||
|
[Export("initWithCoder:")]
|
||
|
public CIContext(NSCoder coder)
|
||
|
: base(NSObjectFlag.Empty)
|
||
|
{
|
||
|
if (IsDirectBinding)
|
||
|
{
|
||
|
base.Handle = Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, Selector.InitWithCoder, coder.Handle);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
base.Handle = Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, Selector.InitWithCoder, coder.Handle);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[EditorBrowsable(EditorBrowsableState.Advanced)]
|
||
|
public CIContext(NSObjectFlag t)
|
||
|
: base(t)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
[EditorBrowsable(EditorBrowsableState.Advanced)]
|
||
|
public CIContext(IntPtr handle)
|
||
|
: base(handle)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
[Export("contextWithCGContext:options:")]
|
||
|
internal static CIContext FromContext(CGContext ctx, NSDictionary options)
|
||
|
{
|
||
|
return (CIContext)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr(class_ptr, selContextWithCGContextOptions_Handle, ctx.Handle, options?.Handle ?? IntPtr.Zero));
|
||
|
}
|
||
|
|
||
|
[Export("drawImage:atPoint:fromRect:")]
|
||
|
[Obsolete("Deprecated in iOS 6.0. Use DrawImage (CIImage, RectangleF, RectangleF) instead", false)]
|
||
|
public virtual void DrawImage(CIImage image, CGPoint atPoint, CGRect fromRect)
|
||
|
{
|
||
|
if (image == null)
|
||
|
{
|
||
|
throw new ArgumentNullException("image");
|
||
|
}
|
||
|
if (IsDirectBinding)
|
||
|
{
|
||
|
Messaging.void_objc_msgSend_IntPtr_CGPoint_CGRect(base.Handle, selDrawImageAtPointFromRect_Handle, image.Handle, atPoint, fromRect);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Messaging.void_objc_msgSendSuper_IntPtr_CGPoint_CGRect(base.SuperHandle, selDrawImageAtPointFromRect_Handle, image.Handle, atPoint, fromRect);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[Export("drawImage:inRect:fromRect:")]
|
||
|
public virtual void DrawImage(CIImage image, CGRect inRectangle, CGRect fromRectangle)
|
||
|
{
|
||
|
if (image == null)
|
||
|
{
|
||
|
throw new ArgumentNullException("image");
|
||
|
}
|
||
|
if (IsDirectBinding)
|
||
|
{
|
||
|
Messaging.void_objc_msgSend_IntPtr_CGRect_CGRect(base.Handle, selDrawImageInRectFromRect_Handle, image.Handle, inRectangle, fromRectangle);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Messaging.void_objc_msgSendSuper_IntPtr_CGRect_CGRect(base.SuperHandle, selDrawImageInRectFromRect_Handle, image.Handle, inRectangle, fromRectangle);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[Export("createCGImage:fromRect:")]
|
||
|
public virtual CGImage CreateCGImage(CIImage image, CGRect fromRectangle)
|
||
|
{
|
||
|
if (image == null)
|
||
|
{
|
||
|
throw new ArgumentNullException("image");
|
||
|
}
|
||
|
CGImage cGImage = (!IsDirectBinding) ? new CGImage(Messaging.IntPtr_objc_msgSendSuper_IntPtr_CGRect(base.SuperHandle, selCreateCGImageFromRect_Handle, image.Handle, fromRectangle)) : new CGImage(Messaging.IntPtr_objc_msgSend_IntPtr_CGRect(base.Handle, selCreateCGImageFromRect_Handle, image.Handle, fromRectangle));
|
||
|
Messaging.void_objc_msgSend(cGImage.Handle, Selector.GetHandle("release"));
|
||
|
return cGImage;
|
||
|
}
|
||
|
|
||
|
[Export("createCGImage:fromRect:format:colorSpace:")]
|
||
|
public virtual CGImage CreateCGImage(CIImage image, CGRect fromRect, long ciImageFormat, CGColorSpace colorSpace)
|
||
|
{
|
||
|
if (image == null)
|
||
|
{
|
||
|
throw new ArgumentNullException("image");
|
||
|
}
|
||
|
CGImage cGImage = (!IsDirectBinding) ? new CGImage(Messaging.IntPtr_objc_msgSendSuper_IntPtr_CGRect_Int64_IntPtr(base.SuperHandle, selCreateCGImageFromRectFormatColorSpace_Handle, image.Handle, fromRect, ciImageFormat, colorSpace?.Handle ?? IntPtr.Zero)) : new CGImage(Messaging.IntPtr_objc_msgSend_IntPtr_CGRect_Int64_IntPtr(base.Handle, selCreateCGImageFromRectFormatColorSpace_Handle, image.Handle, fromRect, ciImageFormat, colorSpace?.Handle ?? IntPtr.Zero));
|
||
|
Messaging.void_objc_msgSend(cGImage.Handle, Selector.GetHandle("release"));
|
||
|
return cGImage;
|
||
|
}
|
||
|
|
||
|
[Export("createCGLayerWithSize:info:")]
|
||
|
internal virtual CGLayer CreateCGLayer(CGSize size, NSDictionary info)
|
||
|
{
|
||
|
if (IsDirectBinding)
|
||
|
{
|
||
|
return new CGLayer(Messaging.IntPtr_objc_msgSend_CGSize_IntPtr(base.Handle, selCreateCGLayerWithSizeInfo_Handle, size, info?.Handle ?? IntPtr.Zero));
|
||
|
}
|
||
|
return new CGLayer(Messaging.IntPtr_objc_msgSendSuper_CGSize_IntPtr(base.SuperHandle, selCreateCGLayerWithSizeInfo_Handle, size, info?.Handle ?? IntPtr.Zero));
|
||
|
}
|
||
|
|
||
|
[Export("render:toBitmap:rowBytes:bounds:format:colorSpace:")]
|
||
|
public virtual void RenderToBitmap(CIImage image, IntPtr bitmapPtr, long bytesPerRow, CGRect bounds, long bitmapFormat, CGColorSpace colorSpace)
|
||
|
{
|
||
|
if (image == null)
|
||
|
{
|
||
|
throw new ArgumentNullException("image");
|
||
|
}
|
||
|
if (IsDirectBinding)
|
||
|
{
|
||
|
Messaging.void_objc_msgSend_IntPtr_IntPtr_Int64_CGRect_Int64_IntPtr(base.Handle, selRenderToBitmapRowBytesBoundsFormatColorSpace_Handle, image.Handle, bitmapPtr, bytesPerRow, bounds, bitmapFormat, colorSpace.Handle);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Messaging.void_objc_msgSendSuper_IntPtr_IntPtr_Int64_CGRect_Int64_IntPtr(base.SuperHandle, selRenderToBitmapRowBytesBoundsFormatColorSpace_Handle, image.Handle, bitmapPtr, bytesPerRow, bounds, bitmapFormat, colorSpace.Handle);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[Export("reclaimResources")]
|
||
|
public virtual void ReclaimResources()
|
||
|
{
|
||
|
if (IsDirectBinding)
|
||
|
{
|
||
|
Messaging.void_objc_msgSend(base.Handle, selReclaimResourcesHandle);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Messaging.void_objc_msgSendSuper(base.SuperHandle, selReclaimResourcesHandle);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[Export("clearCaches")]
|
||
|
public virtual void ClearCaches()
|
||
|
{
|
||
|
if (IsDirectBinding)
|
||
|
{
|
||
|
Messaging.void_objc_msgSend(base.Handle, selClearCachesHandle);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Messaging.void_objc_msgSendSuper(base.SuperHandle, selClearCachesHandle);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|