在ios(iphone、ipad)中寻找简单的像素绘制方法

在ios(iphone、ipad)中寻找简单的像素绘制方法,ios,drawing,pixel,Ios,Drawing,Pixel,我有一个简单的绘图问题。我准备了一个二维数组,它有一个动画的波动。阵列每1/10秒更新一次(用户可以更改)。更新阵列后,我希望将其显示为二维图像,每个阵列值为颜色范围为0到255的像素 关于如何最有效地做到这一点的任何建议 感谢您在这方面的帮助 KAS如果它只是一个灰度,那么下面的代码(编码为I类型,可能值得检查错误)应该可以工作: CGDataProviderRef dataProvider = CGDataProviderCreateWithData(NULL, pointer

我有一个简单的绘图问题。我准备了一个二维数组,它有一个动画的波动。阵列每1/10秒更新一次(用户可以更改)。更新阵列后,我希望将其显示为二维图像,每个阵列值为颜色范围为0到255的像素

关于如何最有效地做到这一点的任何建议

感谢您在这方面的帮助


KAS

如果它只是一个灰度,那么下面的代码(编码为I类型,可能值得检查错误)应该可以工作:

CGDataProviderRef dataProvider =
       CGDataProviderCreateWithData(NULL, pointerToYourData, width*height, NULL);

CGColorSpaceRef colourSpace = CGColorSpaceCreateDeviceGray();
CGImageRef inputImage = CGImageCreate(  width, height,
                                        8, 8, width, 
                                        colourSpace, 
                                        kCGBitmapByteOrderDefault,
                                        dataProvider,
                                        NULL, NO,
                                        kCGRenderingIntentDefault);
CGDataProviderRelease(dataProvider);
CGColorSpaceRelease(colourSpace);

UIImage *image = [UIImage imageWithCGImage:inputImage];
CGImageRelease(inputImage);

someImageView.image = image;
假设您不想编写自定义UIView子类(可能只有在性能有问题的情况下才值得这样做),那么这就是一次性显示

我从文档中了解到,在C缓冲区的生命周期中,数据提供程序只能创建一次。我不认为图像是这样的,但是如果您创建了一个CGBitmapContext来包装缓冲区,而不是一个提供者和一个图像,那么它将安全地保存下来,并且您可以使用
CGBitmapContextCreateImage
来获取CGImageRef。如果这是一个问题,那么可能值得在两方面进行基准测试

编辑:因此,另一种解决方法是:

// get a context from your C buffer; this is now something
// CoreGraphics could draw to...
CGColorSpaceRef colourSpace = CGColorSpaceCreateDeviceGray();
CGContextRef context = 
        CGBitmapContextCreate(pointerToYourData,
                              width, height,
                              8, width,
                              colourSpace,
                              kCGBitmapByteOrderDefault);
CGColorSpaceRelease(colourSpace);

// get an image of the context, which is something
// CoreGraphics can draw from...
CGImageRef image = CGBitmapContextCreateImage(context);

/* wrap in a UIImage, push to a UIImageView, as before, remember
   to clean up 'image' */

CoreGraphics非常懒洋洋地复制东西,因此这两种解决方案都不应该像多个步骤所暗示的那样昂贵。

值0到255如何映射到颜色?这是纯灰色的还是你有不同的色调?汤米。。这将是一个简单的灰色阴影图像,希望显示一个移动的正弦波。。两种解决方案都有效。我使用的是第一个解决方案,目前性能还不错,所以我还不担心UIView的子类化。。。谢谢,汤米。。。如何在UIImageView中清除动画序列。以上代码建议解决了我的动画需求。我已将帧加载到NSMutableArray中,并将其添加到UImageView中。那部分很好用。现在我想停止动画(这是一个简单的(imageView.stopanimaiton),但是当我加载一个新的图像数组时,我仍然会将旧图像作为新序列的一部分。我已经尝试删除可变数组中的所有对象并重新初始化数组,但似乎无法删除旧图像。好吧..没关系:-)该问题与UIViewImage数组无关。。我定义了一些我忘记重置的全局变量。另一个提醒我要尽量减少使用globals。。。