public static void Draw(SKCanvas canvas, ImageStyle symbolStyle, Point destination, SymbolCache symbolCache, float opacity, double mapRotation) { if (symbolStyle.BitmapId < 0) { return; } var bitmap = symbolCache.GetOrCreate(symbolStyle.BitmapId); // Calc offset (relative or absolute) var offsetX = symbolStyle.SymbolOffset.IsRelative ? bitmap.Width * symbolStyle.SymbolOffset.X : symbolStyle.SymbolOffset.X; var offsetY = symbolStyle.SymbolOffset.IsRelative ? bitmap.Height * symbolStyle.SymbolOffset.Y : symbolStyle.SymbolOffset.Y; var rotation = (float)symbolStyle.SymbolRotation; if (symbolStyle.RotateWithMap) { rotation += (float)mapRotation; } switch (bitmap.Type) { case BitmapType.Bitmap: BitmapHelper.RenderBitmap(canvas, bitmap.Bitmap, (float)destination.X, (float)destination.Y, rotation, (float)offsetX, (float)offsetY, opacity: opacity, scale: (float)symbolStyle.SymbolScale); break; case BitmapType.Svg: BitmapHelper.RenderSvg(canvas, bitmap.Svg, (float)destination.X, (float)destination.Y, rotation, (float)offsetX, (float)offsetY, opacity: opacity, scale: (float)symbolStyle.SymbolScale); break; case BitmapType.Sprite: var sprite = bitmap.Sprite; if (sprite.Data == null) { var bitmapAtlas = symbolCache.GetOrCreate(sprite.Atlas); sprite.Data = bitmapAtlas.Bitmap.Subset(new SKRectI(sprite.X, sprite.Y, sprite.X + sprite.Width, sprite.Y + sprite.Height)); } BitmapHelper.RenderBitmap(canvas, (SKImage)sprite.Data, (float)destination.X, (float)destination.Y, rotation, (float)offsetX, (float)offsetY, opacity: opacity, scale: (float)symbolStyle.SymbolScale); break; } }
private static void DrawPointWithBitmapStyle(SKCanvas canvas, SymbolStyle symbolStyle, Point destination, SymbolCache symbolCache) { var bitmap = symbolCache.GetOrCreate(symbolStyle.BitmapId); BitmapHelper.RenderBitmap(canvas, bitmap.Bitmap, (float)destination.X, (float)destination.Y, (float)symbolStyle.SymbolRotation, (float)symbolStyle.SymbolOffset.X, (float)symbolStyle.SymbolOffset.Y, opacity: (float)symbolStyle.Opacity, scale: (float)symbolStyle.SymbolScale); }
private static void DrawPointWithBitmapStyle(SKCanvas canvas, SymbolStyle symbolStyle, Point destination, SymbolCache symbolCache, float opacity) { var bitmap = symbolCache.GetOrCreate(symbolStyle.BitmapId, false); // Calc offset (relative or absolut) var offsetX = symbolStyle.SymbolOffset.IsRelative ? bitmap.Width * symbolStyle.SymbolOffset.X : symbolStyle.SymbolOffset.X; var offsetY = symbolStyle.SymbolOffset.IsRelative ? bitmap.Height * symbolStyle.SymbolOffset.Y : symbolStyle.SymbolOffset.Y; BitmapHelper.RenderBitmap(canvas, bitmap.Bitmap, (float)destination.X, (float)destination.Y, (float)symbolStyle.SymbolRotation, (float)offsetX, (float)offsetY, opacity: opacity, scale: (float)symbolStyle.SymbolScale); }
public static void DrawAsBitmap(SKCanvas canvas, LabelStyle style, IFeature feature, float x, float y, float layerOpacity) { var text = style.GetLabelText(feature); var key = text + "_" + style.Font.FontFamily + "_" + style.Font.Size + "_" + (float)style.Font.Size + "_" + style.BackColor + "_" + style.ForeColor; if (!LabelCache.Keys.Contains(key)) { LabelCache[key] = new BitmapInfo { Bitmap = CreateLabelAsBitmap(style, text, layerOpacity) } } ; var info = LabelCache[key]; BitmapHelper.RenderBitmap(canvas, info.Bitmap, (int)Math.Round(x), (int)Math.Round(y), offsetX: (float)style.Offset.X, offsetY: (float)-style.Offset.Y, horizontalAlignment: style.HorizontalAlignment, verticalAlignment: style.VerticalAlignment); }