gpt4 book ai didi

IOS memcpy 纹理到双数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:18:06 33 4
gpt4 key购买 nike

您好,我正在使用以下函数将 sampleBuffer 绑定(bind)到 opengl 纹理,效果很好。

void *imageData;  

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
{
UIImage * image = [self generateUIImageFromSampleBuffer:sampleBuffer];

if(imageData == NULL){
width = CGImageGetWidth(image.CGImage);
height = CGImageGetHeight(image.CGImage);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
imageData = malloc( height * width * 4 );
imgcontext = CGBitmapContextCreate(imageData, width, height, 8, 4 * width, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big );
CGColorSpaceRelease( colorSpace );
}
CGContextClearRect( imgcontext, CGRectMake( 0, 0, width, height ) );
CGContextTranslateCTM( imgcontext, 0, height - height );
CGContextDrawImage( imgcontext, CGRectMake( 0, 0, width, height ), image.CGImage );

glBindTexture( GL_TEXTURE_2D, m_textureId );
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);
}

我的问题是,我试图将 imageData 复制到双数组中,这样我就可以遍历所有像素以在不同的过程中进行一些处理。这是我正在使用的代码,它没有给我预期的结果。

   double data[width * height * 4];

memcpy(data, imageData, width * height * 4);

for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x += 4)
{
double r = data[ y * width + x];
double g = data[ y * width + x + 1];
double b = data[ y * width + x + 2];
double a = data[ y * width + x + 3];
}
}

此代码在绑定(bind)纹理后直接调用,但 r、g、b 永远不会更改值。任何想法我可能做错了什么

干杯

最佳答案

看起来您正在分配 imageData 以将像素值存储为 32 位(4 字节)整数,但随后尝试将每个条目视为 double( 8 个字节)。那是行不通的。

以下帖子可能会有所帮助:

How to get pixel data from a UIImage (Cocoa Touch) or CGImage (Core Graphics)?

关于IOS memcpy 纹理到双数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7943105/

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