Получить цвет прямоугольника после FillRectangles - PullRequest
0 голосов
/ 18 сентября 2018

Как я могу получить цвет Rectangle после его создания?

Я использую этот код для их создания:

SolidBrush sb = new SolidBrush(Color.Red);
Graphics g = panel1.CreateGraphics();
Rectangle[] rects = { new Rectangle(0, 0, 15, 15), new Rectangle(16, 16, 15, 15), new Rectangle(16, 0, 15, 15), new Rectangle(0, 16, 15, 15) };
g.FillRectangles(sb,rects);

И теперь я хочу получитьцвет 3-го прямоугольника rects[2] = ....

Возможно ли это получить?И он должен вернуть Color.Red.

Ответы [ 4 ]

0 голосов
/ 18 сентября 2018

Если вы сохраняете изображение, вы сохраняете только результат (то есть сетку пикселей).Нет информации о , как вы создали это изображение.

Например, основываясь только на растровом изображении, вы не можете различить два соседних квадрата (new Rectangle(0, 0, 15, 15), new Rectangle(15, 0, 15, 15)) и один прямоугольник, который имеет удвоенную ширину (new Rectangle(0, 0, 30, 15)).

Итак, короткий ответна ваш вопрос нет, вы не можете сделать это.

Если вы не храните свою информацию (нарисованные вами прямоугольники) отдельно, а затем используете ее, чтобы найти соответствующий пиксель на изображении (и это работает только в простых случаях -если вы перекрыли предыдущий прямоугольник, это будет невозможно)

Но если вы все равно собираетесь хранить информацию о прямоугольнике, вы можете также сохранить его цвет, и тогда вам не нужно перепроектироватьизображение больше. Таким образом, остается ответ: Вы не можете сделать это на основе одного изображения .

0 голосов
/ 18 сентября 2018

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

   Color pixelColor = myBitmap.GetPixel(50, 50);
0 голосов
/ 18 сентября 2018

Вы можете написать новый класс, например:

class ColorRectangles
{
    public Color color;
    public Rectangle[] rects;

    public ColorRectangle(Rectangle[] rects, Color color) : base(x, y, width, height)
    {
        this.color = color
        this.rects = rects;
    }
}

, а затем установить цвет прямоугольников с помощью g.FillRectangles(new SolidBrush(Rectangle.color), Rectangle.rects);

0 голосов
/ 18 сентября 2018

FillRectangles рисует прямоугольники с помощью кисти (цвет), которую вы прошли. Там нет ссылки из любого прямоугольника на любой цвет. Он просто выполняет команду рисования для объекта Graphics.

Прямоугольник не имеет цвета. Так что нет, вы не можете. Если вы объясните, зачем вам это нужно, могут быть другие решения для получения желаемых результатов.

...