2011-05-27 22 views
1

我有一个简单的绘图问题。我准备了一个具有动画波动的二维阵列。该阵列每1/10秒更新一次(这可以由用户更改)。后,将阵列被更新我想与每个数组值与颜色范围的像素的2维图像,以显示它从0到255在ios中寻找一个简单的像素绘图方法(iphone,ipad)

上如何做到这一点最有效的任何指针...

欣赏任何帮助......

KAS

+0

值0到255如何映射到颜色?这是一种直接的灰度类型的事情,还是你有一系列色调? – Tommy 2011-05-27 11:18:47

+0

汤米..这将是一个简单的灰色阴影图像,希望显示一个正弦波。 – 2011-05-27 12:01:39

回答

2

如果它只是那么灰阶以下(编码为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

You da man Tommy ..两个解决方案的工作。我正在与第一个解决方案,目前的性能足够体面,所以我不担心子类UIView呢...谢谢。 – 2011-05-27 13:06:43

+0

Tommy ...你如何清除UIImageView中的动画序列。上面的代码建议解决了我的动画需求。我已经加载了框架在一个NSMutableArray并将它们添加到UImageView。这部分工作得很好。现在我想停止动画(这是一个简单的(imageView.stopanimaiton),但是当我加载一个新的图像数组时,我仍然会将旧图像作为新序列的一部分。可变阵列,并重新初始化阵列,但似乎无法摆脱旧的图像 – 2011-05-29 03:25:23

+0

行..一次不介意:-) 该问题与UIViewImage数组无关......我已经定义了一些全局变量我忘记了重置。另一个提醒我关于最小化全局使用情况... – 2011-05-29 11:54:25

相关问题