Получить часть изображения - 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);
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д