Получить часть изображения - C#
Формулировка задачи:
Имеется вот такая вот картинка (смотрите ниже), как программно выбирать нужную картинку и зарисовывать её для дальнейшей разработки ? (GDI +)
Решение задачи: «Получить часть изображения»
textual
Листинг программы
/* Матрица значений. * Каждое значение - это порядковый номер тайла в исходном изображении, * считываемом слева направо и сверху вниз, начиная с нуля. * Например, для исходника 10х10 тайлов значение 12 означает третий слева тайл во втором ряду сверху: * 00 01 02 03 04 05 06 07 08 09 * 10 11 12 13 14 15 16 17 18 19 * и так далее. */ int[,] field = new int[,] { { 01, 02, 01, 02, 01, 02, 01, 02, 01, 02 }, { 02, 00, 00, 00, 00, 00, 00, 07, 00, 01 }, { 01, 00, 00, 00, 00, 00, 03, 03, 00, 02 }, { 02, 00, 00, 03, 03, 00, 00, 00, 00, 01 }, { 01, 08, 00, 00, 00, 00, 00, 00, 00, 02 }, { 02, 01, 01, 02, 01, 01, 02, 01, 02, 01 } }; // Размер тайла. int tileS = 30; // Установка цвета, используемого для прозрачности. var keyColor = Color.FromArgb(0xFF03E4); var attr = new ImageAttributes(); attr.SetColorKey(keyColor, keyColor); // Регион для отрисовки. var dst = new Rectangle(0, 0, tileS, tileS); // Исходное изображение. var source = Resources.brock; // canvas в данном примере - панель размером 300х180 пикселей (10х6 тайлов 30 пикселей каждый). using (var gfx = canvas.CreateGraphics()) { for (int i = 0; i < field.GetLength(0); i++) { for (int j = 0; j < field.GetLength(1); j++) { // Координата Х нужного тайла в исходном изображении. int srcX = tileS * field[i, j] % source.Width; // Координата Y нужного тайла в исходном изображении. int srcY = tileS * field[i, j] / source.Width; // Координаты для отрисовки текущего тайла. dst.X = j * tileS; dst.Y = i * tileS; // Отрисовка. gfx.DrawImage(source, dst, srcX, srcY, tileS, tileS, GraphicsUnit.Pixel, attr); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д