Здравствуйте высококвалифицированные программисты.
У меня есть тестовое изображение 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
Теперь я создал и заполнил подблоки из этих кодов. Кто-то помог мне здесь. (думаю, что мы разобрали изображение 1600x1600 до 4x4 частей)
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 фрагментов матрицы 4x4 с именем "grayscale_map_block". Я использую этот код для получения элемента блоков grayscale_map_block [n] [x] [y] / n-й блок, элемент x,y. где n = 0-общее число блоков
Из этих блоков я должен умело создать петлю, которая собирает кусочки вместе. Новая матрица 1600x1600. Спасибо за вашу помощь.
pictureBox1.Image = bmp
.Bitmap
этоImage
. Нет необходимости загружать изображение дважды. - person Wyck   schedule 12.09.2018