public WicBitmapImpl(ImagingFactory factory, Platform.PixelFormat format, IntPtr data, int width, int height, int stride) { WicImpl = new Bitmap(factory, width, height, format.ToWic(), BitmapCreateCacheOption.CacheOnDemand); PixelFormat = format; using (var l = WicImpl.Lock(BitmapLockFlags.Write)) { for (var row = 0; row < height; row++) { UnmanagedMethods.CopyMemory(new IntPtr(l.Data.DataPointer.ToInt64() + row * l.Stride), new IntPtr(data.ToInt64() + row * stride), (uint)l.Data.Pitch); } } }
public WicBitmapImpl(APixelFormat format, IntPtr data, PixelSize size, Vector dpi, int stride) { WicImpl = new Bitmap(Direct2D1Platform.ImagingFactory, size.Width, size.Height, format.ToWic(), BitmapCreateCacheOption.CacheOnDemand); WicImpl.SetResolution(dpi.X, dpi.Y); PixelFormat = format; using (var l = WicImpl.Lock(BitmapLockFlags.Write)) { for (var row = 0; row < size.Height; row++) { UnmanagedMethods.CopyMemory( (l.Data.DataPointer + row * l.Stride), (data + row * stride), (UIntPtr)l.Data.Pitch); } } }
public override IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer) { return(base.CreateDrawingContext(visualBrushRenderer, () => { using (var l = WicImpl.Lock(BitmapLockFlags.Read)) { for (var y = 0; y < _target.Height; y++) { UnmanagedMethods.CopyMemory( _target.Address + _target.RowBytes * y, l.Data.DataPointer + l.Stride * y, (uint)Math.Min(l.Stride, _target.RowBytes)); } } Dispose(); _target.Dispose(); })); }