我想在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;
}
我认为我的代码没有错,但是我无法绘制想要的位图图形。
答案 0 :(得分:0)
快速UIImage(data: imageData)
或Objective-C中的[UIImage imageWithData:imageData]
答案 1 :(得分:0)
我突然意识到我犯了一个非常愚蠢的错误。函数CGBitmapContextCreateImage()
的返回值实际上是UIImage
。因此,解决此问题的方法只是将返回值分配给myView.image
以显示图像。