public static void Main() { var wicFactory = new IWICImagingFactory(); D2D1.D2D1CreateFactory(FactoryType.SingleThreaded, out ID2D1Factory d2dFactory); const string fileName = "output.jpg"; const int width = 512; const int height = 512; var rectangleGeometry = d2dFactory.CreateRoundedRectangleGeometry(new RoundedRectangle(new RectangleF(128, 128, width - 128 * 2, height - 128 * 2), 32, 32)); var wicBitmap = wicFactory.CreateBitmap(width, height, Vortice.DirectX.WIC.PixelFormat.Format32bppBGR, BitmapCreateCacheOption.CacheOnLoad); var renderTargetProperties = new RenderTargetProperties(new Vortice.DirectX.Direct2D.PixelFormat(Format.Unknown, Vortice.DirectX.Direct2D.AlphaMode.Unknown)); var d2dRenderTarget = d2dFactory.CreateWicBitmapRenderTarget(wicBitmap, renderTargetProperties); var solidColorBrush = d2dRenderTarget.CreateSolidColorBrush(new Color4(1.0f)); d2dRenderTarget.BeginDraw(); d2dRenderTarget.Clear(new Color4(0.0f, 0.0f, 0.0f, 1.0f)); d2dRenderTarget.FillGeometry(rectangleGeometry, solidColorBrush, null); d2dRenderTarget.EndDraw(); if (File.Exists(fileName)) { File.Delete(fileName); } using (var stream = wicFactory.CreateStream()) { stream.Initialize(fileName, FileAccess.Write); // Initialize a Jpeg encoder with this stream using (var encoder = wicFactory.CreateEncoder(ContainerFormat.Jpeg)) { encoder.Initialize(stream); // Create a Frame encoder var props = new SharpGen.Runtime.Win32.PropertyBag(IntPtr.Zero); var bitmapFrameEncode = encoder.CreateNewFrame(props); bitmapFrameEncode.Initialize(null); bitmapFrameEncode.SetSize(width, height); var pixelFormatGuid = Vortice.DirectX.WIC.PixelFormat.FormatDontCare; bitmapFrameEncode.SetPixelFormat(ref pixelFormatGuid); bitmapFrameEncode.WriteSource(wicBitmap, null); bitmapFrameEncode.Commit(); encoder.Commit(); } } using (var app = new TestApplication()) { app.Run(); } }
private void CreateWindow(string className) { if (className == null) { throw new Exception("class_name is null"); } if (className == String.Empty) { throw new Exception("class_name is empty"); } _wndProcDelegate = CustomWndProc; gcHandle = GCHandle.Alloc(_wndProcDelegate); WNDCLASS windClass = new WNDCLASS { lpszClassName = className, lpfnWndProc = Marshal.GetFunctionPointerForDelegate(_wndProcDelegate) }; ushort classAtom = User32.RegisterClassW(ref windClass); int lastError = Marshal.GetLastWin32Error(); if (classAtom == 0 && lastError != ERROR_CLASS_ALREADY_EXISTS) { throw new Exception("Could not register window class"); } uint extendedStyle = (uint)( WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_LTRREADING | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_TOOLWINDOW); const uint style = (uint)( WindowStyles.WS_CLIPSIBLINGS | WindowStyles.WS_CLIPCHILDREN | WindowStyles.WS_POPUP); // Create window Handle = User32.CreateWindowExW( extendedStyle, className, className, style, 0, 0, 0, 0, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero ); if (Handle == IntPtr.Zero) { return; } var styles = (int)User32.GetWindowLongPtr(Handle, WindowLongFlags.GWL_EXSTYLE); //var owner = User32.GetWindow(_parentHandle, 4); //User32.SetWindowLong(Handle, GetWindowLongFlags.GWL_HWNDPARENT, owner); styles |= (int)(WindowExStyles.WS_EX_LAYERED | WindowExStyles.WS_EX_NOACTIVATE | WindowExStyles.WS_EX_NOPARENTNOTIFY); if (!_decorator.Resizable) { styles |= (int)WindowExStyles.WS_EX_TRANSPARENT; } User32.SetWindowLongPtr(Handle, WindowLongFlags.GWL_EXSTYLE, new IntPtr(styles)); _screenDC = User32.GetDC(IntPtr.Zero); _memDC = Gdi32.CreateCompatibleDC(_screenDC); D2D1.D2D1CreateFactory(FactoryType.SingleThreaded, out _d2dFactory); }
public WinFormiumRenderHandlerUsingDeviceContext(Formium owner) { _owner = owner; D2D1.D2D1CreateFactory(FactoryType.SingleThreaded, out _d2dFactory); }