作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前有一些代码可以读取以 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;
....
关于c++ - 只修改图像的开头而不是完全修改,如我所愿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37904456/
我是一名优秀的程序员,十分优秀!