コード例 #1
0
        public static unsafe DllImports.StoryboardData GetStoryboardData(long position, int tileId)
        {
            const float TilePreviewTimeScale = 10.0f / 3.0f;

            if (!GetInstance().storyboardReaders.ContainsKey(tileId))
            {
                return new DllImports.StoryboardData
                       {
                           isStoryboardReaderReady = 0,
                           isFrameReady            = 0,
                           duration = 0
                       }
            }
            ;

            var subSkBitmap = GetInstance().storyboardReaders[tileId]
                              .GetFrame(TimeSpan.FromMilliseconds(position) * TilePreviewTimeScale);

            if (subSkBitmap == null)
            {
                return new DllImports.StoryboardData
                       {
                           isStoryboardReaderReady = 1,
                           isFrameReady            = 0,
                           duration = (long)(GetInstance().storyboardReaders[tileId].Duration().TotalMilliseconds /
                                             TilePreviewTimeScale)
                       }
            }
            ;

            return(new DllImports.StoryboardData
            {
                isStoryboardReaderReady = 1,
                isFrameReady = 1,
                frame = new DllImports.SubBitmap
                {
                    rectLeft = subSkBitmap.SkRect.Left,
                    rectRight = subSkBitmap.SkRect.Right,
                    rectTop = subSkBitmap.SkRect.Top,
                    rectBottom = subSkBitmap.SkRect.Bottom,
                    bitmapWidth = subSkBitmap.Bitmap.Width,
                    bitmapHeight = subSkBitmap.Bitmap.Height,
                    bitmapInfoColorType = (int)SkiaUtils.ConvertToFormat(subSkBitmap.Bitmap.Info.ColorType),
                    bitmapBytes = (byte *)subSkBitmap.Bitmap.GetPixels(),
                    bitmapHash = subSkBitmap.SkRect.GetHashCode()
                },
                duration = (long)(GetInstance().storyboardReaders[tileId].Duration().TotalMilliseconds /
                                  TilePreviewTimeScale)
            });
        }
    }
}
コード例 #2
0
 private static unsafe DllImports.SubBitmap GetFrame(SubSkBitmap subSkBitmap)
 {
     return(new DllImports.SubBitmap
     {
         rectLeft = subSkBitmap.SkRect.Left,
         rectRight = subSkBitmap.SkRect.Right,
         rectTop = subSkBitmap.SkRect.Top,
         rectBottom = subSkBitmap.SkRect.Bottom,
         bitmapWidth = subSkBitmap.Bitmap.Width,
         bitmapHeight = subSkBitmap.Bitmap.Height,
         bitmapInfoColorType = (int)SkiaUtils.ConvertToFormat(subSkBitmap.Bitmap.Info.ColorType),
         bitmapBytes = (byte *)subSkBitmap.Bitmap.GetPixels(),
         bitmapHash = subSkBitmap.SkRect.GetHashCode() % (int.MaxValue - 1) + 1 // let 0 be invalid hash value
     });
 }