Exemple #1
0
        public void CanReadAndWriteData(int depth)
        {
            using (var pix = Pix.Create(Width, Height, depth))
            {
                var pixData = pix.GetData();

                for (var y = 0; y < Height; y++)
                {
                    var line = (uint *)pixData.Data + (y * pixData.WordsPerLine);
                    for (var x = 0; x < Width; x++)
                    {
                        var  val = (uint)((y * Width + x) % (1 << depth));
                        uint readVal;
                        if (depth == 1)
                        {
                            PixData.SetDataBit(line, x, val);
                            readVal = PixData.GetDataBit(line, x);
                        }
                        else if (depth == 2)
                        {
                            PixData.SetDataDIBit(line, x, val);
                            readVal = PixData.GetDataDIBit(line, x);
                        }
                        else if (depth == 4)
                        {
                            PixData.SetDataQBit(line, x, val);
                            readVal = PixData.GetDataQBit(line, x);
                        }
                        else if (depth == 8)
                        {
                            PixData.SetDataByte(line, x, val);
                            readVal = PixData.GetDataByte(line, x);
                        }
                        else if (depth == 16)
                        {
                            PixData.SetDataTwoByte(line, x, val);
                            readVal = PixData.GetDataTwoByte(line, x);
                        }
                        else if (depth == 32)
                        {
                            PixData.SetDataFourByte(line, x, val);
                            readVal = PixData.GetDataFourByte(line, x);
                        }
                        else
                        {
                            throw new NotSupportedException();
                        }

                        Assert.AreEqual(readVal, val);
                    }
                }
            }
        }
Exemple #2
0
        // Copies in-memory pixels out of an OpenCV Mat into a PixData that Tesseract / Leptonica understands
        private unsafe void TransferData(MatOfByte3 mat3, PixData pixData)
        {
            var indexer = mat3.GetIndexer();

            for (int y = 0; y < mat3.Height; y++)
            {
                uint *pixLine = (uint *)pixData.Data + (y * pixData.WordsPerLine);
                for (int x = 0; x < mat3.Width; x++)
                {
                    Vec3b color = indexer[y, x];
                    PixData.SetDataFourByte(pixLine, x, BitmapHelper.EncodeAsRGBA(color.Item0, color.Item1, color.Item2, 255));
                }
            }
        }
Exemple #3
0
        private static unsafe void TransferDataFormat32bppRgb(BitmapData imgData, PixData pixData)
        {
            int pixelFormat = (int)imgData.PixelFormat;
            int height      = imgData.Height;
            int width       = imgData.Width;

            for (int index1 = 0; index1 < height; ++index1)
            {
                byte *numPtr1 = (byte *)((IntPtr)(void *)imgData.Scan0 + index1 * imgData.Stride);
                uint *data    = (uint *)((IntPtr)(void *)pixData.Data + (index1 * pixData.WordsPerLine) * 4);
                for (int index2 = 0; index2 < width; ++index2)
                {
                    byte *numPtr2 = numPtr1 + (index2 << 2);
                    byte  blue    = *numPtr2;
                    byte  green   = numPtr2[1];
                    byte  red     = numPtr2[2];
                    PixData.SetDataFourByte(data, index2, BitmapHelper.EncodeAsRGBA(red, green, blue, byte.MaxValue));
                }
            }
        }
Exemple #4
0
        private unsafe void TransferDataFormat24bppRgb(BitmapData imgData, PixData pixData)
        {
            var imgFormat = imgData.PixelFormat;
            var height    = imgData.Height;
            var width     = imgData.Width;

            for (int y = 0; y < height; y++)
            {
                byte *imgLine = (byte *)imgData.Scan0 + (y * imgData.Stride);
                uint *pixLine = (uint *)pixData.Data + (y * pixData.WordsPerLine);

                for (int x = 0; x < width; x++)
                {
                    byte *pixelPtr = imgLine + x * 3;
                    byte  blue     = pixelPtr[0];
                    byte  green    = pixelPtr[1];
                    byte  red      = pixelPtr[2];
                    PixData.SetDataFourByte(pixLine, x, BitmapHelper.EncodeAsRGBA(red, green, blue, 255));
                }
            }
        }
Exemple #5
0
        private unsafe void TransferDataFormat32bppArgb(BitmapData imgData, PixData pixData)
        {
            var imgFormat = imgData.PixelFormat;
            var height    = imgData.Height;
            var width     = imgData.Width;

            for (int y = 0; y < height; y++)
            {
                byte *imgLine = (byte *)imgData.Scan0 + (y * imgData.Stride);
                uint *pixLine = (uint *)pixData.Data + (y * pixData.WordsPerLine);

                for (int x = 0; x < width; x++)
                {
                    byte *pixelPtr = imgLine + (x << 2);
                    byte  blue     = *pixelPtr;
                    byte  green    = *(pixelPtr + 1);
                    byte  red      = *(pixelPtr + 2);
                    byte  alpha    = *(pixelPtr + 3);
                    PixData.SetDataFourByte(pixLine, x, BitmapHelper.EncodeAsRGBA(red, green, blue, alpha));
                }
            }
        }