只需修改图像的开始,而不是按照我的意愿进行修改
Modifying only the beginning of an image and not it fully, as I wish
我当前有一些代码,该代码读取以TGA格式存储的图像,然后对其进行操作,然后将其存储在新的TGA文件中。问题在于,只有三分之一正在修改,其他三分之二等于原始图像。这是代码:
int size = width*height*bpp;
char imageArray [size];
char * arrayPtr = &imageArray[0];
......
for (int x=0; x<width; x++) {
for (int y=0; y<height; y++) {
imageArray [x*height + 3*y] = 255;
imageArray [x*height + 3*y + 1] = 0;
imageArray [x*height + 3*y + 2] = 0;
}
}
fileWriter.write (arrayPtr, size);
可以在循环中看到,我正在修改每个颜色值,在这种情况下,将其变成单个颜色图像。不幸的是,即使循环迭代的数量等于像素的数量,并且通过迭代进行三个操作,它的数量也等于原始图像的字节数。因此,我不知道自己做错了什么,并感谢任何建议。
整个偏移必须乘以bpp
,不仅是y
:
imageArray [bpp*(x*height + y)] = 255;
imageArray [bpp*(x*height + y) + 1] = 0;
....
我想我现在了解您的问题,但是它依赖于您如何带入数据以及bpp
的含义的一些假设。
您正在尝试在此处循环循环并更新3个值。您将size = width*height*bpp
设置为CC_4,其中我只能假设bpp
表示每个像素的bits-bits,并且是循环中显示的3个。尝试使用x=1
和y=0
逐步介绍此操作。如果数据的布置符合: RGB @ x=0,y=0; RGB @ x=1,y=0; ...
然后,您可以看到您最终从循环的第一次迭代中写下数据。每次嵌套循环时,索引都应完全乘以下一个级别的维度。只需假设bpp = 3
替换x*height + 3*y
。
这一切都取决于在图像数组中存储的次数。
您的配方表明,副柱/副柱/旁观。但这也可以是逐行/柱布/围栏彩色,甚至可以是彩色/by-by-low/by-by-column。
索引公式应为
-
x*(b*h)+y*b+c
-
y*(b*w)+x*b+c
-
c*(w*h)+y*h+x
(b,w和h是颜色字节,宽度和高度)
注意索引如何在总和中累积。假设订单正确,您至少忘记了一个乘法。
相关文章:
- 为什么在我的函数类型后使用引用运算符 (&) 允许我修改它返回的值?
- 当使用我在一个函数、另一个函数中修改的数组时,在我的输出中得到一个奇怪的负数
- 为什么我的项目没有保存名称中所做的修改
- 在 C++ 中,我可以在不修改类的情况下定义对类的隐式转换吗?
- accept(..) 似乎正在修改我给它的文件描述符参数
- 从固定函数迁移到 GLSL OpenGL:我应该如何修改我的视图(lookAt)矩阵和透视矩阵?
- 我在让我的代码输出整个链表时遇到问题.它只是输出我修改过的一些文本文件,而不是整个东西
- 我的类的可变参数模板构造函数无法修改我的类成员,为什么会这样?
- 绘图线在SDL2 C 中闪烁.如何修改我的游戏循环
- 当我要修改指针到常量整数时,为什么我的编译器不显示错误
- 为什么我的原始二叉搜索树被修改,即使我在另一个节点中复制了根节点
- 为什么我的变量在单独的线程中修改时没有改变?C++/boost
- 我如何使用此二叉搜索函数的修改后的最大/最小值创建新数组
- 只需修改图像的开始,而不是按照我的意愿进行修改
- 我如何修改我的C 程序以显示用户输入的单词,并使用堆栈向后
- C 多重继承 - 编译器修改我的指针
- 'ncurses' 函数 'wgetstr' 正在修改我的变量
- 如何修改我的提升::任何类似的类
- 需要修改我的递归算法
- 修改我的代码中两个二进制数字的加法