首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问NSBitmapImageRep的像素?

如何访问NSBitmapImageRep的像素?
EN

Stack Overflow用户
提问于 2010-03-26 19:11:00
回答 2查看 1.2K关注 0票数 0

我有一个像这样创建的NSBitmapImageRep

代码语言:javascript
复制
NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc] 
                              initWithBitmapDataPlanes:NULL
                                            pixelsWide:waveformSize.width
                                            pixelsHigh:waveformSize.height
                                         bitsPerSample:8
                                       samplesPerPixel:4
                                              hasAlpha:YES
                                              isPlanar:YES
                                        colorSpaceName:NSCalibratedRGBColorSpace
                                           bytesPerRow:0
                                          bitsPerPixel:0];

现在,我希望访问像素数据,从而获得指向像素平面的指针。

代码语言:javascript
复制
unsigned char *bitmapData;
[imageRep getBitmapDataPlanes:&bitmapData];

根据文献资料,这将返回一个由五个字符指针组成的C数组。但它怎么能做到呢?因为参数的类型是unsigned char **,所以它只能返回char的数组,而不能返回char指针的数组。

因此,这让我想知道如何访问各个像素。你知道怎么做吗?

(我知道有– setColor:atX:y:方法,但如果对大位图的每一个像素进行调用,它似乎会非常慢。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-26 19:17:59

如果您只想迭代像素,-bitmapData应该是您所需要的。

票数 1
EN

Stack Overflow用户

发布于 2010-03-27 03:00:27

根据文档,这将返回一个由五个字符指针组成的C数组。但它怎么能做到呢?因为参数的类型是unsigned char **,所以它只能返回字符数组,而不能返回char指针数组。

不正确。unsigned char **是至少一个指向至少一个unsigned char的指针。

因此,您应该传递一个指向指针数组的指针,即指向数组数组的指针。就像这样:

代码语言:javascript
复制
unsigned char *buffers[5];
[bitmapImageRep getBitmapDataPlanes:buffers];

如果图像代表是平面的,那么buffers的每个元素都是指向组件平面的指针;对于RGB,buffers[0]是红色平面,buffers[1]是绿色平面,buffers[2]是蓝色平面,buffers[3]是α平面。当然,每个平面都是一个缓冲区,保存该通道的值(如unsigned chars)。

如果图像代表不是平面的,那么您将只得到一个元素,即RGBA数据。

特别值得注意的是你链接到的文件中的这句话:

如果少于五个平面,则剩下的指针将设置为NULL

这意味着您显示的代码包含一个缓冲区溢出:您正在为一个指针传递一个指向存储的指针,但是图像代表希望存储不少于5个,它将给您五个指针和/或NULL,因此它将在存储结束后写入。这将粉碎您的堆栈,使您的应用程序崩溃,或者两者兼而有之。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2526001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档