Манипулирование пикселем изображения через двоичный файл

Можно ли манипулировать пикселями изображения (например, создавать сепию, оттенки серого, изменять размер и т. Д.) С помощью двоичного кода?

Допустим, мы открываем изображение с помощью

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;
}

Можем ли мы получить доступ к пикселям изображения, используя его двоичное представление? Если да, то как? Мне не удалось найти для этого хороший ресурс.


person user3706129    schedule 18.03.2016    source источник
comment
Вы, конечно, можете. PNG - это общедоступный формат.   -  person Margaret Bloom    schedule 18.03.2016
comment
Я все время делаю это с JPEG.   -  person nicomp    schedule 18.03.2016
comment
Что именно вы хотите сделать с изображением? Скрыть в нем данные? Создать свой собственный кодек изображений?   -  person Андрей Беньковский    schedule 18.03.2016
comment
Как я уже сказал, я хотел бы создать эффект оттенков серого / сепия, сжать его или даже скрыть в нем данные. Я сделал все это только с использованием пикселей напрямую, а не с двоичными файлами.   -  person user3706129    schedule 18.03.2016


Ответы (1)


PNG - это хорошо документированный формат файла, и поэтому теоретически вы можете напрямую манипулировать данными изображения. Однако это довольно необычно. Как правило, вы должны преобразовать его в несжатый формат, обработать его, а затем повторно сжать в PNG, потому что чтение / запись несжатых данных изображения намного проще (и, если вы не читаете / записываете только несколько пикселей, скорее всего, намного проще). Быстрее).

Поиск дает множество примеров того, как читать / писать файлы PNG, например здесь.

person MuertoExcobito    schedule 18.03.2016