Пример #1
0
        public static Task <BitmapSource> ToBitmapSource(this DDSMipMap mipmap, int mipmapIndex = 0, Dispatcher targetDispatcher = null)
        {
            Debug.Assert(mipmap != null);
            Debug.Assert(mipmapIndex >= 0 && mipmapIndex < mipmap.MipmapData.Count);

            var width  = (int)mipmap.Width;
            var height = (int)mipmap.Height;


            if (mipmapIndex > 0)
            {
                width  = width / (width * 2);
                height = height / (height * 2);
            }

            var frameData = mipmap.MipmapData[mipmapIndex];

            if (targetDispatcher == null)
            {
                var writable = new WriteableBitmap(width, height, 96, 96, PixelFormats.Bgra32, null);
                writable.WritePixels(new Int32Rect(0, 0, width, height), frameData, 4 * width, 0);

                return(Task.FromResult((BitmapSource)writable));
            }

            return(targetDispatcher.InvokeAsync(() =>
            {
                var writable = new WriteableBitmap(width, height, 96, 96, PixelFormats.Bgra32, null);
                writable.WritePixels(new Int32Rect(0, 0, width, height), frameData, 4 * width, 0);

                return (BitmapSource)writable;
            }).Task);
        }
Пример #2
0
        internal void AddFrame(DDSMipMap mipMap)
        {
            if (mipMap == null)
            {
                return;
            }

            _depthFrames.Add(mipMap);
        }