CGContextFillRect发生意外颜色

时间:2016-01-07 12:36:45

标签: ios objective-c iphone core-graphics

当我使用CGContextSetFillColorWithColorCGContextFillRect填充CGBitmapContext中的rect时,最终颜色取决于rect的大小。

这是我的代码。我的问题是,如果我将size_w更改为2或其他大小,则会导致意外的rgba数据。

int size_w=51;
GLubyte *const data=malloc(size_w*size_w*sizeof(GLubyte)*4);

CGContextRef context= CGBitmapContextCreate(data, size_w, size_w, 8, size_w*4, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedLast|kCGBitmapByteOrder32Big);

CGContextSaveGState(context);

CGContextSetFillColorWithColor(context, [UIColor colorWithRed:1.0f green:0.0f blue:0.0f alpha:0.2f].CGColor);

CGContextFillRect(context, CGRectMake(0, 0, size_w, size_w));

CGContextRestoreGState(context);

CGImageRef cimage= CGBitmapContextCreateImage(context);
//print the rgba data
struct RGBA* tmp=(struct RGBA*)data;

    for (int i=0; i<size_w*size_w; i++) {

       struct RGBA pixel=tmp[i];
       NSLog(@"r:%i,g:%i,b:%i,a:%i\n",pixel.R,pixel.G,pixel.B,pixel.A);

    }
});

Struct RGBA定义如下:

struct RGBA {
    uint8_t R;
    uint8_t G;
    uint8_t B;
    uint8_t A;
};

0 个答案:

没有答案