зеркало из https://github.com/mono/SkiaSharp.git
Updated to the bits based on m52
This commit is contained in:
Родитель
c894aa86ad
Коммит
e1c60230c4
|
@ -77,9 +77,12 @@ There are several targets available:
|
|||
|
||||
Here are some links to show the differences in our code as compared to Google's.
|
||||
|
||||
What version are we on? [**m49**](https://github.com/google/skia/tree/chrome/m49)
|
||||
Are we up-to-date with Google? [Compare](https://github.com/mono/skia/compare/xamarin-mobile-bindings...google:chrome/m49)
|
||||
What have we added? [Compare](https://github.com/google/skia/compare/chrome/m49...mono:xamarin-mobile-bindings)
|
||||
What version are we on? [**m52**](https://github.com/google/skia/tree/chrome/m52)
|
||||
Are we up-to-date with Google? [Compare](https://github.com/mono/skia/compare/xamarin-mobile-bindings...google:chrome/m52)
|
||||
What have we added? [Compare](https://github.com/google/skia/compare/chrome/m52...mono:xamarin-mobile-bindings)
|
||||
|
||||
WIP: https://github.com/mono/skia/compare/update-google-skia...google:chrome/m52
|
||||
Diff: https://github.com/google/skia/compare/chrome/m52...mono:update-google-skia
|
||||
|
||||
## Where is Windows Phone 8 / Store 8
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
<Compile Include="$(MSBuildThisFileDirectory)SKStream.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)SKManagedStream.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)SKBitmap.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)SKImageDecoder.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)SKCodec.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)PreserveAttribute.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)..\SkiaSharp\Properties\SkiaSharpAssemblyInfo.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Util.cs" />
|
||||
|
|
|
@ -44,18 +44,29 @@ using System.Globalization;
|
|||
|
||||
namespace SkiaSharp
|
||||
{
|
||||
public enum SKImageDecoderResult {
|
||||
Failure = 0,
|
||||
PartialSuccess = 1,
|
||||
Success = 2
|
||||
public enum SKCodecResult {
|
||||
Success,
|
||||
IncompleteInput,
|
||||
InvalidConversion,
|
||||
InvalidScale,
|
||||
InvalidParameters,
|
||||
InvalidInput,
|
||||
CouldNotRewind,
|
||||
Unimplemented,
|
||||
}
|
||||
|
||||
public enum SKImageDecoderMode {
|
||||
DecodeBounds,
|
||||
DecodePixels
|
||||
public enum SKCodecOrigin {
|
||||
TopLeft = 1,
|
||||
TopRight = 2,
|
||||
BottomRight = 3,
|
||||
BottomLeft = 4,
|
||||
LeftTop = 5,
|
||||
RightTop = 6,
|
||||
RightBottom = 7,
|
||||
LeftBottom = 8,
|
||||
}
|
||||
|
||||
public enum SKImageDecoderFormat {
|
||||
public enum SKEncodedFormat {
|
||||
Unknown,
|
||||
Bmp,
|
||||
Gif,
|
||||
|
@ -67,6 +78,7 @@ namespace SkiaSharp
|
|||
Pkm,
|
||||
Ktx,
|
||||
Astc,
|
||||
Dng,
|
||||
}
|
||||
|
||||
public partial struct SKColor {
|
||||
|
@ -143,11 +155,14 @@ namespace SkiaSharp
|
|||
|
||||
public enum SKColorType {
|
||||
Unknown,
|
||||
Rgba_8888,
|
||||
Bgra_8888,
|
||||
Alpha_8,
|
||||
Rgb_565,
|
||||
N_32
|
||||
Alpha8,
|
||||
Rgb565,
|
||||
Argb4444,
|
||||
Rgba8888,
|
||||
Bgra8888,
|
||||
Index8,
|
||||
Gray8,
|
||||
RgbaF16
|
||||
}
|
||||
|
||||
public enum SKColorProfileType {
|
||||
|
@ -156,6 +171,7 @@ namespace SkiaSharp
|
|||
}
|
||||
|
||||
public enum SKAlphaType {
|
||||
Unknown,
|
||||
Opaque,
|
||||
Premul,
|
||||
Unpremul
|
||||
|
@ -308,11 +324,43 @@ namespace SkiaSharp
|
|||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct SKImageInfo {
|
||||
public static SKImageInfo Empty;
|
||||
public static SKColorType PlatformColorType;
|
||||
|
||||
static SKImageInfo ()
|
||||
{
|
||||
var isUnix = Environment.OSVersion.Platform == PlatformID.MacOSX || Environment.OSVersion.Platform == PlatformID.Unix;
|
||||
if (isUnix) {
|
||||
// Unix depends on the CPU endianess, but we use RGBA
|
||||
PlatformColorType = SKColorType.Rgba8888;
|
||||
} else {
|
||||
// Windows is always BGRA
|
||||
PlatformColorType = SKColorType.Bgra8888;
|
||||
}
|
||||
}
|
||||
|
||||
public int Width;
|
||||
public int Height;
|
||||
public SKColorType ColorType;
|
||||
public SKAlphaType AlphaType;
|
||||
public SKColorProfileType ColorProfileType;
|
||||
|
||||
public SKImageInfo (int width, int height)
|
||||
{
|
||||
this.Width = width;
|
||||
this.Height = height;
|
||||
this.ColorType = PlatformColorType;
|
||||
this.AlphaType = SKAlphaType.Premul;
|
||||
this.ColorProfileType = SKColorProfileType.Linear;
|
||||
}
|
||||
|
||||
public SKImageInfo (int width, int height, SKColorType colorType)
|
||||
{
|
||||
this.Width = width;
|
||||
this.Height = height;
|
||||
this.ColorType = colorType;
|
||||
this.AlphaType = SKAlphaType.Premul;
|
||||
this.ColorProfileType = SKColorProfileType.Linear;
|
||||
}
|
||||
|
||||
public SKImageInfo (int width, int height, SKColorType colorType, SKAlphaType alphaType)
|
||||
{
|
||||
|
@ -320,6 +368,16 @@ namespace SkiaSharp
|
|||
this.Height = height;
|
||||
this.ColorType = colorType;
|
||||
this.AlphaType = alphaType;
|
||||
this.ColorProfileType = SKColorProfileType.Linear;
|
||||
}
|
||||
|
||||
public SKImageInfo (int width, int height, SKColorType colorType, SKAlphaType alphaType, SKColorProfileType colorProfileType)
|
||||
{
|
||||
this.Width = width;
|
||||
this.Height = height;
|
||||
this.ColorType = colorType;
|
||||
this.AlphaType = alphaType;
|
||||
this.ColorProfileType = colorProfileType;
|
||||
}
|
||||
|
||||
public int BytesPerPixel {
|
||||
|
@ -327,19 +385,27 @@ namespace SkiaSharp
|
|||
switch (ColorType) {
|
||||
case SKColorType.Unknown:
|
||||
return 0;
|
||||
case SKColorType.Alpha_8:
|
||||
case SKColorType.Alpha8:
|
||||
case SKColorType.Index8:
|
||||
case SKColorType.Gray8:
|
||||
return 1;
|
||||
case SKColorType.Rgb_565:
|
||||
case SKColorType.Rgb565:
|
||||
case SKColorType.Argb4444:
|
||||
return 2;
|
||||
case SKColorType.Bgra_8888:
|
||||
case SKColorType.Rgba_8888:
|
||||
case SKColorType.N_32:
|
||||
case SKColorType.Bgra8888:
|
||||
case SKColorType.Rgba8888:
|
||||
return 4;
|
||||
case SKColorType.RgbaF16:
|
||||
return 8;
|
||||
}
|
||||
throw new ArgumentOutOfRangeException ("ColorType");
|
||||
}
|
||||
}
|
||||
|
||||
public int BytesSize {
|
||||
get { return Width * Height * BytesPerPixel; }
|
||||
}
|
||||
|
||||
public int RowBytes {
|
||||
get { return Width * BytesPerPixel; }
|
||||
}
|
||||
|
@ -366,6 +432,18 @@ namespace SkiaSharp
|
|||
public SKPixelGeometry PixelGeometry;
|
||||
}
|
||||
|
||||
public enum SKZeroInitialized {
|
||||
Yes,
|
||||
No,
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct SKCodecOptions {
|
||||
public SKZeroInitialized ZeroInitialized;
|
||||
public SKRectI Subset;
|
||||
public bool HasSubset;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct SKPoint {
|
||||
private float x, y;
|
||||
|
|
|
@ -15,13 +15,13 @@ namespace SkiaSharp
|
|||
public class SKBitmap : SKObject
|
||||
{
|
||||
[Preserve]
|
||||
internal SKBitmap (IntPtr handle)
|
||||
: base (handle)
|
||||
internal SKBitmap (IntPtr handle, bool owns)
|
||||
: base (handle, owns)
|
||||
{
|
||||
}
|
||||
|
||||
public SKBitmap ()
|
||||
: this (SkiaApi.sk_bitmap_new ())
|
||||
: this (SkiaApi.sk_bitmap_new (), true)
|
||||
{
|
||||
if (Handle == IntPtr.Zero) {
|
||||
throw new InvalidOperationException ("Unable to create a new SKBitmap instance.");
|
||||
|
@ -29,7 +29,7 @@ namespace SkiaSharp
|
|||
}
|
||||
|
||||
public SKBitmap (int width, int height, bool isOpaque = false)
|
||||
: this (width, height, SKColorType.N_32, isOpaque ? SKAlphaType.Opaque : SKAlphaType.Premul)
|
||||
: this (width, height, SKImageInfo.PlatformColorType, isOpaque ? SKAlphaType.Opaque : SKAlphaType.Premul)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -53,7 +53,7 @@ namespace SkiaSharp
|
|||
|
||||
protected override void Dispose (bool disposing)
|
||||
{
|
||||
if (Handle != IntPtr.Zero) {
|
||||
if (Handle != IntPtr.Zero && OwnsHandle) {
|
||||
SkiaApi.sk_bitmap_destructor (Handle);
|
||||
}
|
||||
|
||||
|
@ -219,55 +219,65 @@ namespace SkiaSharp
|
|||
set { SkiaApi.sk_bitmap_set_volatile (Handle, value); }
|
||||
}
|
||||
|
||||
public static SKImageInfo DecodeBounds (SKStreamRewindable stream, SKColorType pref = SKColorType.Unknown)
|
||||
public static SKImageInfo DecodeBounds (SKStream stream)
|
||||
{
|
||||
SKImageInfo info;
|
||||
SKImageDecoder.DecodeStreamBounds (stream, out info, pref);
|
||||
return info;
|
||||
using (var codec = SKCodec.Create (stream)) {
|
||||
return codec.Info;
|
||||
}
|
||||
}
|
||||
|
||||
public static SKImageInfo DecodeBounds (string filename, SKColorType pref = SKColorType.Unknown)
|
||||
public static SKImageInfo DecodeBounds (SKData data)
|
||||
{
|
||||
SKImageInfo info;
|
||||
SKImageDecoder.DecodeFileBounds (filename, out info, pref);
|
||||
return info;
|
||||
using (var codec = SKCodec.Create (data)) {
|
||||
return codec.Info;
|
||||
}
|
||||
}
|
||||
|
||||
public static SKImageInfo DecodeBounds (byte[] buffer, SKColorType pref = SKColorType.Unknown)
|
||||
public static SKImageInfo DecodeBounds (string filename)
|
||||
{
|
||||
SKImageInfo info;
|
||||
SKImageDecoder.DecodeMemoryBounds (buffer, out info, pref);
|
||||
return info;
|
||||
return DecodeBounds (new SKFileStream (filename));
|
||||
}
|
||||
|
||||
public static SKBitmap Decode (SKStreamRewindable stream, SKColorType pref = SKColorType.Unknown)
|
||||
public static SKImageInfo DecodeBounds (byte[] buffer)
|
||||
{
|
||||
var bitmap = new SKBitmap ();
|
||||
if (!SKImageDecoder.DecodeStream (stream, bitmap, pref)) {
|
||||
return DecodeBounds (new SKMemoryStream (buffer));
|
||||
}
|
||||
|
||||
public static SKBitmap Decode (SKCodec codec)
|
||||
{
|
||||
var info = codec.Info;
|
||||
var bitmap = new SKBitmap (info.Width, info.Height, info.ColorType, info.IsOpaque ? SKAlphaType.Opaque : SKAlphaType.Premul);
|
||||
IntPtr length;
|
||||
var result = codec.GetPixels (bitmap.Info, bitmap.GetPixels(out length));
|
||||
if (result != SKCodecResult.Success && result != SKCodecResult.IncompleteInput) {
|
||||
bitmap.Dispose ();
|
||||
bitmap = null;
|
||||
}
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
public static SKBitmap Decode (string filename, SKColorType pref = SKColorType.Unknown)
|
||||
public static SKBitmap Decode (SKStream stream)
|
||||
{
|
||||
var bitmap = new SKBitmap ();
|
||||
if (!SKImageDecoder.DecodeFile (filename, bitmap, pref)) {
|
||||
bitmap.Dispose();
|
||||
bitmap = null;
|
||||
using (var codec = SKCodec.Create (stream)) {
|
||||
return Decode (codec);
|
||||
}
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
public static SKBitmap Decode (byte[] buffer, SKColorType pref = SKColorType.Unknown)
|
||||
public static SKBitmap Decode (SKData data)
|
||||
{
|
||||
var bitmap = new SKBitmap ();
|
||||
if (!SKImageDecoder.DecodeMemory (buffer, bitmap, pref)) {
|
||||
bitmap.Dispose ();
|
||||
bitmap = null;
|
||||
using (var codec = SKCodec.Create (data)) {
|
||||
return Decode (codec);
|
||||
}
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
public static SKBitmap Decode (string filename)
|
||||
{
|
||||
return Decode (new SKFileStream (filename));
|
||||
}
|
||||
|
||||
public static SKBitmap Decode (byte[] buffer)
|
||||
{
|
||||
return Decode (new SKMemoryStream (buffer));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,8 +14,8 @@ namespace SkiaSharp
|
|||
public class SKCanvas : SKObject
|
||||
{
|
||||
[Preserve]
|
||||
internal SKCanvas (IntPtr handle)
|
||||
: base (handle)
|
||||
internal SKCanvas (IntPtr handle, bool owns)
|
||||
: base (handle, owns)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,116 @@
|
|||
//
|
||||
// Bindings for SKImageDecoder
|
||||
//
|
||||
// Author:
|
||||
// Matthew Leibowitz
|
||||
//
|
||||
// Copyright 2016 Xamarin Inc
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SkiaSharp
|
||||
{
|
||||
public class SKCodec : SKObject
|
||||
{
|
||||
[Preserve]
|
||||
internal SKCodec (IntPtr handle, bool owns)
|
||||
: base (handle, owns)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void Dispose (bool disposing)
|
||||
{
|
||||
if (Handle != IntPtr.Zero && OwnsHandle) {
|
||||
SkiaApi.sk_codec_destroy (Handle);
|
||||
}
|
||||
|
||||
base.Dispose (disposing);
|
||||
}
|
||||
|
||||
public static int MinBufferedBytesNeeded {
|
||||
get { return (int)SkiaApi.sk_codec_min_buffered_bytes_needed (); }
|
||||
}
|
||||
|
||||
public SKImageInfo Info {
|
||||
get {
|
||||
SKImageInfo info;
|
||||
SkiaApi.sk_codec_get_info (Handle, out info);
|
||||
return info;
|
||||
}
|
||||
}
|
||||
|
||||
public SKCodecOrigin Origin {
|
||||
get { return SkiaApi.sk_codec_get_origin (Handle); }
|
||||
}
|
||||
|
||||
public SKEncodedFormat EncodedFormat {
|
||||
get { return SkiaApi.sk_codec_get_encoded_format (Handle); }
|
||||
}
|
||||
|
||||
public SKSizeI GetScaledDimensions (float desiredScale)
|
||||
{
|
||||
SKSizeI dimensions;
|
||||
SkiaApi.sk_codec_get_scaled_dimensions (Handle, desiredScale, out dimensions);
|
||||
return dimensions;
|
||||
}
|
||||
|
||||
public void GetValidSubset (ref SKRectI desiredSubset)
|
||||
{
|
||||
SkiaApi.sk_codec_get_valid_subset (Handle, ref desiredSubset);
|
||||
}
|
||||
|
||||
public byte[] Pixels {
|
||||
get {
|
||||
byte[] pixels = null;
|
||||
var result = GetPixels (out pixels);
|
||||
if (result != SKCodecResult.Success && result != SKCodecResult.IncompleteInput) {
|
||||
throw new Exception (result.ToString ());
|
||||
}
|
||||
return pixels;
|
||||
}
|
||||
}
|
||||
|
||||
public SKCodecResult GetPixels (out byte[] pixels)
|
||||
{
|
||||
return GetPixels (Info, out pixels);
|
||||
}
|
||||
|
||||
public SKCodecResult GetPixels (SKImageInfo info, out byte[] pixels)
|
||||
{
|
||||
pixels = new byte[info.BytesSize];
|
||||
return GetPixels (info, pixels);
|
||||
}
|
||||
|
||||
public SKCodecResult GetPixels (SKImageInfo info, byte[] pixels)
|
||||
{
|
||||
GCHandle handle = default (GCHandle);
|
||||
try {
|
||||
handle = GCHandle.Alloc (pixels, GCHandleType.Pinned);
|
||||
return GetPixels (info, handle.AddrOfPinnedObject ());
|
||||
} finally {
|
||||
if (handle.IsAllocated) {
|
||||
handle.Free ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public SKCodecResult GetPixels (SKImageInfo info, IntPtr pixels)
|
||||
{
|
||||
return SkiaApi.sk_codec_get_pixels_using_defaults (Handle, ref info, pixels, (IntPtr)info.RowBytes);
|
||||
}
|
||||
|
||||
public static SKCodec Create (SKStream stream)
|
||||
{
|
||||
var codec = GetObject<SKCodec> (SkiaApi.sk_codec_new_from_stream (stream.Handle));
|
||||
codec.TakeOwnership (stream);
|
||||
return codec;
|
||||
}
|
||||
|
||||
public static SKCodec Create (SKData data)
|
||||
{
|
||||
return GetObject<SKCodec> (SkiaApi.sk_codec_new_from_data (data.Handle));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -24,14 +24,14 @@ namespace SkiaSharp
|
|||
}
|
||||
|
||||
[Preserve]
|
||||
internal SKColorFilter(IntPtr handle)
|
||||
: base (handle)
|
||||
internal SKColorFilter(IntPtr handle, bool owns)
|
||||
: base (handle, owns)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (Handle != IntPtr.Zero)
|
||||
if (Handle != IntPtr.Zero && OwnsHandle)
|
||||
{
|
||||
SkiaApi.sk_colorfilter_unref(Handle);
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@ namespace SkiaSharp
|
|||
{
|
||||
protected override void Dispose (bool disposing)
|
||||
{
|
||||
if (Handle != IntPtr.Zero) {
|
||||
if (Handle != IntPtr.Zero && OwnsHandle) {
|
||||
SkiaApi.sk_data_unref (Handle);
|
||||
}
|
||||
|
||||
|
@ -25,13 +25,13 @@ namespace SkiaSharp
|
|||
}
|
||||
|
||||
[Preserve]
|
||||
internal SKData (IntPtr x)
|
||||
: base (x)
|
||||
internal SKData (IntPtr x, bool owns)
|
||||
: base (x, owns)
|
||||
{
|
||||
}
|
||||
|
||||
public SKData ()
|
||||
: this (SkiaApi.sk_data_new_empty ())
|
||||
: this (SkiaApi.sk_data_new_empty (), true)
|
||||
{
|
||||
if (Handle == IntPtr.Zero) {
|
||||
throw new InvalidOperationException ("Unable to create a new SKData instance.");
|
||||
|
@ -39,7 +39,7 @@ namespace SkiaSharp
|
|||
}
|
||||
|
||||
public SKData (IntPtr bytes, ulong length)
|
||||
: this (IntPtr.Zero)
|
||||
: this (IntPtr.Zero, true)
|
||||
{
|
||||
if (Marshal.SizeOf (typeof(IntPtr)) == 4 && length > UInt32.MaxValue)
|
||||
throw new ArgumentException ("length", "The length exceeds the size of pointers");
|
||||
|
@ -50,7 +50,7 @@ namespace SkiaSharp
|
|||
}
|
||||
|
||||
public SKData (byte[] bytes)
|
||||
: this (SkiaApi.sk_data_new_with_copy (bytes, (IntPtr) bytes.Length))
|
||||
: this (SkiaApi.sk_data_new_with_copy (bytes, (IntPtr) bytes.Length), true)
|
||||
{
|
||||
if (Handle == IntPtr.Zero) {
|
||||
throw new InvalidOperationException ("Unable to copy the SKData instance.");
|
||||
|
|
|
@ -15,14 +15,14 @@ namespace SkiaSharp
|
|||
public const float DefaultRasterDpi = 72.0f;
|
||||
|
||||
[Preserve]
|
||||
internal SKDocument(IntPtr handle)
|
||||
: base (handle)
|
||||
internal SKDocument(IntPtr handle, bool owns)
|
||||
: base (handle, owns)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void Dispose (bool disposing)
|
||||
{
|
||||
if (Handle != IntPtr.Zero) {
|
||||
if (Handle != IntPtr.Zero && OwnsHandle) {
|
||||
SkiaApi.sk_document_unref (Handle);
|
||||
}
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ namespace SkiaSharp
|
|||
{
|
||||
protected override void Dispose (bool disposing)
|
||||
{
|
||||
if (Handle != IntPtr.Zero) {
|
||||
if (Handle != IntPtr.Zero && OwnsHandle) {
|
||||
SkiaApi.sk_image_unref (Handle);
|
||||
}
|
||||
|
||||
|
@ -34,8 +34,8 @@ namespace SkiaSharp
|
|||
}
|
||||
|
||||
[Preserve]
|
||||
internal SKImage (IntPtr x)
|
||||
: base (x)
|
||||
internal SKImage (IntPtr x, bool owns)
|
||||
: base (x, owns)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -1,198 +0,0 @@
|
|||
//
|
||||
// Bindings for SKImageDecoder
|
||||
//
|
||||
// Author:
|
||||
// Matthew Leibowitz
|
||||
//
|
||||
// Copyright 2016 Xamarin Inc
|
||||
//
|
||||
|
||||
using System;
|
||||
|
||||
namespace SkiaSharp
|
||||
{
|
||||
public class SKImageDecoder : SKObject
|
||||
{
|
||||
public SKImageDecoder(SKStreamRewindable stream)
|
||||
: this(SkiaApi.sk_imagedecoder_factory(stream.Handle))
|
||||
{
|
||||
if (Handle == IntPtr.Zero) {
|
||||
throw new ArgumentException ("Unable to find a decoder for the stream.", "stream");
|
||||
}
|
||||
}
|
||||
|
||||
[Preserve]
|
||||
internal SKImageDecoder(IntPtr handle)
|
||||
: base(handle)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (Handle != IntPtr.Zero)
|
||||
{
|
||||
SkiaApi.sk_imagedecoder_destructor(Handle);
|
||||
}
|
||||
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
public SKImageDecoderFormat Format
|
||||
{
|
||||
get { return SkiaApi.sk_imagedecoder_get_decoder_format(Handle); }
|
||||
}
|
||||
|
||||
public string FormatName
|
||||
{
|
||||
get { return (string) GetObject<SKString> (SkiaApi.sk_imagedecoder_get_format_name_from_decoder(Handle)); }
|
||||
}
|
||||
|
||||
public bool SkipWritingZeros
|
||||
{
|
||||
get { return SkiaApi.sk_imagedecoder_get_skip_writing_zeros(Handle); }
|
||||
set { SkiaApi.sk_imagedecoder_set_skip_writing_zeros(Handle, value); }
|
||||
}
|
||||
|
||||
public bool DitherImage
|
||||
{
|
||||
get { return SkiaApi.sk_imagedecoder_get_dither_image(Handle); }
|
||||
set { SkiaApi.sk_imagedecoder_set_dither_image(Handle, value); }
|
||||
}
|
||||
|
||||
public bool PreferQualityOverSpeed
|
||||
{
|
||||
get { return SkiaApi.sk_imagedecoder_get_prefer_quality_over_speed(Handle); }
|
||||
set { SkiaApi.sk_imagedecoder_set_prefer_quality_over_speed(Handle, value); }
|
||||
}
|
||||
|
||||
public bool RequireUnpremultipliedColors
|
||||
{
|
||||
get { return SkiaApi.sk_imagedecoder_get_require_unpremultiplied_colors(Handle); }
|
||||
set { SkiaApi.sk_imagedecoder_set_require_unpremultiplied_colors(Handle, value); }
|
||||
}
|
||||
|
||||
public int SampleSize
|
||||
{
|
||||
get { return SkiaApi.sk_imagedecoder_get_sample_size(Handle); }
|
||||
set { SkiaApi.sk_imagedecoder_set_sample_size(Handle, value); }
|
||||
}
|
||||
|
||||
public bool ShouldCancelDecode
|
||||
{
|
||||
get { return SkiaApi.sk_imagedecoder_should_cancel_decode(Handle); }
|
||||
}
|
||||
|
||||
public void CancelDecode()
|
||||
{
|
||||
SkiaApi.sk_imagedecoder_cancel_decode(Handle);
|
||||
}
|
||||
|
||||
public SKImageDecoderResult Decode(SKStream stream, SKBitmap bitmap, SKColorType pref = SKColorType.Unknown, SKImageDecoderMode mode = SKImageDecoderMode.DecodePixels)
|
||||
{
|
||||
return SkiaApi.sk_imagedecoder_decode(Handle, stream.Handle, bitmap.Handle, pref, mode);
|
||||
}
|
||||
|
||||
public static SKImageDecoderFormat GetFormat(SKStreamRewindable stream)
|
||||
{
|
||||
return SkiaApi.sk_imagedecoder_get_stream_format(stream.Handle);
|
||||
}
|
||||
|
||||
public static string GetFormatName(SKImageDecoderFormat format)
|
||||
{
|
||||
return (string) GetObject<SKString> (SkiaApi.sk_imagedecoder_get_format_name_from_format(format));
|
||||
}
|
||||
|
||||
public static bool DecodeStreamBounds(SKStreamRewindable stream, out SKImageInfo info, SKColorType pref = SKColorType.Unknown)
|
||||
{
|
||||
SKImageDecoderFormat format = SKImageDecoderFormat.Unknown;
|
||||
return DecodeStreamBounds(stream, out info, pref, ref format);
|
||||
}
|
||||
|
||||
public static bool DecodeStreamBounds(SKStreamRewindable stream, out SKImageInfo info, SKColorType pref, ref SKImageDecoderFormat format)
|
||||
{
|
||||
using (var bitmap = new SKBitmap())
|
||||
{
|
||||
if (DecodeStream(stream, bitmap, pref, SKImageDecoderMode.DecodePixels, ref format))
|
||||
{
|
||||
info = bitmap.Info;
|
||||
return true;
|
||||
}
|
||||
info = SKImageInfo.Empty;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool DecodeFileBounds(string filename, out SKImageInfo info, SKColorType pref = SKColorType.Unknown)
|
||||
{
|
||||
SKImageDecoderFormat format = SKImageDecoderFormat.Unknown;
|
||||
return DecodeFileBounds(filename, out info, pref, ref format);
|
||||
}
|
||||
|
||||
public static bool DecodeFileBounds(string filename, out SKImageInfo info, SKColorType pref, ref SKImageDecoderFormat format)
|
||||
{
|
||||
using (var bitmap = new SKBitmap())
|
||||
{
|
||||
if (DecodeFile(filename, bitmap, pref, SKImageDecoderMode.DecodePixels, ref format))
|
||||
{
|
||||
info = bitmap.Info;
|
||||
return true;
|
||||
}
|
||||
info = SKImageInfo.Empty;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool DecodeMemoryBounds(byte[] buffer, out SKImageInfo info, SKColorType pref = SKColorType.Unknown)
|
||||
{
|
||||
SKImageDecoderFormat format = SKImageDecoderFormat.Unknown;
|
||||
return DecodeMemoryBounds(buffer, out info, pref, ref format);
|
||||
}
|
||||
|
||||
public static bool DecodeMemoryBounds(byte[] buffer, out SKImageInfo info, SKColorType pref, ref SKImageDecoderFormat format)
|
||||
{
|
||||
using (var bitmap = new SKBitmap())
|
||||
{
|
||||
if (DecodeMemory(buffer, bitmap, pref, SKImageDecoderMode.DecodePixels, ref format))
|
||||
{
|
||||
info = bitmap.Info;
|
||||
return true;
|
||||
}
|
||||
info = SKImageInfo.Empty;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool DecodeStream(SKStreamRewindable stream, SKBitmap bitmap, SKColorType pref = SKColorType.Unknown, SKImageDecoderMode mode = SKImageDecoderMode.DecodePixels)
|
||||
{
|
||||
SKImageDecoderFormat format = SKImageDecoderFormat.Unknown;
|
||||
return DecodeStream(stream, bitmap, pref, mode, ref format);
|
||||
}
|
||||
|
||||
public static bool DecodeStream(SKStreamRewindable stream, SKBitmap bitmap, SKColorType pref, SKImageDecoderMode mode, ref SKImageDecoderFormat format)
|
||||
{
|
||||
return SkiaApi.sk_imagedecoder_decode_stream(stream.Handle, bitmap.Handle, pref, mode, ref format);
|
||||
}
|
||||
|
||||
public static bool DecodeFile(string filename, SKBitmap bitmap, SKColorType pref = SKColorType.Unknown, SKImageDecoderMode mode = SKImageDecoderMode.DecodePixels)
|
||||
{
|
||||
SKImageDecoderFormat format = SKImageDecoderFormat.Unknown;
|
||||
return DecodeFile(filename, bitmap, pref, mode, ref format);
|
||||
}
|
||||
|
||||
public static bool DecodeFile(string filename, SKBitmap bitmap, SKColorType pref, SKImageDecoderMode mode, ref SKImageDecoderFormat format)
|
||||
{
|
||||
return SkiaApi.sk_imagedecoder_decode_file(filename, bitmap.Handle, pref, mode, ref format);
|
||||
}
|
||||
|
||||
public static bool DecodeMemory(byte[] buffer, SKBitmap bitmap, SKColorType pref = SKColorType.Unknown, SKImageDecoderMode mode = SKImageDecoderMode.DecodePixels)
|
||||
{
|
||||
SKImageDecoderFormat format = SKImageDecoderFormat.Unknown;
|
||||
return DecodeMemory(buffer, bitmap, pref, mode, ref format);
|
||||
}
|
||||
|
||||
public static bool DecodeMemory(byte[] buffer, SKBitmap bitmap, SKColorType pref, SKImageDecoderMode mode, ref SKImageDecoderFormat format)
|
||||
{
|
||||
return SkiaApi.sk_imagedecoder_decode_memory(buffer, (IntPtr)buffer.Length, bitmap.Handle, pref, mode, ref format);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -13,14 +13,14 @@ namespace SkiaSharp
|
|||
public class SKImageFilter : SKObject
|
||||
{
|
||||
[Preserve]
|
||||
internal SKImageFilter(IntPtr handle)
|
||||
: base(handle)
|
||||
internal SKImageFilter(IntPtr handle, bool owns)
|
||||
: base(handle, owns)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (Handle != IntPtr.Zero)
|
||||
if (Handle != IntPtr.Zero && OwnsHandle)
|
||||
{
|
||||
SkiaApi.sk_imagefilter_unref(Handle);
|
||||
}
|
||||
|
@ -172,24 +172,24 @@ namespace SkiaSharp
|
|||
|
||||
public class CropRect : SKObject
|
||||
{
|
||||
internal CropRect(IntPtr handle)
|
||||
: base(handle)
|
||||
internal CropRect(IntPtr handle, bool owns)
|
||||
: base(handle, owns)
|
||||
{
|
||||
}
|
||||
|
||||
public CropRect()
|
||||
: this(SkiaApi.sk_imagefilter_croprect_new())
|
||||
: this(SkiaApi.sk_imagefilter_croprect_new(), true)
|
||||
{
|
||||
}
|
||||
|
||||
public CropRect(SKRect rect, SKCropRectFlags flags = SKCropRectFlags.HasAll)
|
||||
: this(SkiaApi.sk_imagefilter_croprect_new_with_rect(ref rect, flags))
|
||||
: this(SkiaApi.sk_imagefilter_croprect_new_with_rect(ref rect, flags), true)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (Handle != IntPtr.Zero)
|
||||
if (Handle != IntPtr.Zero && OwnsHandle)
|
||||
{
|
||||
SkiaApi.sk_imagefilter_croprect_destructor(Handle);
|
||||
}
|
||||
|
|
|
@ -15,14 +15,14 @@ namespace SkiaSharp
|
|||
private const float BlurSigmaScale = 0.57735f;
|
||||
|
||||
[Preserve]
|
||||
internal SKMaskFilter (IntPtr handle)
|
||||
: base (handle)
|
||||
internal SKMaskFilter (IntPtr handle, bool owns)
|
||||
: base (handle, owns)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void Dispose (bool disposing)
|
||||
{
|
||||
if (Handle != IntPtr.Zero) {
|
||||
if (Handle != IntPtr.Zero && OwnsHandle) {
|
||||
SkiaApi.sk_maskfilter_unref (Handle);
|
||||
}
|
||||
|
||||
|
|
|
@ -22,13 +22,6 @@ namespace SkiaSharp
|
|||
private readonly List<SKObject> ownedObjects = new List<SKObject>();
|
||||
private IntPtr handle;
|
||||
|
||||
[Preserve]
|
||||
internal SKObject(IntPtr handle)
|
||||
{
|
||||
Handle = handle;
|
||||
OwnsHandle = false;
|
||||
}
|
||||
|
||||
[Preserve]
|
||||
internal SKObject(IntPtr handle, bool owns)
|
||||
{
|
||||
|
@ -71,16 +64,9 @@ namespace SkiaSharp
|
|||
}
|
||||
|
||||
DeregisterHandle(handle, this);
|
||||
handle = IntPtr.Zero;
|
||||
}
|
||||
handle = IntPtr.Zero;}
|
||||
|
||||
internal static TSkiaObject GetObject<TSkiaObject>(IntPtr handle)
|
||||
where TSkiaObject : SKObject
|
||||
{
|
||||
return GetObject<TSkiaObject>(handle, null);
|
||||
}
|
||||
|
||||
internal static TSkiaObject GetObject<TSkiaObject>(IntPtr handle, bool? owns)
|
||||
internal static TSkiaObject GetObject<TSkiaObject>(IntPtr handle, bool owns = true)
|
||||
where TSkiaObject : SKObject
|
||||
{
|
||||
if (handle == IntPtr.Zero)
|
||||
|
@ -106,13 +92,12 @@ namespace SkiaSharp
|
|||
// TODO: we could probably cache this
|
||||
var type = typeof(TSkiaObject);
|
||||
var constructor = type.GetTypeInfo().DeclaredConstructors.FirstOrDefault(c =>
|
||||
(owns == null && c.GetParameters().Length == 1 && c.GetParameters()[0].ParameterType == typeof(IntPtr)) ||
|
||||
(owns != null && c.GetParameters().Length == 2 && c.GetParameters()[0].ParameterType == typeof(IntPtr) && c.GetParameters()[1].ParameterType == typeof(bool)));
|
||||
c.GetParameters().Length == 2 && c.GetParameters()[0].ParameterType == typeof(IntPtr) && c.GetParameters()[1].ParameterType == typeof(bool));
|
||||
if (constructor == null)
|
||||
{
|
||||
throw new MissingMethodException($"No constructor found for {type.FullName}.ctor(System.IntPtr{(owns==null?"":", System.Boolean")})");
|
||||
throw new MissingMethodException($"No constructor found for {type.FullName}.ctor(System.IntPtr, System.Boolean)");
|
||||
}
|
||||
return (TSkiaObject)constructor.Invoke(owns == null ? new object[] { handle } : new object[] { handle, owns });
|
||||
return (TSkiaObject)constructor.Invoke(new object[] { handle, owns });
|
||||
}
|
||||
|
||||
internal static void RegisterHandle(IntPtr handle, SKObject instance)
|
||||
|
|
|
@ -13,13 +13,13 @@ namespace SkiaSharp
|
|||
public class SKPaint : SKObject
|
||||
{
|
||||
[Preserve]
|
||||
internal SKPaint (IntPtr handle)
|
||||
: base (handle)
|
||||
internal SKPaint (IntPtr handle, bool owns)
|
||||
: base (handle, owns)
|
||||
{
|
||||
}
|
||||
|
||||
public SKPaint ()
|
||||
: this (SkiaApi.sk_paint_new ())
|
||||
: this (SkiaApi.sk_paint_new (), true)
|
||||
{
|
||||
if (Handle == IntPtr.Zero) {
|
||||
throw new InvalidOperationException ("Unable to create a new SKPaint instance.");
|
||||
|
@ -28,7 +28,7 @@ namespace SkiaSharp
|
|||
|
||||
protected override void Dispose (bool disposing)
|
||||
{
|
||||
if (Handle != IntPtr.Zero) {
|
||||
if (Handle != IntPtr.Zero && OwnsHandle) {
|
||||
SkiaApi.sk_paint_delete (Handle);
|
||||
}
|
||||
|
||||
|
@ -118,7 +118,7 @@ namespace SkiaSharp
|
|||
|
||||
public SKShader Shader {
|
||||
get {
|
||||
return GetObject<SKShader>(SkiaApi.sk_paint_get_shader(Handle));
|
||||
return GetObject<SKShader>(SkiaApi.sk_paint_get_shader(Handle), false);
|
||||
}
|
||||
set {
|
||||
SkiaApi.sk_paint_set_shader(Handle, value == null ? IntPtr.Zero : value.Handle);
|
||||
|
@ -127,7 +127,7 @@ namespace SkiaSharp
|
|||
|
||||
public SKMaskFilter MaskFilter {
|
||||
get {
|
||||
return GetObject<SKMaskFilter>(SkiaApi.sk_paint_get_maskfilter(Handle));
|
||||
return GetObject<SKMaskFilter>(SkiaApi.sk_paint_get_maskfilter(Handle), false);
|
||||
}
|
||||
set {
|
||||
SkiaApi.sk_paint_set_maskfilter (Handle, value == null ? IntPtr.Zero : value.Handle);
|
||||
|
@ -136,7 +136,7 @@ namespace SkiaSharp
|
|||
|
||||
public SKColorFilter ColorFilter {
|
||||
get {
|
||||
return GetObject<SKColorFilter>(SkiaApi.sk_paint_get_colorfilter(Handle));
|
||||
return GetObject<SKColorFilter>(SkiaApi.sk_paint_get_colorfilter(Handle), false);
|
||||
}
|
||||
set {
|
||||
SkiaApi.sk_paint_set_colorfilter (Handle, value == null ? IntPtr.Zero : value.Handle);
|
||||
|
@ -145,7 +145,7 @@ namespace SkiaSharp
|
|||
|
||||
public SKImageFilter ImageFilter {
|
||||
get {
|
||||
return GetObject<SKImageFilter>(SkiaApi.sk_paint_get_imagefilter(Handle));
|
||||
return GetObject<SKImageFilter>(SkiaApi.sk_paint_get_imagefilter(Handle), false);
|
||||
}
|
||||
set {
|
||||
SkiaApi.sk_paint_set_imagefilter(Handle, value == null ? IntPtr.Zero : value.Handle);
|
||||
|
@ -175,7 +175,7 @@ namespace SkiaSharp
|
|||
|
||||
public SKTypeface Typeface {
|
||||
get {
|
||||
return GetObject<SKTypeface> (SkiaApi.sk_paint_get_typeface (Handle));
|
||||
return GetObject<SKTypeface> (SkiaApi.sk_paint_get_typeface (Handle), false);
|
||||
}
|
||||
set {
|
||||
SkiaApi.sk_paint_set_typeface (Handle, value == null ? IntPtr.Zero : value.Handle);
|
||||
|
|
|
@ -13,13 +13,13 @@ namespace SkiaSharp
|
|||
public class SKPath : SKObject
|
||||
{
|
||||
[Preserve]
|
||||
internal SKPath (IntPtr handle)
|
||||
: base (handle)
|
||||
internal SKPath (IntPtr handle, bool owns)
|
||||
: base (handle, owns)
|
||||
{
|
||||
}
|
||||
|
||||
public SKPath ()
|
||||
: this (SkiaApi.sk_path_new ())
|
||||
: this (SkiaApi.sk_path_new (), true)
|
||||
{
|
||||
if (Handle == IntPtr.Zero) {
|
||||
throw new InvalidOperationException ("Unable to create a new SKPath instance.");
|
||||
|
@ -27,7 +27,7 @@ namespace SkiaSharp
|
|||
}
|
||||
|
||||
public SKPath(SKPath path)
|
||||
: this (SkiaApi.sk_path_clone(path.Handle))
|
||||
: this (SkiaApi.sk_path_clone(path.Handle), true)
|
||||
{
|
||||
if (Handle == IntPtr.Zero) {
|
||||
throw new InvalidOperationException ("Unable to copy the SKPath instance.");
|
||||
|
@ -36,7 +36,7 @@ namespace SkiaSharp
|
|||
|
||||
protected override void Dispose (bool disposing)
|
||||
{
|
||||
if (Handle != IntPtr.Zero) {
|
||||
if (Handle != IntPtr.Zero && OwnsHandle) {
|
||||
SkiaApi.sk_path_delete (Handle);
|
||||
}
|
||||
|
||||
|
|
|
@ -14,14 +14,14 @@ namespace SkiaSharp
|
|||
public class SKPicture : SKObject
|
||||
{
|
||||
[Preserve]
|
||||
internal SKPicture (IntPtr h)
|
||||
: base (h)
|
||||
internal SKPicture (IntPtr h, bool owns)
|
||||
: base (h, owns)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void Dispose (bool disposing)
|
||||
{
|
||||
if (Handle != IntPtr.Zero) {
|
||||
if (Handle != IntPtr.Zero && OwnsHandle) {
|
||||
SkiaApi.sk_picture_unref (Handle);
|
||||
}
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ namespace SkiaSharp
|
|||
{
|
||||
protected override void Dispose (bool disposing)
|
||||
{
|
||||
if (Handle != IntPtr.Zero) {
|
||||
if (Handle != IntPtr.Zero && OwnsHandle) {
|
||||
SkiaApi.sk_picture_recorder_delete (Handle);
|
||||
}
|
||||
|
||||
|
@ -23,13 +23,13 @@ namespace SkiaSharp
|
|||
}
|
||||
|
||||
[Preserve]
|
||||
public SKPictureRecorder (IntPtr handle)
|
||||
: base (handle)
|
||||
public SKPictureRecorder (IntPtr handle, bool owns)
|
||||
: base (handle, owns)
|
||||
{
|
||||
}
|
||||
|
||||
public SKPictureRecorder ()
|
||||
: this (SkiaApi.sk_picture_recorder_new ())
|
||||
: this (SkiaApi.sk_picture_recorder_new (), true)
|
||||
{
|
||||
if (Handle == IntPtr.Zero) {
|
||||
throw new InvalidOperationException ("Unable to create a new SKPictureRecorder instance.");
|
||||
|
|
|
@ -13,14 +13,14 @@ namespace SkiaSharp
|
|||
public class SKShader : SKObject
|
||||
{
|
||||
[Preserve]
|
||||
internal SKShader (IntPtr handle)
|
||||
: base (handle)
|
||||
internal SKShader (IntPtr handle, bool owns)
|
||||
: base (handle, owns)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void Dispose (bool disposing)
|
||||
{
|
||||
if (Handle != IntPtr.Zero) {
|
||||
if (Handle != IntPtr.Zero && OwnsHandle) {
|
||||
SkiaApi.sk_shader_unref (Handle);
|
||||
}
|
||||
|
||||
|
@ -117,14 +117,14 @@ namespace SkiaSharp
|
|||
return GetObject<SKShader>(SkiaApi.sk_shader_new_perlin_noise_turbulence(baseFrequencyX, baseFrequencyY, numOctaves, seed, ref tileSize));
|
||||
}
|
||||
|
||||
public static SKShader CreateCompose(SKShader shaderA, SKShader shaderB)
|
||||
public static SKShader CreateCompose (SKShader shaderA, SKShader shaderB)
|
||||
{
|
||||
return GetObject<SKShader>(SkiaApi.sk_shader_new_compose(shaderA.Handle, shaderB.Handle));
|
||||
return GetObject<SKShader> (SkiaApi.sk_shader_new_compose (shaderA.Handle, shaderB.Handle));
|
||||
}
|
||||
|
||||
public static SKShader CreateCompose(SKShader shaderA, SKShader shaderB, SKXferMode mode)
|
||||
public static SKShader CreateCompose (SKShader shaderA, SKShader shaderB, SKXferMode mode)
|
||||
{
|
||||
return GetObject<SKShader>(SkiaApi.sk_shader_new_compose_with_mode(shaderA.Handle, shaderB.Handle, mode));
|
||||
return GetObject<SKShader> (SkiaApi.sk_shader_new_compose_with_mode (shaderA.Handle, shaderB.Handle, mode));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,11 +12,6 @@ namespace SkiaSharp
|
|||
{
|
||||
public abstract class SKStream : SKObject
|
||||
{
|
||||
private SKStream (IntPtr handle)
|
||||
: base (handle)
|
||||
{
|
||||
}
|
||||
|
||||
internal SKStream (IntPtr handle, bool owns)
|
||||
: base (handle, owns)
|
||||
{
|
||||
|
@ -264,11 +259,6 @@ namespace SkiaSharp
|
|||
|
||||
public abstract class SKWStream : SKObject
|
||||
{
|
||||
private SKWStream (IntPtr handle)
|
||||
: base (handle)
|
||||
{
|
||||
}
|
||||
|
||||
internal SKWStream (IntPtr handle, bool owns)
|
||||
: base (handle, owns)
|
||||
{
|
||||
|
@ -418,7 +408,7 @@ namespace SkiaSharp
|
|||
|
||||
public SKStreamAsset DetachAsStream ()
|
||||
{
|
||||
return GetObject<SKStreamAssetImplementation> (SkiaApi.sk_dynamicmemorywstream_detach_as_stream (Handle), true);
|
||||
return GetObject<SKStreamAssetImplementation> (SkiaApi.sk_dynamicmemorywstream_detach_as_stream (Handle));
|
||||
}
|
||||
|
||||
protected override void Dispose (bool disposing)
|
||||
|
|
|
@ -14,13 +14,13 @@ namespace SkiaSharp
|
|||
internal class SKString : SKObject
|
||||
{
|
||||
[Preserve]
|
||||
internal SKString (IntPtr handle)
|
||||
: base (handle)
|
||||
internal SKString (IntPtr handle, bool owns)
|
||||
: base (handle, owns)
|
||||
{
|
||||
}
|
||||
|
||||
public SKString ()
|
||||
: base (SkiaApi.sk_string_new_empty ())
|
||||
: base (SkiaApi.sk_string_new_empty (), true)
|
||||
{
|
||||
if (Handle == IntPtr.Zero) {
|
||||
throw new InvalidOperationException ("Unable to create a new SKString instance.");
|
||||
|
@ -28,7 +28,7 @@ namespace SkiaSharp
|
|||
}
|
||||
|
||||
public SKString (byte [] src, long length)
|
||||
: base (SkiaApi.sk_string_new_with_copy (src, (IntPtr)length))
|
||||
: base (SkiaApi.sk_string_new_with_copy (src, (IntPtr)length), true)
|
||||
{
|
||||
if (Handle == IntPtr.Zero) {
|
||||
throw new InvalidOperationException ("Unable to copy the SKString instance.");
|
||||
|
@ -49,7 +49,7 @@ namespace SkiaSharp
|
|||
|
||||
protected override void Dispose (bool disposing)
|
||||
{
|
||||
if (Handle != IntPtr.Zero) {
|
||||
if (Handle != IntPtr.Zero && OwnsHandle) {
|
||||
SkiaApi.sk_string_destructor (Handle);
|
||||
}
|
||||
|
||||
|
|
|
@ -19,8 +19,8 @@ namespace SkiaSharp
|
|||
public static SKSurface Create (int width, int height, SKColorType colorType, SKAlphaType alphaType, IntPtr pixels, int rowBytes, SKSurfaceProps props) => Create (new SKImageInfo (width, height, colorType, alphaType), pixels, rowBytes, props);
|
||||
|
||||
[Preserve]
|
||||
internal SKSurface (IntPtr h)
|
||||
: base (h)
|
||||
internal SKSurface (IntPtr h, bool owns)
|
||||
: base (h, owns)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,7 @@ namespace SkiaSharp
|
|||
|
||||
protected override void Dispose (bool disposing)
|
||||
{
|
||||
if (Handle != IntPtr.Zero) {
|
||||
if (Handle != IntPtr.Zero && OwnsHandle) {
|
||||
SkiaApi.sk_surface_unref (Handle);
|
||||
}
|
||||
|
||||
|
@ -55,7 +55,7 @@ namespace SkiaSharp
|
|||
|
||||
public SKCanvas Canvas {
|
||||
get {
|
||||
return GetObject<SKCanvas> (SkiaApi.sk_surface_get_canvas (Handle));
|
||||
return GetObject<SKCanvas> (SkiaApi.sk_surface_get_canvas (Handle), false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -14,14 +14,14 @@ namespace SkiaSharp
|
|||
public class SKTypeface : SKObject
|
||||
{
|
||||
[Preserve]
|
||||
internal SKTypeface (IntPtr handle)
|
||||
: base (handle)
|
||||
internal SKTypeface (IntPtr handle, bool owns)
|
||||
: base (handle, owns)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void Dispose (bool disposing)
|
||||
{
|
||||
if (Handle != IntPtr.Zero) {
|
||||
if (Handle != IntPtr.Zero && OwnsHandle) {
|
||||
SkiaApi.sk_typeface_unref (Handle);
|
||||
}
|
||||
|
||||
|
|
|
@ -32,11 +32,12 @@ using sk_wstream_t = System.IntPtr;
|
|||
using sk_wstream_dynamicmemorystream_t = System.IntPtr;
|
||||
using sk_wstream_filestream_t = System.IntPtr;
|
||||
using sk_bitmap_t = System.IntPtr;
|
||||
using sk_imagedecoder_t = System.IntPtr;
|
||||
using sk_codec_t = System.IntPtr;
|
||||
using sk_imagefilter_croprect_t = System.IntPtr;
|
||||
using sk_imagefilter_t = System.IntPtr;
|
||||
using sk_colorfilter_t = System.IntPtr;
|
||||
using sk_document_t = System.IntPtr;
|
||||
using sk_colorspace_t = System.IntPtr;
|
||||
|
||||
namespace SkiaSharp
|
||||
{
|
||||
|
@ -713,13 +714,39 @@ namespace SkiaSharp
|
|||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static void sk_document_abort(sk_document_t document);
|
||||
|
||||
// Codec
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static IntPtr sk_codec_min_buffered_bytes_needed();
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static sk_codec_t sk_codec_new_from_stream(sk_stream_t stream);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static sk_codec_t sk_codec_new_from_data(sk_data_t data);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static void sk_codec_destroy(sk_codec_t codec);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static void sk_codec_get_info(sk_codec_t codec, out SKImageInfo info);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static sk_colorspace_t sk_codec_get_color_space(sk_codec_t codec);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static SKCodecOrigin sk_codec_get_origin(sk_codec_t codec);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static void sk_codec_get_scaled_dimensions(sk_codec_t codec, float desiredScale, out SKSizeI dimensions);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static void sk_codec_get_valid_subset(sk_codec_t codec, ref SKRectI desiredSubset);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static SKEncodedFormat sk_codec_get_encoded_format(sk_codec_t codec);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static SKCodecResult sk_codec_get_pixels(sk_codec_t codec, ref SKImageInfo info, IntPtr pixels, IntPtr rowBytes, SKCodecOptions options, [Out] SKColor[] ctable /*256*/, out int ctableCount);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static SKCodecResult sk_codec_get_pixels_using_defaults(sk_codec_t codec, ref SKImageInfo info, IntPtr pixels, IntPtr rowBytes);
|
||||
|
||||
// Bitmap
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static sk_bitmap_t sk_bitmap_new();
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static void sk_bitmap_destructor(sk_bitmap_t b);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static bool sk_bitmap_get_info(sk_bitmap_t b, out SKImageInfo info);
|
||||
public extern static void sk_bitmap_get_info(sk_bitmap_t b, out SKImageInfo info);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static IntPtr sk_bitmap_get_pixels(sk_bitmap_t b, out IntPtr length);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
|
@ -761,53 +788,6 @@ namespace SkiaSharp
|
|||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static bool sk_bitmap_try_alloc_pixels(sk_bitmap_t cbitmap, ref SKImageInfo requestedInfo, IntPtr rowBytes);
|
||||
|
||||
// Image Decoder
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static void sk_imagedecoder_destructor(sk_imagedecoder_t cdecoder);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static SKImageDecoderFormat sk_imagedecoder_get_decoder_format(sk_imagedecoder_t cdecoder);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static SKImageDecoderFormat sk_imagedecoder_get_stream_format(sk_stream_streamrewindable_t cstream);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static sk_string_t sk_imagedecoder_get_format_name_from_format(SKImageDecoderFormat cformat);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static sk_string_t sk_imagedecoder_get_format_name_from_decoder(sk_imagedecoder_t cdecoder);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static bool sk_imagedecoder_get_skip_writing_zeros(sk_imagedecoder_t cdecoder);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static void sk_imagedecoder_set_skip_writing_zeros(sk_imagedecoder_t cdecoder, bool skip);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static bool sk_imagedecoder_get_dither_image(sk_imagedecoder_t cdecoder);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static void sk_imagedecoder_set_dither_image(sk_imagedecoder_t cdecoder, bool dither);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static bool sk_imagedecoder_get_prefer_quality_over_speed(sk_imagedecoder_t cdecoder);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static void sk_imagedecoder_set_prefer_quality_over_speed(sk_imagedecoder_t cdecoder, bool qualityOverSpeed);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static bool sk_imagedecoder_get_require_unpremultiplied_colors(sk_imagedecoder_t cdecoder);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static void sk_imagedecoder_set_require_unpremultiplied_colors(sk_imagedecoder_t cdecoder, bool request);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static int sk_imagedecoder_get_sample_size(sk_imagedecoder_t cdecoder);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static void sk_imagedecoder_set_sample_size(sk_imagedecoder_t cdecoder, int size);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static void sk_imagedecoder_cancel_decode(sk_imagedecoder_t cdecoder);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static bool sk_imagedecoder_should_cancel_decode(sk_imagedecoder_t cdecoder);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static SKImageDecoderResult sk_imagedecoder_decode(sk_imagedecoder_t cdecoder, sk_stream_t cstream, sk_bitmap_t bitmap, SKColorType pref, SKImageDecoderMode mode);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static sk_imagedecoder_t sk_imagedecoder_factory(sk_stream_streamrewindable_t cstream);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static bool sk_imagedecoder_decode_file(string file, sk_bitmap_t bitmap, SKColorType pref, SKImageDecoderMode mode, ref SKImageDecoderFormat format);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static bool sk_imagedecoder_decode_memory(byte[] buffer, IntPtr size, sk_bitmap_t bitmap, SKColorType pref, SKImageDecoderMode mode, ref SKImageDecoderFormat format);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static bool sk_imagedecoder_decode_memory(IntPtr buffer, IntPtr size, sk_bitmap_t bitmap, SKColorType pref, SKImageDecoderMode mode, ref SKImageDecoderFormat format);
|
||||
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
|
||||
public extern static bool sk_imagedecoder_decode_stream(sk_stream_streamrewindable_t cstream, sk_bitmap_t bitmap, SKColorType pref, SKImageDecoderMode mode, ref SKImageDecoderFormat format);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 3d3a2f6aa198c1e627704ca240967dc4ea3db617
|
||||
Subproject commit 8dd81ea20b3830a816be88d73e61db2097716548
|
|
@ -178,6 +178,12 @@
|
|||
<ProjectReference Include="..\..\skia\out\gyp\core.vcxproj">
|
||||
<Project>{b7760b5e-bfa8-486b-acfd-49e3a6de8e76}</Project>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\skia\out\gyp\dng_sdk-selector.vcxproj">
|
||||
<Project>{3e562996-8671-6cac-3138-dde7dfb70196}</Project>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\skia\out\gyp\dng_sdk.vcxproj">
|
||||
<Project>{e6ac5ad9-ba72-e396-9af0-5bcedee32a44}</Project>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\skia\out\gyp\effects.vcxproj">
|
||||
<Project>{200809b7-4c62-7592-f47e-bf262809fa50}</Project>
|
||||
</ProjectReference>
|
||||
|
@ -205,9 +211,6 @@
|
|||
<ProjectReference Include="..\..\skia\out\gyp\libpng_static.vcxproj">
|
||||
<Project>{35bbcd7a-909d-957f-ada0-c09939e0916f}</Project>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\skia\out\gyp\libpng_static_neon.vcxproj">
|
||||
<Project>{95e593ce-01f6-a02e-334e-1a6c34964fa6}</Project>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\skia\out\gyp\libSkKTX.vcxproj">
|
||||
<Project>{c984027d-7bfe-3d92-8d87-082486d7334e}</Project>
|
||||
</ProjectReference>
|
||||
|
@ -250,9 +253,18 @@
|
|||
<ProjectReference Include="..\..\skia\out\gyp\pdf.vcxproj">
|
||||
<Project>{b8aa38a8-c1f9-7c27-270f-199d0891282c}</Project>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\skia\out\gyp\piex-selector.vcxproj">
|
||||
<Project>{c580210b-778a-c16c-6ee0-29eac48e75c7}</Project>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\skia\out\gyp\piex.vcxproj">
|
||||
<Project>{e94d4110-703a-d378-de0d-1567557a63a4}</Project>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\skia\out\gyp\ports.vcxproj">
|
||||
<Project>{b15878d6-6997-adc9-ac65-516a7f578db2}</Project>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\skia\out\gyp\raw_codec.vcxproj">
|
||||
<Project>{69919814-af57-8c45-e0db-2112ee2a146a}</Project>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\skia\out\gyp\sfnt.vcxproj">
|
||||
<Project>{43c5db31-68d1-5452-4bf0-ad0ab84b2e52}</Project>
|
||||
</ProjectReference>
|
||||
|
@ -274,9 +286,6 @@
|
|||
<ProjectReference Include="..\..\skia\out\gyp\zlib.vcxproj">
|
||||
<Project>{4c5035c1-74ba-cf3d-79b1-471c205a490d}</Project>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\skia\out\gyp\zlib_x86_simd.vcxproj">
|
||||
<Project>{4844151d-e943-c99d-d340-683a26e22fc7}</Project>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 14
|
||||
VisualStudioVersion = 14.0.24720.0
|
||||
VisualStudioVersion = 14.0.25123.0
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core", "..\..\skia\out\gyp\core.vcxproj", "{B7760B5E-BFA8-486B-ACFD-49E3A6DE8E76}"
|
||||
EndProject
|
||||
|
@ -60,16 +60,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sfntly", "..\..\skia\out\gy
|
|||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "..\..\skia\out\gyp\zlib.vcxproj", "{4C5035C1-74BA-CF3D-79B1-471C205A490D}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib_x86_simd", "..\..\skia\out\gyp\zlib_x86_simd.vcxproj", "{4844151D-E943-C99D-D340-683A26E22FC7}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icuuc", "..\..\skia\out\gyp\icuuc.vcxproj", "{7F3F1A83-26A1-FAF5-C6B1-977E328C1738}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpng", "..\..\skia\out\gyp\libpng.vcxproj", "{244A967D-9EDE-F233-1CFA-A22A1B666A3E}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpng_static", "..\..\skia\out\gyp\libpng_static.vcxproj", "{35BBCD7A-909D-957F-ADA0-C09939E0916F}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpng_static_neon", "..\..\skia\out\gyp\libpng_static_neon.vcxproj", "{95E593CE-01F6-A02E-334E-1A6C34964FA6}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "codec", "..\..\skia\out\gyp\codec.vcxproj", "{16F70B29-3F1A-5D36-8FD9-E069D7ED5320}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "codec_android", "..\..\skia\out\gyp\codec_android.vcxproj", "{33835BFB-8F8B-4120-2D5C-973A743F30A5}"
|
||||
|
@ -78,6 +74,14 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "giflib", "..\..\skia\out\gy
|
|||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "skia_lib", "..\..\skia\out\gyp\skia_lib.vcxproj", "{70A43075-F008-E167-05C8-978BE66FE588}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "piex", "..\..\skia\out\gyp\piex.vcxproj", "{E94D4110-703A-D378-DE0D-1567557A63A4}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "piex-selector", "..\..\skia\out\gyp\piex-selector.vcxproj", "{C580210B-778A-C16C-6EE0-29EAC48E75C7}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dng_sdk", "..\..\skia\out\gyp\dng_sdk.vcxproj", "{E6AC5AD9-BA72-E396-9AF0-5BCEDEE32A44}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dng_sdk-selector", "..\..\skia\out\gyp\dng_sdk-selector.vcxproj", "{3E562996-8671-6CAC-3138-DDE7DFB70196}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
|
@ -254,12 +258,6 @@ Global
|
|||
{4C5035C1-74BA-CF3D-79B1-471C205A490D}.Release|Win32.ActiveCfg = Release|x64
|
||||
{4C5035C1-74BA-CF3D-79B1-471C205A490D}.Release|x64.ActiveCfg = Release|x64
|
||||
{4C5035C1-74BA-CF3D-79B1-471C205A490D}.Release|x64.Build.0 = Release|x64
|
||||
{4844151D-E943-C99D-D340-683A26E22FC7}.Debug|Win32.ActiveCfg = Debug|x64
|
||||
{4844151D-E943-C99D-D340-683A26E22FC7}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{4844151D-E943-C99D-D340-683A26E22FC7}.Debug|x64.Build.0 = Debug|x64
|
||||
{4844151D-E943-C99D-D340-683A26E22FC7}.Release|Win32.ActiveCfg = Release|x64
|
||||
{4844151D-E943-C99D-D340-683A26E22FC7}.Release|x64.ActiveCfg = Release|x64
|
||||
{4844151D-E943-C99D-D340-683A26E22FC7}.Release|x64.Build.0 = Release|x64
|
||||
{7F3F1A83-26A1-FAF5-C6B1-977E328C1738}.Debug|Win32.ActiveCfg = Debug|x64
|
||||
{7F3F1A83-26A1-FAF5-C6B1-977E328C1738}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{7F3F1A83-26A1-FAF5-C6B1-977E328C1738}.Debug|x64.Build.0 = Debug|x64
|
||||
|
@ -278,12 +276,6 @@ Global
|
|||
{35BBCD7A-909D-957F-ADA0-C09939E0916F}.Release|Win32.ActiveCfg = Release|x64
|
||||
{35BBCD7A-909D-957F-ADA0-C09939E0916F}.Release|x64.ActiveCfg = Release|x64
|
||||
{35BBCD7A-909D-957F-ADA0-C09939E0916F}.Release|x64.Build.0 = Release|x64
|
||||
{95E593CE-01F6-A02E-334E-1A6C34964FA6}.Debug|Win32.ActiveCfg = Debug|x64
|
||||
{95E593CE-01F6-A02E-334E-1A6C34964FA6}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{95E593CE-01F6-A02E-334E-1A6C34964FA6}.Debug|x64.Build.0 = Debug|x64
|
||||
{95E593CE-01F6-A02E-334E-1A6C34964FA6}.Release|Win32.ActiveCfg = Release|x64
|
||||
{95E593CE-01F6-A02E-334E-1A6C34964FA6}.Release|x64.ActiveCfg = Release|x64
|
||||
{95E593CE-01F6-A02E-334E-1A6C34964FA6}.Release|x64.Build.0 = Release|x64
|
||||
{16F70B29-3F1A-5D36-8FD9-E069D7ED5320}.Debug|Win32.ActiveCfg = Debug|x64
|
||||
{16F70B29-3F1A-5D36-8FD9-E069D7ED5320}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{16F70B29-3F1A-5D36-8FD9-E069D7ED5320}.Debug|x64.Build.0 = Debug|x64
|
||||
|
@ -308,6 +300,30 @@ Global
|
|||
{70A43075-F008-E167-05C8-978BE66FE588}.Release|Win32.ActiveCfg = Release|x64
|
||||
{70A43075-F008-E167-05C8-978BE66FE588}.Release|x64.ActiveCfg = Release|x64
|
||||
{70A43075-F008-E167-05C8-978BE66FE588}.Release|x64.Build.0 = Release|x64
|
||||
{E94D4110-703A-D378-DE0D-1567557A63A4}.Debug|Win32.ActiveCfg = Debug|x64
|
||||
{E94D4110-703A-D378-DE0D-1567557A63A4}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{E94D4110-703A-D378-DE0D-1567557A63A4}.Debug|x64.Build.0 = Debug|x64
|
||||
{E94D4110-703A-D378-DE0D-1567557A63A4}.Release|Win32.ActiveCfg = Release|x64
|
||||
{E94D4110-703A-D378-DE0D-1567557A63A4}.Release|x64.ActiveCfg = Release|x64
|
||||
{E94D4110-703A-D378-DE0D-1567557A63A4}.Release|x64.Build.0 = Release|x64
|
||||
{C580210B-778A-C16C-6EE0-29EAC48E75C7}.Debug|Win32.ActiveCfg = Debug|x64
|
||||
{C580210B-778A-C16C-6EE0-29EAC48E75C7}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{C580210B-778A-C16C-6EE0-29EAC48E75C7}.Debug|x64.Build.0 = Debug|x64
|
||||
{C580210B-778A-C16C-6EE0-29EAC48E75C7}.Release|Win32.ActiveCfg = Release|x64
|
||||
{C580210B-778A-C16C-6EE0-29EAC48E75C7}.Release|x64.ActiveCfg = Release|x64
|
||||
{C580210B-778A-C16C-6EE0-29EAC48E75C7}.Release|x64.Build.0 = Release|x64
|
||||
{E6AC5AD9-BA72-E396-9AF0-5BCEDEE32A44}.Debug|Win32.ActiveCfg = Debug|x64
|
||||
{E6AC5AD9-BA72-E396-9AF0-5BCEDEE32A44}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{E6AC5AD9-BA72-E396-9AF0-5BCEDEE32A44}.Debug|x64.Build.0 = Debug|x64
|
||||
{E6AC5AD9-BA72-E396-9AF0-5BCEDEE32A44}.Release|Win32.ActiveCfg = Release|x64
|
||||
{E6AC5AD9-BA72-E396-9AF0-5BCEDEE32A44}.Release|x64.ActiveCfg = Release|x64
|
||||
{E6AC5AD9-BA72-E396-9AF0-5BCEDEE32A44}.Release|x64.Build.0 = Release|x64
|
||||
{3E562996-8671-6CAC-3138-DDE7DFB70196}.Debug|Win32.ActiveCfg = Debug|x64
|
||||
{3E562996-8671-6CAC-3138-DDE7DFB70196}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{3E562996-8671-6CAC-3138-DDE7DFB70196}.Debug|x64.Build.0 = Debug|x64
|
||||
{3E562996-8671-6CAC-3138-DDE7DFB70196}.Release|Win32.ActiveCfg = Release|x64
|
||||
{3E562996-8671-6CAC-3138-DDE7DFB70196}.Release|x64.ActiveCfg = Release|x64
|
||||
{3E562996-8671-6CAC-3138-DDE7DFB70196}.Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
@ -340,14 +356,16 @@ Global
|
|||
{B8AA38A8-C1F9-7C27-270F-199D0891282C} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{C06FB60B-8A24-163D-DA86-4FAD07F1771F} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{4C5035C1-74BA-CF3D-79B1-471C205A490D} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{4844151D-E943-C99D-D340-683A26E22FC7} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{7F3F1A83-26A1-FAF5-C6B1-977E328C1738} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{244A967D-9EDE-F233-1CFA-A22A1B666A3E} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{35BBCD7A-909D-957F-ADA0-C09939E0916F} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{95E593CE-01F6-A02E-334E-1A6C34964FA6} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{16F70B29-3F1A-5D36-8FD9-E069D7ED5320} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{33835BFB-8F8B-4120-2D5C-973A743F30A5} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{BA21E9D1-3D2F-7622-2E1F-FBF186FF5677} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{70A43075-F008-E167-05C8-978BE66FE588} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{E94D4110-703A-D378-DE0D-1567557A63A4} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{C580210B-778A-C16C-6EE0-29EAC48E75C7} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{E6AC5AD9-BA72-E396-9AF0-5BCEDEE32A44} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{3E562996-8671-6CAC-3138-DDE7DFB70196} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 14
|
||||
VisualStudioVersion = 14.0.24720.0
|
||||
VisualStudioVersion = 14.0.25123.0
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core", "..\..\skia\out\gyp\core.vcxproj", "{B7760B5E-BFA8-486B-ACFD-49E3A6DE8E76}"
|
||||
EndProject
|
||||
|
@ -60,16 +60,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sfntly", "..\..\skia\out\gy
|
|||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "..\..\skia\out\gyp\zlib.vcxproj", "{4C5035C1-74BA-CF3D-79B1-471C205A490D}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib_x86_simd", "..\..\skia\out\gyp\zlib_x86_simd.vcxproj", "{4844151D-E943-C99D-D340-683A26E22FC7}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icuuc", "..\..\skia\out\gyp\icuuc.vcxproj", "{7F3F1A83-26A1-FAF5-C6B1-977E328C1738}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpng", "..\..\skia\out\gyp\libpng.vcxproj", "{244A967D-9EDE-F233-1CFA-A22A1B666A3E}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpng_static", "..\..\skia\out\gyp\libpng_static.vcxproj", "{35BBCD7A-909D-957F-ADA0-C09939E0916F}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpng_static_neon", "..\..\skia\out\gyp\libpng_static_neon.vcxproj", "{95E593CE-01F6-A02E-334E-1A6C34964FA6}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "codec", "..\..\skia\out\gyp\codec.vcxproj", "{16F70B29-3F1A-5D36-8FD9-E069D7ED5320}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "codec_android", "..\..\skia\out\gyp\codec_android.vcxproj", "{33835BFB-8F8B-4120-2D5C-973A743F30A5}"
|
||||
|
@ -78,6 +74,16 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "giflib", "..\..\skia\out\gy
|
|||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "skia_lib", "..\..\skia\out\gyp\skia_lib.vcxproj", "{70A43075-F008-E167-05C8-978BE66FE588}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "raw_codec", "..\..\skia\out\gyp\raw_codec.vcxproj", "{69919814-AF57-8C45-E0DB-2112EE2A146A}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dng_sdk", "..\..\skia\out\gyp\dng_sdk.vcxproj", "{E6AC5AD9-BA72-E396-9AF0-5BCEDEE32A44}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dng_sdk-selector", "..\..\skia\out\gyp\dng_sdk-selector.vcxproj", "{3E562996-8671-6CAC-3138-DDE7DFB70196}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "piex", "..\..\skia\out\gyp\piex.vcxproj", "{E94D4110-703A-D378-DE0D-1567557A63A4}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "piex-selector", "..\..\skia\out\gyp\piex-selector.vcxproj", "{C580210B-778A-C16C-6EE0-29EAC48E75C7}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
|
@ -254,12 +260,6 @@ Global
|
|||
{4C5035C1-74BA-CF3D-79B1-471C205A490D}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{4C5035C1-74BA-CF3D-79B1-471C205A490D}.Release|Win32.Build.0 = Release|Win32
|
||||
{4C5035C1-74BA-CF3D-79B1-471C205A490D}.Release|x64.ActiveCfg = Release|Win32
|
||||
{4844151D-E943-C99D-D340-683A26E22FC7}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{4844151D-E943-C99D-D340-683A26E22FC7}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{4844151D-E943-C99D-D340-683A26E22FC7}.Debug|x64.ActiveCfg = Debug|Win32
|
||||
{4844151D-E943-C99D-D340-683A26E22FC7}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{4844151D-E943-C99D-D340-683A26E22FC7}.Release|Win32.Build.0 = Release|Win32
|
||||
{4844151D-E943-C99D-D340-683A26E22FC7}.Release|x64.ActiveCfg = Release|Win32
|
||||
{7F3F1A83-26A1-FAF5-C6B1-977E328C1738}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{7F3F1A83-26A1-FAF5-C6B1-977E328C1738}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{7F3F1A83-26A1-FAF5-C6B1-977E328C1738}.Debug|x64.ActiveCfg = Debug|Win32
|
||||
|
@ -278,12 +278,6 @@ Global
|
|||
{35BBCD7A-909D-957F-ADA0-C09939E0916F}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{35BBCD7A-909D-957F-ADA0-C09939E0916F}.Release|x64.ActiveCfg = Release|Win32
|
||||
{35BBCD7A-909D-957F-ADA0-C09939E0916F}.Release|Win32.Build.0 = Release|Win32
|
||||
{95E593CE-01F6-A02E-334E-1A6C34964FA6}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{95E593CE-01F6-A02E-334E-1A6C34964FA6}.Debug|x64.ActiveCfg = Debug|Win32
|
||||
{95E593CE-01F6-A02E-334E-1A6C34964FA6}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{95E593CE-01F6-A02E-334E-1A6C34964FA6}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{95E593CE-01F6-A02E-334E-1A6C34964FA6}.Release|x64.ActiveCfg = Release|Win32
|
||||
{95E593CE-01F6-A02E-334E-1A6C34964FA6}.Release|Win32.Build.0 = Release|Win32
|
||||
{16F70B29-3F1A-5D36-8FD9-E069D7ED5320}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{16F70B29-3F1A-5D36-8FD9-E069D7ED5320}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{16F70B29-3F1A-5D36-8FD9-E069D7ED5320}.Debug|x64.ActiveCfg = Debug|Win32
|
||||
|
@ -308,6 +302,36 @@ Global
|
|||
{70A43075-F008-E167-05C8-978BE66FE588}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{70A43075-F008-E167-05C8-978BE66FE588}.Release|Win32.Build.0 = Release|Win32
|
||||
{70A43075-F008-E167-05C8-978BE66FE588}.Release|x64.ActiveCfg = Release|Win32
|
||||
{69919814-AF57-8C45-E0DB-2112EE2A146A}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{69919814-AF57-8C45-E0DB-2112EE2A146A}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{69919814-AF57-8C45-E0DB-2112EE2A146A}.Debug|x64.ActiveCfg = Debug|Win32
|
||||
{69919814-AF57-8C45-E0DB-2112EE2A146A}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{69919814-AF57-8C45-E0DB-2112EE2A146A}.Release|Win32.Build.0 = Release|Win32
|
||||
{69919814-AF57-8C45-E0DB-2112EE2A146A}.Release|x64.ActiveCfg = Release|Win32
|
||||
{E6AC5AD9-BA72-E396-9AF0-5BCEDEE32A44}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{E6AC5AD9-BA72-E396-9AF0-5BCEDEE32A44}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{E6AC5AD9-BA72-E396-9AF0-5BCEDEE32A44}.Debug|x64.ActiveCfg = Debug|Win32
|
||||
{E6AC5AD9-BA72-E396-9AF0-5BCEDEE32A44}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{E6AC5AD9-BA72-E396-9AF0-5BCEDEE32A44}.Release|Win32.Build.0 = Release|Win32
|
||||
{E6AC5AD9-BA72-E396-9AF0-5BCEDEE32A44}.Release|x64.ActiveCfg = Release|Win32
|
||||
{3E562996-8671-6CAC-3138-DDE7DFB70196}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{3E562996-8671-6CAC-3138-DDE7DFB70196}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{3E562996-8671-6CAC-3138-DDE7DFB70196}.Debug|x64.ActiveCfg = Debug|Win32
|
||||
{3E562996-8671-6CAC-3138-DDE7DFB70196}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{3E562996-8671-6CAC-3138-DDE7DFB70196}.Release|Win32.Build.0 = Release|Win32
|
||||
{3E562996-8671-6CAC-3138-DDE7DFB70196}.Release|x64.ActiveCfg = Release|Win32
|
||||
{E94D4110-703A-D378-DE0D-1567557A63A4}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{E94D4110-703A-D378-DE0D-1567557A63A4}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{E94D4110-703A-D378-DE0D-1567557A63A4}.Debug|x64.ActiveCfg = Debug|Win32
|
||||
{E94D4110-703A-D378-DE0D-1567557A63A4}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{E94D4110-703A-D378-DE0D-1567557A63A4}.Release|Win32.Build.0 = Release|Win32
|
||||
{E94D4110-703A-D378-DE0D-1567557A63A4}.Release|x64.ActiveCfg = Release|Win32
|
||||
{C580210B-778A-C16C-6EE0-29EAC48E75C7}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{C580210B-778A-C16C-6EE0-29EAC48E75C7}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{C580210B-778A-C16C-6EE0-29EAC48E75C7}.Debug|x64.ActiveCfg = Debug|Win32
|
||||
{C580210B-778A-C16C-6EE0-29EAC48E75C7}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{C580210B-778A-C16C-6EE0-29EAC48E75C7}.Release|Win32.Build.0 = Release|Win32
|
||||
{C580210B-778A-C16C-6EE0-29EAC48E75C7}.Release|x64.ActiveCfg = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
@ -340,14 +364,17 @@ Global
|
|||
{B8AA38A8-C1F9-7C27-270F-199D0891282C} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{C06FB60B-8A24-163D-DA86-4FAD07F1771F} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{4C5035C1-74BA-CF3D-79B1-471C205A490D} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{4844151D-E943-C99D-D340-683A26E22FC7} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{7F3F1A83-26A1-FAF5-C6B1-977E328C1738} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{244A967D-9EDE-F233-1CFA-A22A1B666A3E} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{35BBCD7A-909D-957F-ADA0-C09939E0916F} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{95E593CE-01F6-A02E-334E-1A6C34964FA6} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{16F70B29-3F1A-5D36-8FD9-E069D7ED5320} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{33835BFB-8F8B-4120-2D5C-973A743F30A5} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{BA21E9D1-3D2F-7622-2E1F-FBF186FF5677} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{70A43075-F008-E167-05C8-978BE66FE588} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{69919814-AF57-8C45-E0DB-2112EE2A146A} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{E6AC5AD9-BA72-E396-9AF0-5BCEDEE32A44} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{3E562996-8671-6CAC-3138-DDE7DFB70196} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{E94D4110-703A-D378-DE0D-1567557A63A4} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
{C580210B-778A-C16C-6EE0-29EAC48E75C7} = {38E1A434-8032-4721-8B8A-F4283BB56DAB}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
|
@ -92,7 +92,7 @@ SkManagedStream* SkManagedStream::duplicate() const {
|
|||
SkManagedStream* SkManagedStream::fork() const {
|
||||
SkAutoTDelete<SkManagedStream> that(fCreateNew(this));
|
||||
that->seek(getPosition());
|
||||
return that.detach();
|
||||
return that.release();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -22,11 +22,11 @@
|
|||
// Xamarin Skia
|
||||
#include "xamarin/sk_x_bitmap.h"
|
||||
#include "xamarin/sk_x_canvas.h"
|
||||
#include "xamarin/sk_x_codec.h"
|
||||
#include "xamarin/sk_x_colorfilter.h"
|
||||
#include "xamarin/sk_x_data.h"
|
||||
#include "xamarin/sk_x_document.h"
|
||||
#include "xamarin/sk_x_image.h"
|
||||
#include "xamarin/sk_x_imagedecoder.h"
|
||||
#include "xamarin/sk_x_imagefilter.h"
|
||||
#include "xamarin/sk_x_maskfilter.h"
|
||||
#include "xamarin/sk_x_paint.h"
|
||||
|
@ -62,7 +62,7 @@ void** KeepSkiaCSymbols ()
|
|||
(void*)sk_colorfilter_unref,
|
||||
(void*)sk_data_new_from_file,
|
||||
(void*)sk_image_encode_specific,
|
||||
(void*)sk_imagedecoder_destructor,
|
||||
(void*)sk_codec_new_from_stream,
|
||||
(void*)sk_imagefilter_croprect_new,
|
||||
(void*)sk_maskfilter_new_emboss,
|
||||
(void*)sk_paint_is_dither,
|
||||
|
|
|
@ -459,32 +459,29 @@ namespace SkiaSharp
|
|||
// load the embedded resource stream
|
||||
using (var resource = assembly.GetManifestResourceStream(imageName))
|
||||
using (var stream = new SKManagedStream(resource))
|
||||
using (var decoder = new SKImageDecoder(stream))
|
||||
using (var codec = SKCodec.Create(stream))
|
||||
using (var paint = new SKPaint())
|
||||
using (var tf = SKTypeface.FromFamilyName("Arial"))
|
||||
{
|
||||
var info = codec.Info;
|
||||
|
||||
paint.IsAntialias = true;
|
||||
paint.TextSize = 14;
|
||||
paint.Typeface = tf;
|
||||
paint.Color = SKColors.Black;
|
||||
|
||||
// read / set decoder settings
|
||||
decoder.DitherImage = true;
|
||||
decoder.PreferQualityOverSpeed = true;
|
||||
decoder.SampleSize = 2;
|
||||
|
||||
// decode the image
|
||||
using (var bitmap = new SKBitmap())
|
||||
using (var bitmap = new SKBitmap(info.Width, info.Height, info.ColorType, info.IsOpaque ? SKAlphaType.Opaque : SKAlphaType.Premul))
|
||||
{
|
||||
var result = decoder.Decode(stream, bitmap);
|
||||
if (result != SKImageDecoderResult.Failure)
|
||||
IntPtr length;
|
||||
var result = codec.GetPixels(bitmap.Info, bitmap.GetPixels(out length));
|
||||
if (result == SKCodecResult.Success || result == SKCodecResult.IncompleteInput)
|
||||
{
|
||||
var info = bitmap.Info;
|
||||
var x = 25;
|
||||
var y = 25;
|
||||
|
||||
canvas.DrawBitmap(bitmap, x, y);
|
||||
x += info.Width + 25;
|
||||
x += bitmap.Info.Width + 25;
|
||||
y += 14;
|
||||
|
||||
canvas.DrawText(string.Format("Result: {0}", result), x, y, paint);
|
||||
|
|
|
@ -29,7 +29,7 @@ namespace Skia.WindowsDesktop.Demo
|
|||
using (var bitmap = new Bitmap(width, height, PixelFormat.Format32bppPArgb))
|
||||
{
|
||||
var data = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, bitmap.PixelFormat);
|
||||
using (var surface = SKSurface.Create(width, height, SKColorType.N_32, SKAlphaType.Premul, data.Scan0, width * 4))
|
||||
using (var surface = SKSurface.Create(width, height, SKImageInfo.PlatformColorType, SKAlphaType.Premul, data.Scan0, width * 4))
|
||||
{
|
||||
var skcanvas = surface.Canvas;
|
||||
sample.Method(skcanvas, width, height);
|
||||
|
|
2
skia
2
skia
|
@ -1 +1 @@
|
|||
Subproject commit f930e7f75b71fef58c3f440f9279bc5506fab303
|
||||
Subproject commit 87dc83ed53e038dbcf23074ce4798415e254eba6
|
|
@ -81,6 +81,9 @@
|
|||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\Tests\SKCodecTest.cs">
|
||||
<Link>SKCodecTest.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\Tests\SKStringTest.cs">
|
||||
<Link>SKStringTest.cs</Link>
|
||||
</Compile>
|
||||
|
@ -99,6 +102,50 @@
|
|||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="..\..\samples\SharedDemo\content-font.ttf">
|
||||
<Link>fonts\content-font.ttf</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="..\..\skia\resources\fonts\Distortable.ttf">
|
||||
<Link>fonts\Distortable.ttf</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="..\..\skia\resources\fonts\Em.ttf">
|
||||
<Link>fonts\Em.ttf</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="..\..\skia\resources\fonts\Funkster.ttf">
|
||||
<Link>fonts\Funkster.ttf</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="..\..\skia\resources\fonts\HangingS.ttf">
|
||||
<Link>fonts\HangingS.ttf</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="..\..\skia\resources\fonts\ReallyBigA.ttf">
|
||||
<Link>fonts\ReallyBigA.ttf</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="..\..\skia\resources\fonts\Roboto2-Regular_NoEmbed.ttf">
|
||||
<Link>fonts\Roboto2-Regular_NoEmbed.ttf</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="..\..\skia\resources\fonts\SpiderSymbol.ttf">
|
||||
<Link>fonts\SpiderSymbol.ttf</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="..\..\skia\resources\fonts\test.ttc">
|
||||
<Link>fonts\test.ttc</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="..\..\samples\SharedDemo\baboon.png">
|
||||
<Link>images\baboon.png</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="..\..\samples\SharedDemo\color-wheel.png">
|
||||
<Link>images\color-wheel.png</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace SkiaSharp.Tests
|
||||
{
|
||||
[TestFixture]
|
||||
public class SKCodecTest : SKTest
|
||||
{
|
||||
[Test]
|
||||
public void MinBufferedBytesNeededHasAValue ()
|
||||
{
|
||||
Assert.IsTrue (SKCodec.MinBufferedBytesNeeded > 0);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CanCreateStreamCodec ()
|
||||
{
|
||||
var stream = new SKFileStream (Path.Combine (PathToImages, "color-wheel.png"));
|
||||
using (var codec = SKCodec.Create (stream)) {
|
||||
Assert.AreEqual (SKEncodedFormat.Png, codec.EncodedFormat);
|
||||
Assert.AreEqual (128, codec.Info.Width);
|
||||
Assert.AreEqual (128, codec.Info.Height);
|
||||
Assert.AreEqual (SKAlphaType.Unpremul, codec.Info.AlphaType);
|
||||
if (IsUnix) {
|
||||
Assert.AreEqual (SKColorType.Rgba8888, codec.Info.ColorType);
|
||||
} else {
|
||||
Assert.AreEqual (SKColorType.Bgra8888, codec.Info.ColorType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CanGetPixels ()
|
||||
{
|
||||
var stream = new SKFileStream (Path.Combine (PathToImages, "baboon.png"));
|
||||
using (var codec = SKCodec.Create (stream)) {
|
||||
var pixels = codec.Pixels;
|
||||
Assert.AreEqual (codec.Info.BytesSize, pixels.Length);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void BitmapDecodesCorrectly ()
|
||||
{
|
||||
byte[] codecPixels;
|
||||
byte[] bitmapPixels;
|
||||
|
||||
using (var codec = SKCodec.Create (new SKFileStream (Path.Combine (PathToImages, "baboon.png")))) {
|
||||
codecPixels = codec.Pixels;
|
||||
}
|
||||
|
||||
using (var bitmap = SKBitmap.Decode (Path.Combine (PathToImages, "baboon.png"))) {
|
||||
bitmapPixels = bitmap.Bytes;
|
||||
}
|
||||
|
||||
CollectionAssert.AreEqual (codecPixels, bitmapPixels);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void BitmapDecodesCorrectlyWithManagedStream ()
|
||||
{
|
||||
byte[] codecPixels;
|
||||
byte[] bitmapPixels;
|
||||
|
||||
var stream = File.OpenRead (Path.Combine(PathToImages, "baboon.png"));
|
||||
using (var codec = SKCodec.Create (new SKManagedStream (stream))) {
|
||||
codecPixels = codec.Pixels;
|
||||
}
|
||||
|
||||
using (var bitmap = SKBitmap.Decode (Path.Combine (PathToImages, "baboon.png"))) {
|
||||
bitmapPixels = bitmap.Bytes;
|
||||
}
|
||||
|
||||
CollectionAssert.AreEqual (codecPixels, bitmapPixels);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -11,13 +11,10 @@ namespace SkiaSharp.Tests
|
|||
[Test]
|
||||
public void StringIsMarshaledCorrectly ()
|
||||
{
|
||||
var filename = Path.GetTempFileName ();
|
||||
|
||||
bitmap.Save (filename, ImageFormat.Png);
|
||||
|
||||
var filestream = new SKFileStream (filename);
|
||||
var decoder = new SKImageDecoder (filestream);
|
||||
string format1 = decoder.FormatName;
|
||||
using (var typeface = SKTypeface.FromFile (Path.Combine ("fonts", "SpiderSymbol.ttf")))
|
||||
{
|
||||
Assert.AreEqual ("SpiderSymbol", typeface.FamilyName, "Family name must be SpiderSymbol");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,8 +31,8 @@ namespace SkiaSharp.Tests
|
|||
{
|
||||
var data = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, bitmap.PixelFormat);
|
||||
|
||||
var surface1 = SKSurface.Create(width, height, SKColorType.N_32, SKAlphaType.Premul, data.Scan0, data.Stride);
|
||||
var surface2 = SKSurface.Create(width, height, SKColorType.N_32, SKAlphaType.Premul, data.Scan0, data.Stride);
|
||||
var surface1 = SKSurface.Create(width, height, SKImageInfo.PlatformColorType, SKAlphaType.Premul, data.Scan0, data.Stride);
|
||||
var surface2 = SKSurface.Create(width, height, SKImageInfo.PlatformColorType, SKAlphaType.Premul, data.Scan0, data.Stride);
|
||||
|
||||
Assert.IsNotNull(surface1);
|
||||
Assert.IsNotNull(surface2);
|
||||
|
@ -51,7 +51,7 @@ namespace SkiaSharp.Tests
|
|||
{
|
||||
var data = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, bitmap.PixelFormat);
|
||||
|
||||
var surface = SKSurface.Create(width, height, SKColorType.N_32, SKAlphaType.Premul, data.Scan0, data.Stride);
|
||||
var surface = SKSurface.Create(width, height, SKImageInfo.PlatformColorType, SKAlphaType.Premul, data.Scan0, data.Stride);
|
||||
|
||||
Assert.IsNotNull(surface);
|
||||
Assert.AreNotEqual(IntPtr.Zero, surface.Handle);
|
||||
|
|
|
@ -8,9 +8,15 @@ namespace SkiaSharp.Tests
|
|||
[TestFixture]
|
||||
public abstract class SKTest
|
||||
{
|
||||
protected const string PathToFonts = "fonts";
|
||||
protected const string PathToImages = "images";
|
||||
|
||||
protected const int width = 100;
|
||||
protected const int height = 100;
|
||||
|
||||
protected static bool IsUnix => Environment.OSVersion.Platform == PlatformID.MacOSX || Environment.OSVersion.Platform == PlatformID.Unix;
|
||||
protected static bool IsWindows => !IsUnix;
|
||||
|
||||
protected Bitmap bitmap;
|
||||
|
||||
[SetUp]
|
||||
|
@ -30,7 +36,7 @@ namespace SkiaSharp.Tests
|
|||
{
|
||||
var data = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, bitmap.PixelFormat);
|
||||
|
||||
using (var surface = SKSurface.Create(width, height, SKColorType.N_32, SKAlphaType.Premul, data.Scan0, data.Stride))
|
||||
using (var surface = SKSurface.Create(width, height, SKImageInfo.PlatformColorType, SKAlphaType.Premul, data.Scan0, data.Stride))
|
||||
{
|
||||
draw(surface);
|
||||
}
|
||||
|
|
|
@ -5,10 +5,8 @@ using System.IO;
|
|||
namespace SkiaSharp.Tests
|
||||
{
|
||||
[TestFixture]
|
||||
public class SKTypefaceTest
|
||||
public class SKTypefaceTest : SKTest
|
||||
{
|
||||
const string PathToFonts = @"../../../../../skia/resources/fonts";
|
||||
|
||||
static readonly string[] ExpectedTablesSpiderFont = new string[] {
|
||||
"FFTM", "GDEF", "OS/2", "cmap", "cvt ", "gasp", "glyf", "head",
|
||||
"hhea", "hmtx", "loca", "maxp", "name", "post",
|
||||
|
|
Загрузка…
Ссылка в новой задаче