Exemplo n.º 1
0
        /// <summary>
        ///A test for Copy
        ///</summary>
        public void CopyTestHelper <T1, T2>()
        {
            var target = new Narray <T1>(10);
            var src    = new Narray <T2>(10);
            T1  valueT = (T1)Convert.ChangeType(99, typeof(T1));
            T2  valueS = (T2)Convert.ChangeType(99, typeof(T2));

            src.Put(0, valueS);                    // put at position 0
            src.Put(9, valueS);                    // put at position 9
            target.Copy(src);
            Assert.AreEqual(10, target.Length());  // 10
            Assert.AreEqual(10, src.Length());     // 10
            Assert.AreEqual(valueS, src.At(0));    // first value
            Assert.AreEqual(valueS, src.At(9));    // last value
            Assert.AreEqual(valueT, target.At(0)); // first value
            Assert.AreEqual(valueT, target.At(9)); // last value
        }
Exemplo n.º 2
0
 public Dataset8(Narray <sbyte> data, Intarray classes)
     : this()
 {
     data.Copy(data);
     classes.Copy(classes);
     if (classes.Length() > 0)
     {
         nc = NarrayUtil.Max(classes) + 1;
         nf = data.Dim(1);
         //CHECK_ARG(NarrayUtil.Min(data) > -100 && NarrayUtil.Max(data) < 100, "min(data)>-100 && max(data)<100");
         CHECK_ARG(NarrayUtil.Min(classes) >= -1 && NarrayUtil.Max(classes) < 10000, "min(classes)>=-1 && max(classes)<10000");
     }
     else
     {
         nc = 0;
         nf = -1;
     }
 }
Exemplo n.º 3
0
 public Dataset8(Narray<sbyte> data, Intarray classes)
     : this()
 {
     data.Copy(data);
     classes.Copy(classes);
     if (classes.Length() > 0)
     {
         nc = NarrayUtil.Max(classes) + 1;
         nf = data.Dim(1);
         //CHECK_ARG(NarrayUtil.Min(data) > -100 && NarrayUtil.Max(data) < 100, "min(data)>-100 && max(data)<100");
         CHECK_ARG(NarrayUtil.Min(classes) >= -1 && NarrayUtil.Max(classes) < 10000, "min(classes)>=-1 && max(classes)<10000");
     }
     else
     {
         nc = 0;
         nf = -1;
     }
 }
Exemplo n.º 4
0
        /// <summary>
        /// Convert Bitmap image to any Narray
        /// </summary>
        public static unsafe void NarrayFromBitmap <T>(Narray <T> outarray, Bitmap bitmap, bool maxrgb = false, bool yflip = true)
        {
            if (bitmap.PixelFormat == PixelFormat.Format1bppIndexed)
            {
                bitmap = new Bitmap(bitmap);
            }
            int       w      = bitmap.Width;
            int       h      = bitmap.Height;
            Bytearray imgRgb = new Bytearray();

            imgRgb.Resize(w, h, 3);

            // lock source image
            BitmapData imageData = bitmap.LockBits(
                new Rectangle(0, 0, w, h),
                ImageLockMode.ReadOnly, bitmap.PixelFormat);
            int   srcOffset = imageData.Stride - w;
            int   pixelOffset = 1, r = 0, g = 0, b = 0;
            float cr = 0.5f, cg = 0.419f, cb = 0.081f;    // RMY convert method

            Color[] palette = null;
            // check image format
            if (bitmap.PixelFormat == PixelFormat.Format32bppArgb || bitmap.PixelFormat == PixelFormat.Format32bppRgb)
            {
                pixelOffset = 4;
                srcOffset   = imageData.Stride - w * pixelOffset;
                r           = 2; g = 1; b = 0;
                // get palette
                palette = new Color[256];
                // init palette
                for (int i = 0; i < 256; i++)
                {
                    palette[i] = Color.FromArgb(i, i, i);
                }
            }
            else if (bitmap.PixelFormat != PixelFormat.Format8bppIndexed)
            {
                pixelOffset = 3;
                srcOffset   = imageData.Stride - w * pixelOffset;
                r           = 2; g = 1; b = 0;
                // get palette
                palette = new Color[256];
                // init palette
                for (int i = 0; i < 256; i++)
                {
                    palette[i] = Color.FromArgb(i, i, i);
                }
            }
            else
            {
                palette = bitmap.Palette.Entries;
            }

            // process convert the image to RGB Bytearray
            byte *src = (byte *)imageData.Scan0.ToPointer( );
            int   yres;

            // for each line
            //for (int y = h - 1; y >= 0; y--)
            for (int y = 0; y < h; y++)
            {
                // for each pixel
                for (int x = 0; x < w; x++, src += pixelOffset)
                {
                    yres = y;
                    if (yflip)
                    {
                        yres = h - y - 1;
                    }
                    imgRgb[x, yres, 0] = palette[src[r]].R;
                    imgRgb[x, yres, 1] = palette[src[g]].G;
                    imgRgb[x, yres, 2] = palette[src[b]].B;
                }
                src += srcOffset;
            }
            // unlock image
            bitmap.UnlockBits(imageData);

            // copy to output array
            if (outarray.Rank() == 3)
            {
                outarray.Copy(imgRgb);
            }
            else if (outarray.Rank() == 2)
            {
                // resize output array
                outarray.Resize(w, h);

                // packed image
                if (typeof(T).Name == "Int32")
                {
                    for (int y = 0; y < h; y++)
                    {
                        // for each RGB pixel convert to Gray
                        for (int x = 0; x < w; x++)
                        {
                            outarray[x, y] = (T)Convert.ChangeType(
                                ((imgRgb[x, y, 0] << 16) | (imgRgb[x, y, 1] << 8) | (imgRgb[x, y, 2])),
                                typeof(T));
                        }
                    }
                }
                else // gray image
                {
                    for (int x = 0; x < w; x++)
                    {
                        // for each RGB pixel convert to Gray
                        for (int y = 0; y < h; y++)
                        {
                            if (maxrgb)
                            {
                                outarray[x, y] = (T)Convert.ChangeType(
                                    Convert.ToByte(Math.Max(Math.Max(imgRgb[x, y, 0], imgRgb[x, y, 1]), imgRgb[x, y, 2])),
                                    typeof(T));
                            }
                            else
                            {
                                outarray[x, y] = (T)Convert.ChangeType(
                                    Convert.ToByte(cr * imgRgb[x, y, 0] + cg * imgRgb[x, y, 1] + cb * imgRgb[x, y, 2]),
                                    typeof(T));
                            }
                        }
                    }
                }
            }
            else
            {
                throw new ArgumentException("NarrayFromBitmap: array rank must be 2 or 3");
            }
        }