MFC, любой может помочь с алгоритмом для аэрографии, я просто не могу понять, как это сделать - PullRequest
2 голосов
/ 27 апреля 2010

Есть ли способ заполнить эллипс или прямоугольник точкой за точкой, как в аэрографе в mspaint?

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

Могу ли я сказать setPixel заполнить внутри dcellipse или что-то подобное?

10x

Ответы [ 2 ]

2 голосов
/ 27 апреля 2010

Вам необходимо создать регион с помощью CRgn , а затем выбрать его в качестве области отсечения в вашем CDC с помощью SelectClipRgn . Затем вы можете использовать CDC :: SetPixel для установки случайных пикселей в любом месте в пределах ограничивающего прямоугольника вашей фигуры, и будут окрашены только те, которые находятся в области отсечения.

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

1 голос
/ 27 апреля 2010

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

num_pixels = 20; // how many pixels
circle_radius = 32;  // 32-pixel radius, or whatever you'd like
circle_radius2 = circle_radius * circle_radius;

while (num_pixels-- > 0)
{
    // get a random number between (-circle_radius / 2, circle_radius / 2)
    pixel_x = rand(circle_radius) - circle_radius / 2; 
    pixel_y = rand(circle_radius) - circle_radius / 2; 

    // compute squared distance between generated pixel and radius, 
    // exclude if out of range
    if ( (center_x - pixel_x) * (center_x - pixel_x) + 
         (center_y - pixel_y) * (center_y - pixel_y) > circle_radius2 )
        continue; // generate another pixel

    // do stuff with pixel
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...