菜鸟教程小白 发表于 2022-12-13 09:36:47

IOS memcpy纹理到双数组


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

<pre><code>void *imageData;

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

         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);
}
</code></pre>

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

<pre><code>   double data;

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

       for (int y = 0; y &lt; height; y++)
      {
            for (int x = 0; x &lt; 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];
            }
      }
</code></pre>

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

<p>干杯</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>看起来您正在分配 <code>imageData</code> 以将像素值存储为 32 位(4 字节)整数,但随后尝试将每个条目视为 <code>double</code> ( 8 个字节)。那是行不通的。</p>

<p>以下帖子可能会有所帮助:</p>

<p> <a href="https://stackoverflow.com/questions/448125/how-to-get-pixel-data-from-a-uiimage-cocoa-touch-or-cgimage-core-graphics" rel="noreferrer noopener nofollow">How to get pixel data from a UIImage (Cocoa Touch) or CGImage (Core Graphics)?</a> </p></p>
                                   
                                                <p style="font-size: 20px;">关于IOS memcpy纹理到双数组,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/7943105/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/7943105/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: IOS memcpy纹理到双数组