Пример #1
0
        public static unsafe StdInput FromBitmap(Bitmap bm)
        {
            int      r = 2, g = 1, b = 0;
            float    cr = 0.5f, cg = 0.419f, cb = 0.081f; // RMY convert method
            StdInput lenetInput = new StdInput(bm.Height, bm.Width);

            byte[] buffer = lenetInput.GetDataBuffer();

            // lock source bitmap data
            BitmapData srcData = bm.LockBits(
                new Rectangle(0, 0, bm.Width, bm.Height),
                ImageLockMode.ReadOnly, bm.PixelFormat);
            int   pixelSize = (srcData.PixelFormat == PixelFormat.Format8bppIndexed) ? 1 : 3;
            byte *src       = (byte *)srcData.Scan0.ToPointer();
            int   srcOffset = srcData.Stride - bm.Width * pixelSize;
            int   width     = bm.Width;
            int   height    = bm.Height;
            int   yres;

            // --- GrayScale ---
            if (srcData.PixelFormat == PixelFormat.Format8bppIndexed)
            {
                // for each line
                for (int y = 0; y < height; y++)
                {
                    // for each pixel
                    for (int x = 0; x < width; x++, src++)
                    {
                        yres = y;
                        buffer[yres * width + x] = Convert.ToByte(255 - *src);
                    }
                    src += srcOffset;
                }
            }
            else //--- RGB ---
            {
                // for each line
                for (int y = 0; y < height; y++)
                {
                    // for each pixel
                    for (int x = 0; x < width; x++, src += pixelSize)
                    {
                        yres = y;
                        buffer[yres * width + x] = Convert.ToByte(255 - Convert.ToByte(cr * src[r] + cg * src[g] + cb * src[b]));
                    }
                    src += srcOffset;
                }
            }

            // unlock source image
            bm.UnlockBits(srcData);

            return(lenetInput);
        }
Пример #2
0
        public static unsafe StdInput FromBitmap(Bitmap bm)
        {
            int r = 2, g = 1, b = 0;
            float cr = 0.5f, cg = 0.419f, cb = 0.081f;    // RMY convert method
            StdInput lenetInput = new StdInput(bm.Height, bm.Width);
            byte[] buffer = lenetInput.GetDataBuffer();

            // lock source bitmap data
            BitmapData srcData = bm.LockBits(
                new Rectangle(0, 0, bm.Width, bm.Height),
                ImageLockMode.ReadOnly, bm.PixelFormat);
            int pixelSize = (srcData.PixelFormat == PixelFormat.Format8bppIndexed) ? 1 : 3;
            byte* src = (byte*)srcData.Scan0.ToPointer();
            int srcOffset = srcData.Stride - bm.Width * pixelSize;
            int width = bm.Width;
            int height = bm.Height;
            int yres;

            // --- GrayScale ---
            if (srcData.PixelFormat == PixelFormat.Format8bppIndexed)
            {
                // for each line
                for (int y = 0; y < height; y++)
                {
                    // for each pixel
                    for (int x = 0; x < width; x++, src++)
                    {
                        yres = y;
                        buffer[yres * width + x] = Convert.ToByte(255 - *src);
                    }
                    src += srcOffset;
                }
            }
            else //--- RGB ---
            {
                // for each line
                for (int y = 0; y < height; y++)
                {
                    // for each pixel
                    for (int x = 0; x < width; x++, src += pixelSize)
                    {
                        yres = y;
                        buffer[yres * width + x] = Convert.ToByte(255 - Convert.ToByte(cr * src[r] + cg * src[g] + cb * src[b]));
                    }
                    src += srcOffset;
                }
            }

            // unlock source image
            bm.UnlockBits(srcData);

            return lenetInput;
        }