根据一组RGB数据在IOS上绘制位图图片

时间:2018-07-03 02:17:56

标签: ios objective-c xcode bitmap

我想在IOS平台上基于一组RGB数据绘制一个双图图片,但是在参考以下官方网站时遇到了一些问题:https://developer.apple.com/library/archive/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_images/dq_images.html#//apple_ref/doc/uid/TP30001066-CH212-TPXREF101

这里最大的问题是本教程在 MAC OS 上而不是在 IOS 上绘制了位图图片。

因此,我在视图中添加了一个子视图,并打算在该子视图上绘制位图图片。

UIImageView *imgview = [[UIImageView alloc] initWithFrame:CGRectMake(15, 355, 384, 288)];
[self drawBitmap:384 andPixelshigh:288];
[self.view addSubview:imgview];

drawBitmap 函数是一个自写函数,用于根据本教程绘制位图。

- (void)drawBitmap:(NSInteger)pixelsWide andPixelshigh:     (NSInteger)pixelsHigh{
CGRect myBoundingBox;
CGContextRef myBitmapContext;
CGImageRef myImage;

myBoundingBox = CGRectMake (33, 366, 384, 288);
myBitmapContext = [self MyCreateBitmapContext:pixelsWide andPixelsHigh:pixelsHigh];
CGContextSetRGBFillColor (myBitmapContext, 1, 0, 0, 1);
CGContextFillRect (myBitmapContext, CGRectMake (100, 100, 200, 100 ));
CGContextSetRGBFillColor (myBitmapContext, 0, 0, 1, .5);
CGContextFillRect (myBitmapContext, CGRectMake (100, 100, 100, 200 ));
myImage = CGBitmapContextCreateImage (myBitmapContext);
CGContextDrawImage(myBitmapContext, myBoundingBox, myImage);
char *bitmapData = CGBitmapContextGetData(myBitmapContext);
CGContextRelease (myBitmapContext);
if (bitmapData)
    free(bitmapData);
CGImageRelease(myImage);
}

myBitmapContext 是由以下函数生成的位图图片的上下文。

- (CGContextRef) MyCreateBitmapContext: (NSInteger) pixelsWide andPixelsHigh: (NSInteger) pixelsHigh{
CGContextRef    context = NULL;
CGColorSpaceRef colorSpace;
NSInteger *          bitmapData;
NSInteger            bitmapByteCount;
NSInteger            bitmapBytesPerRow;

bitmapBytesPerRow   = (pixelsWide * 4);
bitmapByteCount     = (bitmapBytesPerRow * pixelsHigh);

colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
bitmapData = (NSInteger *)calloc( bitmapByteCount, sizeof(uint8_t) );
if (bitmapData == NULL)
{
    return NULL;
}
context = CGBitmapContextCreate (bitmapData,
                                 pixelsWide,
                                 pixelsHigh,
                                 8,
                                 bitmapBytesPerRow,
                                 colorSpace,
                                 kCGImageAlphaPremultipliedLast);
if (context== NULL)
{
    free (bitmapData);
    return NULL;
}
CGColorSpaceRelease( colorSpace );

return context;
}

我认为我的代码没有错,但是我无法绘制想要的位图图形。

2 个答案:

答案 0 :(得分:0)

快速UIImage(data: imageData)或Objective-C中的[UIImage imageWithData:imageData]

答案 1 :(得分:0)

我突然意识到我犯了一个非常愚蠢的错误。函数CGBitmapContextCreateImage()的返回值实际上是UIImage。因此,解决此问题的方法只是将返回值分配给myView.image以显示图像。