gpt4 book ai didi

ios - ofGrabber和ofTexture像素格式的关系

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

我目前正在创建一个 iOS 应用程序,但我无法理解从 ofGrabber 获取像素和使用 ofTexture 绘制它们之间的关系。

我当前的代码:

在 setup() 中:

//Set iOS orientation
ofSetOrientation(OF_ORIENTATION_90_LEFT);

//Inits the camera to specified dimensions and sets up texture to display on screen
grabber.initGrabber(640, 480, OF_PIXELS_BGRA); //Options: 1280x720, 640x480

//Allocate opengl texture
tex.allocate(grabber.width, grabber.height, GL_RGB);

//Create pix array large enough to store an rgb value for each pixel
//pix is a global that I use to do pixel manipulation before drawing
pix = new unsigned char[grabber.width * grabber.height * 3];

在更新()

//Loads the new pixels into the opengl texture
tex.loadData(pix, grabber.width, grabber.height, GL_RGB);

在 draw() 中:

CGRect screenBounds = [[UIScreen mainScreen] bounds];
CGSizeMake screenSize = CGSizeMake(screenBounds.size.width, screenBounds.size.height);

//Draws the texture we generated onto the screen
//On 1st generation iPad mini: width = 1024, height = 768
tex.draw(0, 0, screenSize.height, screenSize.width); //Reversed for 90 degree rotation

我想知道的是:

1) 为什么 ofGrabber 和 ofTexture 使用看似不同的像素格式? (这些格式与 VideoGrabberExample 中使用的格式相同)

2) 纹理绘制的分辨率到底是多少?我正在将像素数组加载到纹理中。 pix 数组表示 640x480 图像,而 ofTexture 将 1024x768(旋转时为 768x1024)图像绘制到屏幕上。这是怎么做到的?由于宽高比基本相同,它是否只是将所有内容放大?

3) 是否有描述 OpenGL 和 OpenFrameworks 像素格式的列表?我已经搜索过这个但没有找到太多。比如为什么是OF_PIXELS_BGRA而不是OF_PIXELS_RGBA?就此而言,如果我正在捕获 BGRA 格式的数据(我假设其中包含 Gamma 值)但我只绘制 RGB(并且您可以看到我的 pix 数组的大小适用于 RGB 数据),为什么我的代码甚至可以工作。

我可能还会提到在 main() 中我有:

ofSetupOpenGL(screenSize.height, screenSize.width, OF_FULLSCREEN);

但是,更改上面的宽度/高度值似乎对我的应用没有任何影响。

最佳答案

  1. ofGrabber 是基于 CPU 的,因此它使用 OF_PIXELS_BGRA 由程序员选择。某些相机通常具有 BGRA 像素顺序,因此这只是避免了抓取器在从源抓取时执行昂贵的 memcpy。 ofTexture 映射 GPU 内存,因此它映射到您将在屏幕上看到的内容 (RGB)。请注意,GL_RGB 是一个 OpenGL 定义。

  2. ofTexture 会根据您的指示进行缩放。这是在 GPU 中完成的,因此非常便宜。它不需要具有相同的纵横比。

  3. 这完全取决于程序员或您的要求。有些相机提供 BGRA 流,其他相机或文件直接提供 RGB,甚至 YUV-I420。颜色格式非常多样化。 OpenFrameworks 将在大多数情况下处理转换,查看 ofPixels 以查看它的使用位置和方式。简而言之:

    • OF_PIXELS_XXX :由 ofPixels 使用,基本上是 RAM 映射位图
    • OF_IMAGE_XXX :由 ofImage 使用,它包装了像素并使其更易于使用
    • GL_XXX :由 OpenGL 和 ofTexture 使用,低级 GPU 内存映射

关于ios - ofGrabber和ofTexture像素格式的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23328011/

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