C # Graphics class: получить размер нарисованного контента - PullRequest
0 голосов
/ 17 марта 2010

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

Итак, я создаю большое изображение и создаю из него графический объект:

int iWidth = 600;
int iHeight = 2000;

bmpImage = new Bitmap(iWidth, iHeight);            
graphics = Graphics.FromImage(bmpImage);
graphics.Clear(Color.White);        

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

Очень сложно рассчитать размер контента перед его рисованием и узнать, есть ли другое решение.

1 Ответ

2 голосов
/ 17 марта 2010

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

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

int width = 0;
int height = 0;

for(int x = bmpImage.Width - 1, x >= 0, x++)
{
    bool foundNonWhite = false;

    width = x + 1;

    for(int y = 0; y < bmpImage.Height; y++)
    {
        if(bmpImage.GetPixel(x, y) != Color.White)
        {
            foundNonWhite = true;
            break;
        }
    }

    if(foundNonWhite) break;
}

for(int y = bmpImage.Height - 1, x >= 0, x++)
{
    bool foundNonWhite = false;

    height = y + 1;

    for(int x = 0; x < bmpImage.Width; x++)
    {
        if(bmpImage.GetPixel(x, y) != Color.White)
        {
            foundNonWhite = true;
            break;
        }
    }

    if(foundNonWhite) break;
}

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

...