0

Я реализовал метод, который возвращает NSBitmapImageRep. На этом прямоугольном прямоугольнике 10x2 нужно нарисовать, и каждый прямоугольник должен быть заполнен цветом cyan. Но для каждого прямоугольника значение циана должно быть увеличено на 12 (значение начинается с 0).Измените цвет во время рисования на NSBitmapImageRep

В результате битмап получает 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; 
} 

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

ответ

0

ОК, выяснилось, что значение NSColor имеет диапазон 0.0 - 1.0. Так что я должен установить мой голубой плавать так:

cyan += 12/255; 

значение должно быть меньше, чем 1,0.