Привет высококвалифицированным программистам
У меня есть тестовое изображение 1600x1600. Я импортировал это в матрицу как значения int в градациях серого. Затем я создал 4x4 подматрицы из этой матрицы. Я сделал несколько математических операций в этих блоках и создал новые блоки. Теперь мне нужно снова создать новую матрицу (1600x1600) из этих новых блоков 4x4. Но я не смог создать цикл. У меня есть (1600/4 * 1600/4 = 160 000) подматриц всего. (Конечно, моя программа не является статичной, входное изображение может быть любым. Это для тестового изображения). Теперь это моя структура.
Bitmap bmp = new Bitmap("c:\\test.jpg");
pictureBox1.Image = Image.FromFile("c:\\test.jpg");
int width = bmp.Width; int height = bmp.Height;
while (y < height) {
while (x < width) {
pxl = bmp.GetPixel(x, y);
int_grayscale_map[x, y] = GetGrayScale(pxl); //getgrayscale is function that returns int value
x++;}
y++;}
int totalblocknumber = (width/4) * (height / 4); //160 000 in this case
Теперь я создал и заполнил подблоки из этого кода. Кто-то помог мне здесь (подумайте, что мы озадачили изображение 1600х1600 до 4х4)
Bitmap image = new Bitmap(FILENAME);
List<List<List<Int32>>> grayscale_map_block = newList<List<List<Int32>>>();
for (int row = 0; row < height; row += 4)
{
for (int col = 0; col < width; col += 4)
{
block.Add(new List<List<Color>>() {
new List<Color>() { image.GetPixel(col, row), image.GetPixel(col + 1, row), image.GetPixel(col + 2, row), image.GetPixel(col + 3, row)} ,
new List<Color>() { image.GetPixel(col, row + 1), image.GetPixel(col + 1, row + 1), image.GetPixel(col + 2, row + 1), image.GetPixel(col + 3, row + 1)} ,
new List<Color>() { image.GetPixel(col, row + 2), image.GetPixel(col + 1, row + 2), image.GetPixel(col + 2, row + 2), image.GetPixel(col + 3, row + 2)} ,
new List<Color>() { image.GetPixel(col, row + 3), image.GetPixel(col + 1, row + 3), image.GetPixel(col + 2, row + 3), image.GetPixel(col + 3, row + 3)} ,
});
grayscale_map_block.Add(new List<List<Int32>>() {
new List<Int32>() { GetGrayScale(image.GetPixel(col, row)), GetGrayScale(image.GetPixel(col + 1, row)), GetGrayScale(image.GetPixel(col + 2, row)), GetGrayScale(image.GetPixel(col + 3, row))} ,
new List<Int32>() { GetGrayScale(image.GetPixel(col, row + 1)), GetGrayScale(image.GetPixel(col + 1, row + 1)), GetGrayScale(image.GetPixel(col + 2, row + 1)), GetGrayScale(image.GetPixel(col + 3, row + 1))} ,
new List<Int32>() { GetGrayScale(image.GetPixel(col, row + 2)), GetGrayScale(image.GetPixel(col + 1, row + 2)), GetGrayScale(image.GetPixel(col + 2, row + 2)), GetGrayScale(image.GetPixel(col + 3, row + 2))} ,
new List<Int32>() { GetGrayScale(image.GetPixel(col, row + 3)), GetGrayScale(image.GetPixel(col + 1, row + 3)), GetGrayScale(image.GetPixel(col + 2, row + 3)), GetGrayScale(image.GetPixel(col + 3, row + 3))} ,
});
}
} // Getgrayscale is a function that input color return int value
Все, что есть. Теперь у меня есть 160 000 кусочков матрицы 4х4 с кодом "grayscale_map_block"
я использую этот код, чтобы получить элемент блоков
grayscale_map_block [n] [x] [y] / n-й блок, элемент x, y.
где n = 0-общее количество блоков
Из этих блоков я должен ловко создать цикл, который собирает кусочки. Новая матрица 1600х1600. Спасибо за вашу помощь ..