Получить часть изображения - C#

Узнай цену своей работы

Формулировка задачи:

Имеется вот такая вот картинка (смотрите ниже), как программно выбирать нужную картинку и зарисовывать её для дальнейшей разработки ? (GDI +)

Решение задачи: «Получить часть изображения»

textual
Листинг программы
  1. /* Матрица значений.
  2.  * Каждое значение - это порядковый номер тайла в исходном изображении,
  3.  * считываемом слева направо и сверху вниз, начиная с нуля.
  4.  * Например, для исходника 10х10 тайлов значение 12 означает третий слева тайл во втором ряду сверху:
  5.  * 00 01 02 03 04 05 06 07 08 09
  6.  * 10 11 12 13 14 15 16 17 18 19
  7.  * и так далее.
  8. */
  9. int[,] field = new int[,]
  10.     {
  11.         { 01, 02, 01, 02, 01, 02, 01, 02, 01, 02 },
  12.         { 02, 00, 00, 00, 00, 00, 00, 07, 00, 01 },
  13.         { 01, 00, 00, 00, 00, 00, 03, 03, 00, 02 },
  14.         { 02, 00, 00, 03, 03, 00, 00, 00, 00, 01 },
  15.         { 01, 08, 00, 00, 00, 00, 00, 00, 00, 02 },
  16.         { 02, 01, 01, 02, 01, 01, 02, 01, 02, 01 }
  17.     };
  18.  
  19. // Размер тайла.
  20. int tileS = 30;
  21.  
  22. // Установка цвета, используемого для прозрачности.
  23. var keyColor = Color.FromArgb(0xFF03E4);
  24. var attr = new ImageAttributes();
  25. attr.SetColorKey(keyColor, keyColor);
  26.  
  27. // Регион для отрисовки.
  28. var dst = new Rectangle(0, 0, tileS, tileS);
  29.  
  30. // Исходное изображение.
  31. var source = Resources.brock;
  32.  
  33. // canvas в данном примере - панель размером 300х180 пикселей (10х6 тайлов 30 пикселей каждый).
  34. using (var gfx = canvas.CreateGraphics()) {
  35.     for (int i = 0; i < field.GetLength(0); i++) {
  36.         for (int j = 0; j < field.GetLength(1); j++) {
  37.             // Координата Х нужного тайла в исходном изображении.
  38.             int srcX = tileS * field[i, j] % source.Width;
  39.  
  40.             // Координата Y нужного тайла в исходном изображении.
  41.             int srcY = tileS * field[i, j] / source.Width;
  42.  
  43.             // Координаты для отрисовки текущего тайла.
  44.             dst.X = j * tileS; dst.Y = i * tileS;
  45.  
  46.             // Отрисовка.
  47.             gfx.DrawImage(source, dst, srcX, srcY, tileS, tileS, GraphicsUnit.Pixel, attr);
  48.         }
  49.     }
  50. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы