Изображение создания C++

Другой респондент (McDowell) сказал, что полиморфизм только работает на экземпляры объектов. Это должно быть квалифицировано; существуют языки, которые действительно рассматривают классы как экземпляры типа "Класса" или "Метакласса". Эти языки действительно поддерживают полиморфизм и для экземпляра и для класса (статические) методы.

C#, как Java и C++ перед ним, не является таким языком; static ключевое слово используется явно, чтобы обозначить, что метод является статически ограниченным, а не динамическим/виртуальным.

8
задан Adam 7 December 2009 в 22:25
поделиться

4 ответа

Я уверен, что вы уже проверяли http://en.wikipedia.org/wiki/BMP_file_format .

Имея эту информацию под рукой, мы можем быстро написать BMP с помощью:

// setup header structs bmpfile_header and bmp_dib_v3_header before this (see wiki)
// * note for a windows bitmap you want a negative height if you're starting from the top *
// * otherwise the image data is expected to go from bottom to top *

FILE * fp = fopen ("file.bmp", "wb");
fwrite(bmpfile_header, sizeof(bmpfile_header), 1, fp);
fwrite(bmp_dib_v3_header, sizeof(bmp_dib_v3_header_t), 1, fp);

for (int i = 0; i < 200; i++)  {
 for (int j = 0; j < 200; j++) {
  fwrite(&image[j][i][2], 1, 1, fp);
  fwrite(&image[j][i][1], 1, 1, fp);
  fwrite(&image[j][i][0], 1, 1, fp);
 }
}

fclose(fp);

Если настройка заголовков является проблемой, дайте нам знать.

Изменить: Я забыл, файлы BMP ожидают BGR вместо RGB, I ' я обновил код (удивлен, что никто его не уловил).

13
ответ дан 5 December 2019 в 10:42
поделиться

Я бы предложил ImageMagick , обширную библиотеку и т. Д.

3
ответ дан 5 December 2019 в 10:42
поделиться

Сначала я бы попытался выяснить, как определяется формат файла BMP (это то, что вы подразумеваете под растровым изображением, верно?). Затем я бы преобразовал массив в этот формат и распечатал его в файл.

Если это вариант, я бы также подумал о попытке найти существующую библиотеку для создания файлов BMP и просто использовать ее.

Извините, если что Я сказал, что для вас это уже очевидно, но я не знаю, на какой стадии процесса вы застряли.

0
ответ дан 5 December 2019 в 10:42
поделиться

Было бы целесообразно инициализировать функцию как простой одномерный массив.

т.е. (где байты - это количество байтов на пиксель)

 char image[width * height * bytes];

Затем вы можете получить доступ к соответствующей позиции в массиве следующим образом

 char byte1 = image[(x * 3) + (y * (width * bytes)) + 0];
 char byte2 = image[(x * 3) + (y * (width * bytes)) + 1];
 char byte3 = image[(x * 3) + (y * (width * bytes)) + 2];
0
ответ дан 5 December 2019 в 10:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: