STB图像写问题
stb image write issue
我正在尝试使用stb_image_write将简单的映像文件写入磁盘。我使用最简单的测试用例:128 x 128像素RGB图像。
我在网上找到了这个示例,那家伙似乎说它可以正常工作,而且看起来完全像我写了2个小时的写作:
void save_image(int w, int h, int channels_num)
{
int data[w * h * channels_num];
int index = 0;
for (int j = h - 1; j >= 0; --j)
{
for (int i = 0; i < w; ++i)
{
float r = (float)i / (float)w;
float g = (float)j / (float)h;
float b = 0.2f;
int ir = int(255.0 * r);
int ig = int(255.0 * g);
int ib = int(255.0 * b);
data[index++] = ir;
data[index++] = ig;
data[index++] = ib;
}
}
stbi_write_jpg("jpg_test_.jpg", w, h, channels_num, data, 100);
}
save_image(128, 128, 3);
结果应该是一个不错的颜色梯度,但是我所能获得的只是一个有效的文件,其中有一些垂直的红色,绿色,蓝色和黑色线条。图像的尺寸还可以。我真的在这里找不到解决方案。我在Linux Jessie上。是否存在" endianess"问题或类似的问题?
评论中回答了这个问题。我必须替换: int数据[]经过 : 未签名的char数据[];
============================请在下面查看我的解决方案部分====
int数据[w * h * channels_num];可以,这不是您失败的原因。
更改此行
stbi_write_jpg("jpg_test_.jpg", w, h, channels_num, data, 100);
to
stbi_write_jpg("jpg_test_.jpg", w, h, channels_num, data, w * sizeof(int));
您会得到想要的东西。最后一个参数,我相信这是大步向前。如果是这样,则大步表示两行之间的偏移。根据您的问题,我认为您有128 x 128 x 32位颜色。然后大步将是w * sizeof(int(。
如果没有,请告诉我。
对不起,我急着赶上开会。
===============该部分是解决方案part ========
是,
int data[w * h * channels_num];
应该是
unsigned char data[w * h * channels_num];
plus,
stbi_write_jpg("jpg_test_.jpg", w, h, channels_num, data, 100);
应该更改为
stbi_write_jpg("jpg_test_.jpg", w, h, channels_num, data, w * channels_num);
完整解决方案
void save_image(int w, int h, int channels_num)
{
unsigned char data[w * h * channels_num];
int index = 0;
for (int j = h - 1; j >= 0; --j)
{
for (int i = 0; i < w; ++i)
{
data[index++] = (unsigned char)(255.0 * i / w);
data[index++] = (unsigned char)(255.0 * j / h);
data[index++] = (unsigned char)(255.0 * 0.2);
}
}
stbi_write_jpg("jpg_test_.jpg", w, h, channels_num, data, w * channels_num);
}
相关文章:
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 我在 OpenGL 中显示图像时遇到问题
- openCV c++中手动侵蚀图像的问题(二进制图像)
- 问题 (std::bad_alloc) 通过 QThread 中的 QSqlQuery 将大图像(约 36 MB)保存到
- CMake 的测试:找不到图像(可能的 rpath 问题)
- 加载带有stb_image的图像时出现问题
- 使用 ImageMagick 从像素强度数组创建灰度图像时遇到问题
- C :阅读位图图像的问题
- STB图像写问题
- 使用 qt 和 opengl、定时精度和垂直同步问题、c++ 显示图像
- 多模图像对齐问题
- 在 Python 中使用 OpenCV 将打包的 BGRA 图像缓冲区转换为 RGB 时遇到问题
- 滚动条缩略图跟踪长度 基于图像的水平适合调整窗口大小时出现问题
- 将颜色图像转换为OpenCV中的灰度问题
- C++:OpenCV扫描图像的性能问题
- SDL2图像到屏幕问题
- 通过套接字发送的图像流-服务器死锁问题
- 自定义图像格式的奇怪OpenCV问题
- 在c++中处理图像和像素值时出现问题
- 读取 ppm p6 图像完成时出现问题.C++