public static bool TryWrapAsSpanBitmap(Image src, SpanBitmap.Action1 action) { if (src is Image <A8> imageA8) { return(TryWrapAsSpanBitmap <A8, Pixel.Alpha8>(imageA8, s => action(s))); } if (src is Image <L8> imageL8) { return(TryWrapAsSpanBitmap <L8, Pixel.Luminance8>(imageL8, s => action(s))); } if (src is Image <L16> imageL16) { return(TryWrapAsSpanBitmap <L16, Pixel.Luminance16>(imageL16, s => action(s))); } if (src is Image <Bgr565> imageBgr565) { return(TryWrapAsSpanBitmap <Bgr565, Pixel.BGR565>(imageBgr565, s => action(s))); } if (src is Image <Bgra5551> imageBgra5551) { return(TryWrapAsSpanBitmap <Bgra5551, Pixel.BGRA5551>(imageBgra5551, s => action(s))); } if (src is Image <Bgra4444> imageBgra4444) { return(TryWrapAsSpanBitmap <Bgra4444, Pixel.BGRA4444>(imageBgra4444, s => action(s))); } if (src is Image <Bgr24> imageBgr24) { return(TryWrapAsSpanBitmap <Bgr24, Pixel.BGR24>(imageBgr24, s => action(s))); } if (src is Image <Rgb24> imageRgb24) { return(TryWrapAsSpanBitmap <Rgb24, Pixel.RGB24>(imageRgb24, s => action(s))); } if (src is Image <Bgra32> imageBgra32) { return(TryWrapAsSpanBitmap <Bgra32, Pixel.BGRA32>(imageBgra32, s => action(s))); } if (src is Image <Rgba32> imageRgba32) { return(TryWrapAsSpanBitmap <Rgba32, Pixel.RGBA32>(imageRgba32, s => action(s))); } if (src is Image <Argb32> imageArgb32) { return(TryWrapAsSpanBitmap <Argb32, Pixel.ARGB32>(imageArgb32, s => action(s))); } if (src is Image <RgbaVector> imageRgbaVector) { return(TryWrapAsSpanBitmap <RgbaVector, Pixel.RGBA128F>(imageRgbaVector, s => action(s))); } throw new NotImplementedException(); }
public static void WriteAsSpanBitmap(GDIBITMAP bmp, SpanBitmap.Action1 action) { var rect = new Rectangle(0, 0, bmp.Width, bmp.Height); GDIPTR dstBits = null; try { dstBits = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat); action(dstBits.AsSpanBitmapDangerous()); } finally { if (dstBits != null) { bmp.UnlockBits(dstBits); } } }