Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }