问题标签 [stb-image]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opengl - 如何解决“无 SOI”的 stbi_load 错误?
我正在通过 加载图片stbi_load
,但出现了错误no SOI
。我在另一个项目中使用了该图片,并且加载成功。所以我认为图片和图片的路径是有效的。但是我不知道为什么会发生错误?以下是一些主要代码:
我loadTextureFromFile("./Data/awesomeface.png", GL_TRUE);
用来获取纹理。并stbi_failure_reason()
返回no SOI
。当我在VS2013中调试项目时,内存image
有效但显示characters in a string are invalid
. 有人帮忙吗?
c++ - 使用 stbi_write_png 从 OpenGL 帧缓冲区保存的 PNG 向右移动
几天来,我一直在尝试解决这个视觉错误,但没有成功,所以我问这个问题,看看是否有人可以帮助我了解正在发生的事情。
首先我将在没有任何代码的情况下描述问题,然后我将展示一些代码。情况如下:
我的 OpenGL 应用程序将此图像渲染到多重采样帧缓冲区:
然后,我将该多样本帧缓冲区 blit 到常规帧缓冲区(不是多样本帧缓冲区)。
然后,我使用
glReadPixels
.最后,我
stbi_write_png
用无符号字节数组调用。这是结果:
对我来说,第一行字节似乎向右移动,这导致所有其他行都被移动,从而形成对角线形状。
这是我的代码:
- 要创建多重采样帧缓冲区:
- 要创建常规帧缓冲区:
请注意,两个帧缓冲区都报告为完整的。
要将多样本帧缓冲区 blit 到常规帧缓冲区,请从常规帧中读取并写入 PNG 图像:
- 请注意,glGetError 不会报告任何错误。
我一直无法弄清楚出了什么问题。感谢您的任何帮助!
c++ - OpenGL 4.1 和更低的黑色纹理,Mac 和 Windows
在不支持 OpenGL 4.5 和 mac 的低端 PC 上编译我的 OpenGL 代码时,我遇到了这个问题。在我的常规代码中,我会使用 glCreateTextures 和 glTextureStorage2D 之类的函数,但其他版本不支持它们,所以我选择了其他 glGenTextures 路径。
这是图像生成代码:
我想将我的纹理绑定到 GPU 上的特定插槽,所以我有这个功能:
为了确保这不是渲染问题,我决定将它放入 ImGui 的渲染器中。
这是我应该得到的图片:
并且图像导入正确,我没有收到错误,并且相同的导入代码和路径在高端 PC 上工作,唯一改变的是高端 PC 具有 OpenGL 4.5 纹理生成代码。
stb-image - 使用 stbi_set_flip_vertically_on_load 函数时未解决的错误
使用 stbi_set_flip_vertically_on_load 函数时出现未解决的符号错误。
我已将#include <stb_image.h> 文件添加为标题,我还需要做其他事情吗?
stb_image - v2.19
c++ - 将图像数据保存到 sqlite
我有一个从文件加载图像并成功创建opengl纹理的函数。
我想要做的是通过stbi_load
上面的方法加载图像并将其保存为 BLOB 到 sqlite。之后我希望能够加载相同的 blob 并在单独的函数中从它创建一个 opengl 纹理。
在第一步中,我创建了一个只加载图像的函数:
在下一步中,我想将此数据存储到我的 sqlite 数据库中:
最后,我将各个部分连接起来:
发生的情况是看似任意的数据最终会出现在数据库中,这绝对不是图像数据。有时条目只是空的。
我怀疑我处理的返回类型stbi_load
不正确,将随机内存数据强制输入数据库。从 stbi 文档中提取:
图像加载器的返回值是一个指向像素数据的“unsigned char *”。
据我了解,我只是将接受的数组指针传递给sqlite3_bind_blob
它。那么为什么它适用于一个而不适用于另一个呢?或者错误源可能在其他地方?const void *
glTexImage2D
编辑
我还尝试了别的东西。通常我在调用 ie 时通过 -1 作为 size sqlite3_bind_text
,因为调用会自动搜索空终止符。所以我认为在调用时我可能必须以字节为单位传递正确的大小,sqlite3_bind_blob
因为那里可能没有终结符。因此,对于具有 3 个通道的 225 x 225 大小的图像,我将225 * 225 * 3
其作为大小参数传递。不幸的是,这也不起作用。
c - 在 MacOS 上使用 stb_image 库时无法使用 cmake 构建 C 项目
当我尝试使用这个 cmake 文件构建我的项目时:
我收到以下 cmake 错误:
这是我在源文件中包含库的地方
我已经查看了有关使用 cmake 安装 stb_image 的堆栈溢出的所有相关问题,但这些解决方案都没有为我工作。我究竟做错了什么 ?
我已经用 GCC 编译了我的代码,它工作正常,但现在我需要使用我的 IDE 的调试器,为此我必须用 cmake 编译它。
stb-image - stbir_resize_uint8 在内存访问时崩溃
我正在使用 stb_image 将图像上传到 GPU。如果我只是使用 stbi_load 上传图像,我可以确认(nvidia Nsight)图像已正确存储在 GPU 内存中。但是,我喜欢在上传到 GPU 之前调整一些图像的大小。在这种情况下,我会崩溃。这是代码:
当此代码在规模设置为 的情况下运行时1.0f
,它可以正常工作。但是,当我将比例设置为 时0.25f
,程序在方法中崩溃stbir_resize_uint8
。我在这两种情况下提供的图像都是1920x1080 RGBA PNG
. Alpha 通道设置为1.0f
横跨整个图像。
我必须使用哪个函数来调整图像大小?
编辑:如果我自己分配内存,该函数不再崩溃并且工作正常。但我虽然 stb 在内部处理所有内存分配。我错了吗?
c++ - #define STB_IMAGE_IMPLEMENTATION 在 stb_image 中做了什么
我正在尝试使用stb_image在 OpenGL 程序中将图像文件加载为纹理,头文件 stb_image.h 的文档说明如下:
"这样做:
在将此文件包含在一个C 或 C++ 文件中以创建实现之前。”
这种类型的预处理器指令实际上做了什么?
为了读者的利益,这里是我的项目的结构。
- 主文件
- stb_image.h
main.cpp 文件的标题如下所示: