Изменение размера матрицы байтов - C#
Формулировка задачи:
Помогите пожалуйста разобраться. Ниже приведена функция перевода матрицы байтов в изображение bitmap. Мне необходимо каждый элемент разместить 169 раз. Т.е. каждый пиксел на картинке увеличиться на 13x13, соответственно увеличиться и разрешение картинки.
public unsafe static Bitmap RgbToBitmap(byte[, ,] rgb) { int width = rgb.GetLength(2), height = rgb.GetLength(1); Bitmap result = new Bitmap(width, height, PixelFormat.Format24bppRgb); BitmapData bd = result.LockBits(new Rectangle(0, 0, width*2, height*2), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb); try { byte* curpos; for (int h = 0; h < height; h++) { curpos = ((byte*)bd.Scan0) + h * bd.Stride; for (int w = 0; w < width; w++) { *(curpos++) = rgb[2, h, w]; //color B *(curpos++) = rgb[1, h, w]; //color G *(curpos++) = rgb[0, h, w]; //color R } } } finally { result.UnlockBits(bd); } return result; }
Решение задачи: «Изменение размера матрицы байтов»
textual
Листинг программы
public unsafe static Bitmap RgbToBitmapQ(byte[, ,] rgb) { if ((rgb.GetLength(0) != 3)) { throw new ArrayTypeMismatchException("Size of first dimension for passed array must be 3 (RGB components)"); } int width = rgb.GetLength(2), height = rgb.GetLength(1); Bitmap result = new Bitmap(width, height, PixelFormat.Format24bppRgb); BitmapData bd = result.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb); try { byte* curpos; fixed (byte* _rgb = rgb) { byte* _r = _rgb, _g = _rgb + 1, _b = _rgb + 2; for (int h = 0; h < height; h++) { curpos = ((byte*)bd.Scan0) + h * bd.Stride; for (int w = 0; w < width; w++) { *(curpos++) = *_b; _b += 3; *(curpos++) = *_g; _g += 3; *(curpos++) = *_r; _r += 3; //c = Color.FromArgb(*_r, *_g, *_b); неверно } } } } finally { result.UnlockBits(bd); } return result; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д