|
|
|
@ -28,28 +28,35 @@ namespace Avalonia.Skia |
|
|
|
return new StreamGeometryImpl(); |
|
|
|
} |
|
|
|
|
|
|
|
IBitmapImpl LoadBitmap(byte[] data) |
|
|
|
{ |
|
|
|
var bitmap = SKBitmap.Decode(data); |
|
|
|
if (bitmap == null) |
|
|
|
{ |
|
|
|
throw new ArgumentException("Unable to load bitmap from provided data"); |
|
|
|
} |
|
|
|
|
|
|
|
return new BitmapImpl(bitmap); |
|
|
|
} |
|
|
|
|
|
|
|
public IBitmapImpl LoadBitmap(System.IO.Stream stream) |
|
|
|
{ |
|
|
|
using (var sr = new BinaryReader(stream)) |
|
|
|
using (var s = new SKManagedStream(stream)) |
|
|
|
{ |
|
|
|
return LoadBitmap(sr.ReadBytes((int)stream.Length)); |
|
|
|
using (var codec = SKCodec.Create(s)) |
|
|
|
{ |
|
|
|
var info = codec.Info; |
|
|
|
var bitmap = new SKBitmap(info.Width, info.Height, SKImageInfo.PlatformColorType, 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) |
|
|
|
{ |
|
|
|
return new BitmapImpl(bitmap); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
throw new ArgumentException("Unable to load bitmap from provided data"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public IBitmapImpl LoadBitmap(string fileName) |
|
|
|
{ |
|
|
|
return LoadBitmap(File.ReadAllBytes(fileName)); |
|
|
|
using (var stream = File.OpenRead(fileName)) |
|
|
|
{ |
|
|
|
return LoadBitmap(stream); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public IRenderTargetBitmapImpl CreateRenderTargetBitmap(int width, int height) |
|
|
|
|