只需修改图像的开始,而不是按照我的意愿进行修改

Modifying only the beginning of an image and not it fully, as I wish

本文关键字:修改 我的 图像 开始      更新时间:2023-10-16

我当前有一些代码,该代码读取以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=1y=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是颜色字节,宽度和高度)

注意索引如何在总和中累积。假设订单正确,您至少忘记了一个乘法。

相关文章: