private static byte[] StreamToBase64Bytes(SKDynamicMemoryWStream mstream) { var str = mstream.DetachAsStream(); var bts = new byte[str.Length]; str.Read(bts, str.Length); return(bts); }
private static string StreamToBase64String(SKDynamicMemoryWStream mstream) { var str = mstream.DetachAsStream(); var bts = new byte[str.Length]; str.Read(bts, str.Length); return(Convert.ToBase64String(bts)); }
static SKDocument CreateDocument(out IntPtr streamHandle) { var stream = new SKDynamicMemoryWStream(); streamHandle = stream.Handle; return(SKDocument.CreatePdf(stream, new SKDocumentPdfMetadata())); }
public static byte[] WebpToPng(byte[] webpData) { using (var origBmp = SKBitmap.Decode(webpData)) using (var stream = new SKDynamicMemoryWStream()) { origBmp.Encode(stream, SKEncodedImageFormat.Png, 100); return(stream.DetachAsData().ToArray()); } }
public byte[] Save() { using (var strm = new SKDynamicMemoryWStream()) { SaveToStream(strm); var data = strm.CopyToData(); return(data.ToArray()); } }
private byte[] Convert(byte[] orig, SKEncodedImageFormat format) { using (var origBmp = SKBitmap.Decode(orig)) using (var stream = new SKDynamicMemoryWStream()) { origBmp.Encode(stream, format, 100); return(stream.DetachAsData().ToArray()); } }
public string GetThumbnail(SKBitmap image, int width, int height) { using (var scaledImage = ResizeImage(image, width, height)) { SKBitmap.Resize(scaledImage, image, resizeMethod); using (var memoryStream = new SKDynamicMemoryWStream()) { scaledImage.Encode(memoryStream, SKEncodedImageFormat.Jpeg, quality); return(Convert.ToBase64String(memoryStream.DetachAsData().ToArray())); } } }
public void ManagedStreamIsNotCollectedPrematurely() { using (var document = CreateDocument(out var handle)) { var paintList = new List <SKPaint>(); for (var index = 0; index < 10; index++) { var fontStream = File.OpenRead(Path.Combine(PathToFonts, "Roboto2-Regular_NoEmbed.ttf")); var typeface = SKTypeface.FromStream(fontStream); var paint = new SKPaint { Typeface = typeface }; paintList.Add(paint); } using (var pageCanvas = document.BeginPage(792, 842)) { foreach (var paint in paintList) { for (var i = 0; i < 100; i++) { pageCanvas.DrawText("Text", 0, 5 * i, paint); } } document.EndPage(); } CollectGarbage(); Assert.True(SKObject.GetInstance <SKDynamicMemoryWStream>(handle, out _)); document.Close(); } SKDocument CreateDocument(out IntPtr streamHandle) { var stream = new SKDynamicMemoryWStream(); streamHandle = stream.Handle; return(SKDocument.CreatePdf(stream, new SKDocumentPdfMetadata())); } }
public static (byte[] result, string error) BinaryCutCompress(byte[] base64Image, double percent, int?minWidth = null, int?maxWidth = null) { try { using (var bitmap = SKBitmap.Decode(base64Image)) { if (bitmap == null) { return(null, "cut - base64Image is null."); } if (minWidth != null && bitmap.Width < minWidth) { percent = 1; } var isWide = bitmap.Width > bitmap.Height; var num = isWide ? bitmap.Height : bitmap.Width; var p_num = 1.0; if (maxWidth != null && bitmap.Width > maxWidth) { p_num = 1 * (maxWidth.GetValueOrDefault() / (double)bitmap.Width); } var pad = ((isWide ? bitmap.Width : bitmap.Height) - num) / 2; var ex_num = (int)(p_num * num); using (var newBitmap = new SKBitmap(ex_num, ex_num)) { try { using (var canvas = new SKCanvas(newBitmap)) { canvas.Scale((float)p_num); canvas.DrawBitmap(bitmap, isWide ? -pad : 0, isWide ? 0 : -pad); } using (var mstream = new SKDynamicMemoryWStream()) if (newBitmap.Encode(mstream, SKEncodedImageFormat.Jpeg, (int)(100 * (percent > 1 ? 1 : percent)))) { return(StreamToBase64Bytes(mstream), null); } return(null, "cut - encode picture failed : Encode action failed."); } catch (Exception e) { return(null, "cut - draw canvas failed : " + e.Message); } } } } catch (Exception e) { return(null, "cut - draw picture failed : " + e.Message); } }
private Response RenderMap(dynamic parameters) { var gameServer = this.servers.OfType <IGameServer>().FirstOrDefault(s => s.Id == (byte)parameters.serverId); var map = gameServer?.ServerInfo.Maps.FirstOrDefault(m => m.MapNumber == (short)parameters.mapId); if (map == null) { Log.Warn($"requested map not available. map number: {parameters.mapId}; server id: {parameters.serverId}"); return(null); } var terrain = new GameMapTerrain(map.MapName, map.TerrainData); using (var bitmap = new SkiaSharp.SKBitmap(0x100, 0x100)) { for (int y = 0; y < 0x100; y++) { for (int x = 0; x < 0x100; x++) { var color = SKColors.Black; if (terrain.SafezoneMap[y, x]) { color = SKColors.Gray; } else if (terrain.WalkMap[y, x]) { color = SKColors.SpringGreen; } bitmap.SetPixel(x, y, color); } } using (var memoryStream = new SKDynamicMemoryWStream()) { if (SKPixmap.Encode(memoryStream, bitmap, SKEncodedImageFormat.Png, 100)) { return(this.Response.FromStream(memoryStream.DetachAsData().AsStream, "image/png")); } } return(null); } }
private Result GetImagePart(Mnemonic expression, IRuntime runtime) { if ( runtime.GetVariable("arrayOfBinaryData").Get(runtime) is String arrayImage && runtime.GetVariable("left").Get(runtime) is Number a && runtime.GetVariable("top").Get(runtime) is Number b && runtime.GetVariable("right").Get(runtime) is Number c && runtime.GetVariable("bottom").Get(runtime) is Number d ) { var binaryData = Convert.FromBase64String(arrayImage.Value); //arrayImage //.Select(e => e as Number) //.Select(n => n.ValueAsByte) //.ToArray(); var resourceBitmap = SKBitmap.Decode(binaryData); var bmp = new SKBitmap(); resourceBitmap.ExtractSubset(bmp, new SKRectI(a.ValueAsInt, b.ValueAsInt, c.ValueAsInt, d.ValueAsInt)); SKDynamicMemoryWStream ms = new SKDynamicMemoryWStream(); var data = bmp.Encode(SKEncodedImageFormat.Png, 100); var subimage = Convert.ToBase64String(data.ToArray()); //LoplaList loplaList = new LoplaList(); //foreach(var dbyte in data.ToArray()) //{ // loplaList.Add(new Number(dbyte)); //} //return new Result(loplaList); return(new Result(new String(subimage))); } return(new Result()); }
private Stream RenderMap(IGameMapInfo map) { var terrain = new GameMapTerrain(map.MapName, map.TerrainData); using (var bitmap = new SkiaSharp.SKBitmap(0x100, 0x100)) { for (int y = 0; y < 0x100; y++) { for (int x = 0; x < 0x100; x++) { var color = SKColors.Black; if (terrain.SafezoneMap[y, x]) { color = SKColors.Gray; } else if (terrain.WalkMap[y, x]) { color = SKColors.SpringGreen; } else { // we use the default color. } bitmap.SetPixel(x, y, color); } } using (var memoryStream = new SKDynamicMemoryWStream()) { if (SKPixmap.Encode(memoryStream, bitmap, SKEncodedImageFormat.Png, 100)) { return(memoryStream.DetachAsData().AsStream()); } } return(null); } }
public void StreamIsNotCollectedPrematurely() { VerifyImmediateFinalizers(); DoWork(out var handle); CollectGarbage(); Assert.False(SKObject.GetInstance <SKDynamicMemoryWStream>(handle, out _)); void DoWork(out IntPtr streamHandle) { using (var document = CreateDocument(out streamHandle)) { using (var pageCanvas = document.BeginPage(792, 842)) { document.EndPage(); } CollectGarbage(); Assert.True(SKObject.GetInstance <SKDynamicMemoryWStream>(handle, out _)); document.Close(); } Assert.True(SKObject.GetInstance <SKDynamicMemoryWStream>(handle, out _)); } SKDocument CreateDocument(out IntPtr streamHandle) { var stream = new SKDynamicMemoryWStream(); streamHandle = stream.Handle; return(SKDocument.CreatePdf(stream, new SKDocumentPdfMetadata())); } }
public static (byte[] result, string error) BinaryCompress(byte[] base64Image, double percent, int?minWidth = null) { try { using (var bitmap = SKBitmap.Decode(base64Image)) { if (bitmap == null) { return(null, "base64Image is null."); } if (minWidth != null && bitmap.Width < minWidth) { percent = 1; } using (var mstream = new SKDynamicMemoryWStream()) // Compress Image if (bitmap.Encode(mstream, SKEncodedImageFormat.Jpeg, (int)(100 * (percent > 1 ? 1 : percent)))) { return(StreamToBase64Bytes(mstream), null); } return(null, "encode picture failed : Encode action failed."); } } catch (Exception e) { return(null, "draw picture failed : " + e.Message); } }
public void ManagedStreamIsNotCollectedPrematurely() { using (var stream = new SKDynamicMemoryWStream()) using (SKDocument document = SKDocument.CreatePdf(stream, new SKDocumentPdfMetadata())) { var paintList = new List <SKPaint>(); for (int index = 0; index < 10; index++) { Stream fontStream = File.OpenRead(Path.Combine(PathToFonts, "Roboto2-Regular_NoEmbed.ttf")); SKTypeface typeface = SKTypeface.FromStream(fontStream); SKPaint paint = new SKPaint { Typeface = typeface }; paintList.Add(paint); } using (SKCanvas pageCanvas = document.BeginPage(792, 842)) { foreach (var paint in paintList) { for (int i = 0; i < 100; i++) { pageCanvas.DrawText("Text", 0, 5 * i, paint); } } document.EndPage(); } GC.Collect(); document.Close(); } }
static void Main(string[] args) { // load some routing data and build a routing network. var routerDb = new RouterDb(); using var stream = File.Open(@"C:\Users\yukik\Downloads\zuid-holland-latest.osm.pbf", FileMode.Open, FileAccess.Read); var src = new PBFOsmStreamSource(stream); routerDb.LoadOsmData(src, Vehicle.Bicycle); // create the network for Bicycle only. // create a router. var router = new Router(routerDb); // get a profile. var profile = Vehicle.Bicycle.Fastest(); // the default OSM Bicycle profile. // create a routerpoint from a location. // snaps the given location to the nearest routable edge. var start = router.Resolve(profile, 52.154820f, 4.479307f); var end = router.Resolve(profile, 52.160942f, 4.495821f); // calculate a route. var route = router.Calculate(profile, start, end); var retList = new List <(float lat, float lon, float time, float distance, string name)>(); // Create the path var path = new SKPath(); var firstShape = route.Shape[0]; path.MoveTo(5, 5); var strokePaint = new SKPaint { Style = SKPaintStyle.Stroke, Color = SKColors.Black, StrokeWidth = 1 }; int scale = 50000; for (int i = 1; i < route.ShapeMeta.Length - 2; i++) { var meta = route.ShapeMeta[i]; var strn = meta.Attributes.TryGetValue("name", out var desc); var current = route.Shape[meta.Shape]; if (meta.Shape > 0 && route.ShapeMeta[i - 1].Attributes.TryGetValue("name", out var v) && v == desc) { continue; } if (route.Shape.Length <= meta.Shape + 1) { continue; } var lat = (current.Latitude - firstShape.Latitude) * scale; var lon = (current.Longitude - firstShape.Longitude) * scale; retList.Add((lat, lon, meta.Time - retList.LastOrDefault().time, meta.Distance - retList.LastOrDefault().distance, desc)); path.LineTo(lon, -lat); } var rect = path.Bounds; var translationMatrix = SKMatrix.CreateTranslation(Math.Abs(path.Bounds.Left) + 20, Math.Abs(path.Bounds.Top) + 20); path.Transform(translationMatrix); rect.Inflate(100, 10); using var outStream = new SKDynamicMemoryWStream(); var svg = SKSvgCanvas.Create(rect, outStream); svg.DrawPath(path, strokePaint); foreach (var(lat, lon, time, distance, name) in retList) { var point = new SKPoint(lon, -lat); svg.DrawText($"{name} ({TimeSpan.FromSeconds(time).Humanize()} - {Math.Round(distance)} meter) ", translationMatrix.MapPoint(point), strokePaint); } var s = outStream.DetachAsData(); File.WriteAllBytes("test.svg", s.ToArray()); Console.WriteLine("Hello World!"); }