Изменение размера матрицы байтов - 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;
}