public D3D11Renderer(ObservableVideoTrack videoTrack, RendererOptions options) : base(videoTrack, options) { // _factoryDWrite = new DWrite.Factory(DWrite.FactoryType.Shared); var device2D = new D2D1.Device(DeviceDXGI, new D2D1.CreationProperties { DebugLevel = D2D1.DebugLevel.Warning, ThreadingMode = D2D1.ThreadingMode.MultiThreaded, Options = D2D1.DeviceContextOptions.None }); _context2D = new D2D1.DeviceContext(device2D, D2D1.DeviceContextOptions.None); // Load the background image using (var factoryWic = new WIC.ImagingFactory2()) using (var decoder = new WIC.JpegBitmapDecoder(factoryWic)) using (var inputStream = new WIC.WICStream(factoryWic, "background-small.jpg", NativeFileAccess.Read)) using (var formatConverter = new WIC.FormatConverter(factoryWic)) using (var bitmapScaler = new WIC.BitmapScaler(factoryWic)) { decoder.Initialize(inputStream, WIC.DecodeOptions.CacheOnLoad); formatConverter.Initialize(decoder.GetFrame(0), WIC.PixelFormat.Format32bppPBGRA); bitmapScaler.Initialize(formatConverter, VideoFrameWidth, VideoFrameHeight, WIC.BitmapInterpolationMode.Fant); _backgroundBitmap = D2D1.Bitmap1.FromWicBitmap(_context2D, bitmapScaler); } // Create render target _ballEllipse = new D2D1.Ellipse { RadiusX = VideoFrameWidth / 20f, RadiusY = VideoFrameWidth / 20f }; _ballBrush = new D2D1.SolidColorBrush(_context2D, new RawColor4(1f, 1f, 0f, 1f)); }
public static WIC.FormatConverter CreateWicImage(WIC.ImagingFactory wic, string filename) { using (var decoder = new WIC.JpegBitmapDecoder(wic)) using (var decodeStream = new WIC.WICStream(wic, filename, NativeFileAccess.Read)) { decoder.Initialize(decodeStream, WIC.DecodeOptions.CacheOnDemand); using (var decodeFrame = decoder.GetFrame(0)) { var converter = new WIC.FormatConverter(wic); converter.Initialize(decodeFrame, WIC.PixelFormat.Format32bppPBGRA); return(converter); } } }
/// <summary> /// SharpDX WIC sample. Encode to JPG and decode. /// </summary> static void Main() { const int width = 512; const int height = 512; const string filename = "output.jpg"; var factory = new ImagingFactory(); WICStream stream = null; // ------------------------------------------------------ // Encode a JPG image // ------------------------------------------------------ // Create a WIC outputstream if (File.Exists(filename)) File.Delete(filename); stream = new WICStream(factory, filename, NativeFileAccess.Write); // Initialize a Jpeg encoder with this stream var encoder = new JpegBitmapEncoder(factory); encoder.Initialize(stream); // Create a Frame encoder var bitmapFrameEncode = new BitmapFrameEncode(encoder); bitmapFrameEncode.Options.ImageQuality = 0.8f; bitmapFrameEncode.Initialize(); bitmapFrameEncode.SetSize(width, height); var guid = PixelFormat.Format24bppBGR; bitmapFrameEncode.SetPixelFormat(ref guid); // Write a pseudo-plasma to a buffer int stride = PixelFormat.GetStride(PixelFormat.Format24bppBGR, width); var bufferSize = height * stride; var buffer = new DataStream(bufferSize, true, true); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { buffer.WriteByte((byte)(x / 2.0 + 20.0 * Math.Sin(y / 40.0))); buffer.WriteByte((byte)(y / 2.0 + 30.0 * Math.Sin(x / 80.0))); buffer.WriteByte((byte)(x / 2.0)); } } // Copy the pixels from the buffer to the Wic Bitmap Frame encoder bitmapFrameEncode.WritePixels(512, new DataRectangle(buffer.DataPointer, stride)); // Commit changes bitmapFrameEncode.Commit(); encoder.Commit(); bitmapFrameEncode.Dispose(); encoder.Dispose(); stream.Dispose(); // ------------------------------------------------------ // Decode the previous JPG image // ------------------------------------------------------ // Read input stream = new WICStream(factory, filename, NativeFileAccess.Read); var decoder = new JpegBitmapDecoder(factory); decoder.Initialize(stream, DecodeOptions.CacheOnDemand); var bitmapFrameDecode = decoder.GetFrame(0); var queryReader = bitmapFrameDecode.MetadataQueryReader; // Dump MetadataQueryreader queryReader.Dump(Console.Out); queryReader.Dispose(); bitmapFrameDecode.Dispose(); decoder.Dispose(); stream.Dispose(); // Dispose factory.Dispose(); System.Diagnostics.Process.Start(Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, filename))); }