Example #1
0
        private void DetectImageFormat()
        {
            _formatDetected = false;
            if (!_dataAvailable)
            {
                return;
            }
            _surfaceDesc =
                (NativeMethods.DDSURFACEDESC2)
                Marshal.PtrToStructure(new IntPtr(_lpStartAddress.ToInt64() + 4), typeof(NativeMethods.DDSURFACEDESC2));
            switch (_surfaceDesc.ddpfPixelFormat.dwRGBBitCount)
            {
            case 16:
                _format = PixelFormat.Format16bppRgb555;
                break;

            case 24:
                _format = PixelFormat.Format24bppRgb;
                break;

            case 32:
                _format = PixelFormat.Format32bppRgb;
                break;
            }
            if (_format != PixelFormat.Undefined)
            {
                _formatDetected = true;
            }
        }
Example #2
0
 private void CloseSM()
 {
     if (_hFileMappingObject.Equals(IntPtr.Zero))
     {
         return;
     }
     NativeMethods.UnmapViewOfFile(_lpStartAddress);
     NativeMethods.CloseHandle(_hFileMappingObject);
     _dataAvailable      = false;
     _format             = PixelFormat.Undefined;
     _formatDetected     = false;
     _hFileMappingObject = IntPtr.Zero;
     _lpStartAddress     = IntPtr.Zero;
     _surfaceDesc        = new NativeMethods.DDSURFACEDESC2();
 }
        private ImageBrush CreateImageBrush()
        {
            ImageBrush brush = null;

            if (_display.TextureMemory.IsDataAvailable)
            {
                NativeMethods.DDSURFACEDESC2 surfaceDesc = (NativeMethods.DDSURFACEDESC2)_display.TextureMemory.MarshalTo(typeof(NativeMethods.DDSURFACEDESC2), 4);
                PixelFormat format = PixelFormats.Bgr32;  //.Format32bppRgb;
                switch (surfaceDesc.ddpfPixelFormat.dwRGBBitCount)
                {
                case 16:
                    format = PixelFormats.Bgr555;     // PixelFormat.Format16bppRgb555;
                    break;

                case 24:
                    format = PixelFormats.Bgr24;     // PixelFormat.Format24bppRgb;
                    break;

                case 32:
                    format = PixelFormats.Bgr32;     // PixelFormat.Format32bppRgb;
                    break;
                }

                int offset = (surfaceDesc.lPitch * (int)_display.TextureRect.Y) + ((int)_display.TextureRect.X * (surfaceDesc.ddpfPixelFormat.dwRGBBitCount / 8));

                BitmapSource image = BitmapSource.Create((int)_display.TextureRect.Width,
                                                         (int)_display.TextureRect.Height,
                                                         96,
                                                         96,
                                                         format,
                                                         null,
                                                         _display.TextureMemory.GetPointer(offset + 4 + surfaceDesc.dwSize),
                                                         surfaceDesc.lPitch * (int)_display.TextureRect.Height,
                                                         surfaceDesc.lPitch);

                brush                       = new ImageBrush(image);
                _defaultImage               = new ImageBrush(image);
                _defaultImage.Stretch       = Stretch.Fill;
                _defaultImage.TileMode      = TileMode.None;
                _defaultImage.Viewport      = new Rect(0d, 0d, 1d, 1d);
                _defaultImage.ViewportUnits = BrushMappingMode.RelativeToBoundingBox;
            }
            return(brush);
        }