Получить часть изображения - 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);
}
}
}