GDI System.Drawing.Printing конвертирует белый в черный - PullRequest
1 голос
/ 25 марта 2011

Я создал базовый просмотрщик cad в приложении .Net Windows Forms.Рендеринг выполняется с помощью GDI.

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

Существует ли простой способ заставить белые элементы печатать черным без проверки цвета каждого отдельного элемента?

Простое инвертирование цветов не годится, поскольку цветные объекты должны оставаться неповрежденными.

Ответы [ 2 ]

1 голос
/ 25 марта 2011

Я предполагаю, что у вас есть некоторый код, который подготавливает изображение перед рисованием на экране или печатью. Можете ли вы передать этому коду параметр, чтобы сообщить ему, какой цвет вы хотите для тех элементов, которые меняются? Поэтому вместо того, чтобы специально использовать Pens.White или Brushes.White, в начале метода есть код, который устанавливает правильную кисть на основе параметра.

Единственным другим вариантом будет получение растрового изображения от объекта Graphics и преобразование всех белых пикселей в черный. Это выполнимо, но, вероятно, не то, что вы хотите.

0 голосов
/ 25 марта 2011

Мое исправление заключалось в создании пары простых служебных классов:

    public static Pen GetPrintablePen(Pen pen)
    {
        if (pen.Color.R == 255 && pen.Color.G == 255 && pen.Color.B == 255)
        {
            Pen newPen = (Pen)pen.Clone();
            newPen.Color = Color.Black;
            return newPen;
        }
        return pen;
    }

    public static SolidBrush GetPrintableBrush(SolidBrush brush)
    {
        if (brush.Color.R == 255 && brush.Color.G == 255 && brush.Color.B == 255)
        {
            SolidBrush newBrush = (SolidBrush)brush.Clone();
            newBrush.Color = Color.Black;
            return newBrush;
        }
        return brush;
    }

Благодарим Джима за предоставление ближайшего ответа.

...