首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSBitmapImageRep到RGB的高效转换

NSBitmapImageRep到RGB的高效转换
EN

Stack Overflow用户
提问于 2011-10-20 05:34:50
回答 2查看 1.5K关注 0票数 2

我正在为10.5+开发我的第一个mac可可应用程序,其中我有一个CVImageBufferRef (使用QTKit捕获),我需要通过TCP套接字将此图像传输到客户端应用程序。客户端应用程序需要RGB值。下面是我目前正在做的事情(我当前的解决方案按需工作,但使用了大量CPU)

CVImageBufferRef --> NSBitmapImageRep --> NSData -->然后通过TCP套接字将NSData传输到客户端应用程序,在客户端我有以下代码来获取RGB:

代码语言:javascript
复制
UInt8 r,g,b
int width=320;
int height=240;

NSData *data; //read from TCP Socket
NSBitmapImageRep *bitmap=[[NSBitmapImageRep alloc] initWithData:data];

for (y=1;y<=height;y++) {
    for(x=1;x<=width;x++){


        NSColor *color=[bitmap colorAtX:x y:y];
        // ^^ this line is actually a culprit and uses a lot of CPU


        r=[color redComponent]*100;
        g=[color greenComponent]*100;
        b=[color blueComponent]*100;
        NSLog(@"r:%d g:%d b:%d",r,g,b);
    }
}

[bitmap release];

如果CVImageBufferRef可以转换为RGB值的数组,这将是完美的,否则我需要一个有效的解决方案来转换NSBitmapImageRep到RGB值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-20 12:00:34

如果直接从CVImageBufferRef开始,您可以使用CVPixelBuffer,因为它派生自CVImageBuffer。使用CVPixelBufferLockBaseAddress(),然后使用CVPixelBufferGetBaseAddress()获取指向第一个像素的指针。还有许多其他的CVPixelBufferGet*方法(http://developer.apple.com/library/mac/#documentation/QuartzCore/Reference/CVPixelBufferRef/Reference/reference.html)可以查询宽度、高度等,以了解要传输的数据大小。当然,在处理完数据之后,还要使用CVPixelBufferUnlockBaseAddress()。

如果使用NSBitmapImageRep,我同意贾斯汀的观点。使用[bitmap bitmapData]将返回指向第一个元素的指针。即使没有先验知识,您也可以发送以下原始数据:

代码语言:javascript
复制
unsigned char *data = [bitmap bitmapData];
unsigned long size = [bitmap pixelsWide]*[bitmap pixelsHigh]*[bitmap samplesPerPixel]*sizeof(unsigned char);

此数据将是RGB连续值,即1stRedComponent = *(data + 0),如果您需要在NSBitmapImageRep之外访问像素特定的数据,1stGreenComponent = *(data + 1) 1stBlueComponent = *(data + 2)将为您提供数据中的第一个RGB分量。

票数 3
EN

Stack Overflow用户

发布于 2011-10-20 05:47:35

您可以使用bitmapData获取位图数据,并从中获取所需的像素值。这将使许多情况下的速度提高100倍以上。

(日志也应该被删除)

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

https://stackoverflow.com/questions/7828470

复制
相关文章

相似问题

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