public SetPixel ( int x, int y, |
||
x | int | |
y | int | |
color | ||
return | void |
public void Save(string filename, SkiaSharp.SKEncodedImageFormat format) { if (Disposed) { return; } SkiaSharp.SKBitmap bitmap = new SkiaSharp.SKBitmap(this.Width, this.Height, false); int w = Width; int h = Height; var colorPtr = this.GetColors(); for (int y = 0; y < h; y++) { for (int x = 0; x < w; x++) { var col = *(colorPtr + x + (h - 1 - y) * h); bitmap.SetPixel(x, y, new SkiaSharp.SKColor(col.R, col.G, col.B, col.A)); } } var img = SkiaSharp.SKImage.FromBitmap(bitmap); var data = img.Encode(format, 100); System.IO.File.WriteAllBytes(filename, data.ToArray()); img.Dispose(); bitmap.Dispose(); }
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); } }
public BitmapHelper(string path) { Bitmap bitmap; try { bitmap = Bitmap.Decode(File.OpenRead(path)); } catch (Exception) { bitmap = new Bitmap(10, 10); for (int i = 0; i < 10; i++) { for (int w = 0; w < 10; w++) { bitmap.SetPixel(i, w, SKColors.White); } } } IntPtr ptr = bitmap.GetPixels(); int bytes = Math.Abs(bitmap.RowBytes) * bitmap.Height; byte[] rgbValues = new byte[bytes]; System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes); colors = new SKColor[bitmap.Width, bitmap.Height]; for (int counter = 0; counter < rgbValues.Length; counter += 4) { int i_am = counter / 4; colors[i_am % bitmap.Width, i_am / bitmap.Width] = new SKColor( rgbValues[counter + 2], rgbValues[counter + 1], rgbValues[counter + 0], rgbValues[counter + 3]); } bitmap.Dispose(); }
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); } }