рисование .bmp из 2D-массива с помощью c # - PullRequest
2 голосов
/ 02 ноября 2011

Я пытаюсь нарисовать файл изображения bmp из двухмерного логического массива.Цель состоит в следующем: мне нужно нарисовать маленький квадрат для каждого значения, и цвет зависит от логического значения, если true, то оно окрашивает в данный цвет, а если false, то оно окрашивает в белый цвет.идея состоит в том, чтобы создать лабиринт на основе матрицы

Большинство решений, которые я нахожу через Интернет, основаны на одномерном байтовом массиве с использованием MemoryStream, но я не рисую полный квадрат с размером по своему выбору.

Моя главная проблема - как рисовать на BMP или изображении с помощью c #

Заранее благодарен за любой совет

Ответы [ 2 ]

2 голосов
/ 02 ноября 2011

Вот решение, которое использует двухмерный массив и сохраняет результирующее растровое изображение.Вам придется либо читать в лабиринте из текстового файла, либо вручную вводить его, как я сделал.Вы можете настроить размер плиток с помощью переменных squareWidth, squareHeight.Использование одномерного массива также будет работать, но может быть не так интуитивно понятно, если вы только изучаете эти вещи.

bool[,] maze = new bool[2,2];
maze[0, 0] = true;
maze[0, 1] = false;
maze[1, 0] = false;
maze[1, 1] = true;
const int squareWidth = 25;
const int squareHeight = 25;
using (Bitmap bmp = new Bitmap((maze.GetUpperBound(0) + 1) * squareWidth, (maze.GetUpperBound(1) + 1) * squareHeight))
{
    using (Graphics gfx = Graphics.FromImage(bmp))
    {
        gfx.Clear(Color.Black);
        for (int y = 0; y <= maze.GetUpperBound(1); y++)
        {
            for (int x = 0; x <= maze.GetUpperBound(0); x++)
            {
                if (maze[x, y])
                    gfx.FillRectangle(Brushes.White, new Rectangle(x * squareWidth, y * squareHeight, squareWidth, squareHeight));
                else
                    gfx.FillRectangle(Brushes.Black, new Rectangle(x * squareWidth, y * squareHeight, squareWidth, squareHeight));
            }
        }
    }
    bmp.Save(@"c:\maze.bmp");
}
0 голосов
/ 02 ноября 2011

Я не уверен, каким будет ваш выходной дизайн, но это может помочь вам начать работу с GDI.

int boardHeight=120;
int boardWidth=120;
int squareHeight=12;
int squareWidth=12;
Bitmap bmp = new Bitmap(boardWidth,boardHeight);
using(Graphics g = Graphics.FromImage(bmp))
using(SolidBrush trueBrush = new SolidBrush(Color.Blue)) //Change this color as needed
{
    bool squareValue = true; // or false depending on your array
    Brush b = squareValue?trueBrush:Brushes.White;
    g.FillRectangle(b,0,0,squareWidth,squareHeight);
}

Вам нужно будет расширить это в соответствии с вашими требованиями к выходному изображению и выполнить итерацию по всему массиву, но, поскольку вы указали, что вашей основной проблемой было начало работы с рисованием в .Net, надеюсь, этот пример даст вам необходимые основы.

...