Изменить цвет во время рисования на NSBitmapImageRep
Я реализовал метод, который возвращает NSBitmapImageRep. На этом растровом изображении должны быть нарисованы прямоугольники 10х2, и каждый прямоугольник должен быть заполнен голубым цветом. Но для каждого прямоугольника значение cyan должно быть увеличено на 12 (значение начинается с 0).
В результате растровое изображение получает 20 прямоугольников, как и ожидалось. Но цвет не отличается между прямоугольниками. Все прямоугольники имеют одинаковое значение голубого цвета.
Я понятия не имею, в чем проблема. Может кто-нибудь дать мне подсказку?
-(NSBitmapImageRep*)drawOntoBitmap
{
NSRect offscreenRect = NSMakeRect(0.0, 0.0, 1000.0, 400.0);
NSBitmapImageRep *image = nil;
image = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:nil
pixelsWide:offscreenRect.size.width
pixelsHigh:offscreenRect.size.height
bitsPerSample:8
samplesPerPixel:4
hasAlpha:NO
isPlanar:NO
colorSpaceName:NSDeviceCMYKColorSpace
bitmapFormat:0
bytesPerRow:(4 * offscreenRect.size.width)
bitsPerPixel:32];
[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithBitmapImageRep:image]];
NSRect colorRect;
NSBezierPath *thePath;
int cyan = 0;
int x = 0;
int y = 0;
int w = 0;
int h = 0;
for (intj = 0; j<2; j++)
{
y = j * 200;
h = y + 200;
for (int i = 0; i<10; i++)
{
x = i * 100;
w = x + 100;
colorRect = NSMakeRect(x, y, w, h);
thePath = [NSBezierPath bezierPathWithRect: colorRect];
cyan += 12;
[[NSColor colorWithDeviceCyan:cyan magenta:0 yellow:0 black:0 alpha:100] set];
[thePath fill];
}
}
[NSGraphicsContext restoreGraphicsState];
return image;
}
Для каждого прямоугольника используется одно и то же значение цвета, и это последнее значение голубого цвета, которое устанавливается после прохождения обоих циклов.
1 ответ
ОК, выяснилось, что значение NSColor имеет диапазон 0,0 - 1,0. Поэтому я должен настроить свой циан так:
cyan += 12/255;
Значение должно быть меньше 1,0.