0

NSBitmapImageRep を返すメソッドを実装しました。そのビットマップに 10x2 の長方形を描画し、各長方形をシアン色で塗りつぶす必要があります。ただし、長方形ごとに、シアンの値を 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;
}

各四角形には同じ色の値が使用され、両方のループが渡された後に設定される最後のシアン値です。

4

1 に答える 1

0

OK、NSColor 値の範囲が 0.0 ~ 1.0 であることがわかりました。だから私は私のシアンをそのようにフロートするように設定しなければなりません:

cyan += 12/255;

値は 1.0 より小さい必要があります。

于 2014-09-06T08:38:34.503 に答える