コード例 #1
0
        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();
        }
コード例 #2
0
        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);
                }
            }
        }