通过二进制操纵图像像素

时间:2016-03-18 09:39:34

标签: c++ binary pixels

是否可以操纵图像的像素(例如创建棕褐色,灰度,调整大小等)来制作二进制代码?

假设我们用

打开图像
bool readFile(string filename) {

  ifstream f(filename, ios::binary | ios:: in );
  ostringstream ob;
  int offset = 0;
  char c;

  if (f.fail()) {

    return false;

  }

  while (f.get(c)) {

    if (offset % 16 == 0)
      cout << hex << setw(8) << setfill('0') << offset << "adress ";

    cout << ' ' << hex << setw(2) << (int)(unsigned char) c;

    offset++;

  }

  return true;
}

int main() {
  if (!readFile("boss.png")) {
    cout << "Cant read" << endl;
  }
  return 0;
}

我们可以使用其二进制表示来访问图像像素吗?如果是这样,怎么样?我找不到合适的资源。

1 个答案:

答案 0 :(得分:0)

PNG is a well documented file format因此,从理论上讲,您可以直接操作图像数据。但是,这很不寻常。通常,您可以将其转换为未压缩格式,对其进行操作,然后将其重新压缩为PNG,因为读取/写入未压缩的图像数据要简单得多(除非您只读取/写入几个像素,否则可能会更多快)。

搜索提供了很多关于如何读取/写入PNG文件的示例,例如here