gpt4 book ai didi

ios - 在ios(iphone,ipad)中寻找一种简单的像素绘制方法

转载 作者:行者123 更新时间:2023-11-29 11:22:36 24 4
gpt4 key购买 nike

我有一个简单的绘图问题。我准备了一个具有动画波浪运动的二维数组。该数组每 1/10 秒更新一次(这可以由用户更改)。数组更新后,我想将其显示为二维图像,每个数组值作为一个像素,颜色范围从 0 到 255。

有关如何最有效地执行此操作的任何指示......

感谢对此的任何帮助...

KAS

最佳答案

如果它只是一个灰度,那么下面的代码(在我输入时编码,可能值得检查错误)应该可以工作:

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 非常懒惰地复制东西,因此这些解决方案都不应该像多个步骤所暗示的那样昂贵。

关于ios - 在ios(iphone,ipad)中寻找一种简单的像素绘制方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6151095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com