Разница между цветом заливки и цветом фона

0

Я переношу приложение из Windows в Mac OS X. Здесь у меня есть одна путаница между использованием разных терминов.

В Windows мы используем SetBkColor для установки цвета фона контекста устройства.

В Mac OS X есть setFill чтобы установить цвет заливки.

Есть ли разница между этим фоновым цветом Windows и цветом заливки Mac OS X?

Для удаления штрихов (с помощью setStroke), я думаю, что в Windows такой же эффект достигается CreatePen для строк и SetTextColor для текстов. Эта концепция в порядке?

Теги:
macos
winapi
cocoa

1 ответ

1
Лучший ответ

Как для собственной разработки Windows, так и для Core Graphics на iOS/Mac OS используется так называемая "малярная модель" рисования. Как и в реальной картине, вы выбираете цвет для своего пера или кисти, а также все, что вы рисуете, заполняете, что имеете с этого момента, пока вы не измените его, он будет использовать этот цвет. На Mac, более конкретно, вы устанавливаете штрих для таких вещей, как текст и границы, и заполняет для заполняемых методов. Вы должны устанавливать каждый отдельно, поскольку каждый выполняет что-то другое.

SetBkColor будет отличаться, потому что он заполняется в фоновом режиме, на Mac или iOS, вместо этого вы должны установить цвет заливки, а затем использовать метод рисования для заполнения прямоугольника - и обычно это все будет сделано путем переопределения метода drawRect вида. Например, здесь один из способов сделать это:

- (void)drawRect:(NSRect)rect
{
    CGContextRef myContext = [[NSGraphicsContext currentContext] graphicsPort];

   // ********** Your drawing code here **********
   CGContextSetRGBFillColor (myContext, 1, 0, 0, 1);  // set my 'brush color'
   CGContextFillRect (myContext, CGRectMake (0, 0, 200, 100 ));  // fill it

   CGContextSetRGBFillColor (myContext, 0, 0, 1, .5);  // set my brush color
   CGContextFillRect (myContext, CGRectMake (0, 0, 100, 200));  //fill it
}

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

Взгляните на двумерный чертежный инструмент Quartz 2D для получения дополнительных примеров. Если вы приходите из Windows, вы найдете, что Quartz/Core Graphics имеет очень сопоставимые и, на мой взгляд, богаче набор возможностей рисования. (Приведенный выше пример из этого руководства)

https://developer.apple.com/library/mac/documentation/graphicsimaging/conceptual/drawingwithquartz2d/dq_context/dq_context.html

Ещё вопросы

Сообщество Overcoder
Наверх
Меню