/// <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 }
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; } }
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; } }
/// <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"); } }