@just_asker

Как создать изображение из массива uint8_t?

Здравствуйте, хочу создать изображение из массива uint8_t.
Пытаюсь создать изображение в формате .bmp, файл создается но результат не тот.
5fca07e4d4c0a656974847.png
это правильное изображение, которое я приобразовал через сервис image2cpp в uint8_t массив.

Теперь через этот массив я хочу сделать изображение в формате .bmp;

вот код массива в целом

uint8_t *image = new uint8_t[] {
0x1f, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0x7f, 0xfc, 0x7f, 0xff, 0x7f, 0xfe, 0xff, 0x7f, 0x7f, 0xff,
0xff, 0x7f, 0x7f, 0xff, 0xff, 0x7f, 0x7f, 0xff, 0xff, 0x7f, 0x7f, 0xff, 0xff, 0x7f, 0x7f, 0xff,
0xc0, 0x01, 0x40, 0x03, 0xff, 0x7f, 0x7f, 0xff, 0xff, 0x7f, 0x7f, 0xff, 0xff, 0x7f, 0x7f, 0xff,
0xff, 0x7f, 0x7f, 0xff, 0xff, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x80, 0x00, 0x00, 0x01,
0xff, 0xff, 0x7f, 0xff, 0xdf, 0xfd, 0x7f, 0xff, 0xef, 0xfb, 0x7f, 0xff, 0xf7, 0xf7, 0x7f, 0xff,
0xfb, 0xef, 0x7f, 0xff, 0xfd, 0xdf, 0x7f, 0xff, 0xfe, 0xbf, 0x40, 0x03, 0xff, 0x3f, 0x7f, 0xff,
0xff, 0x3f, 0x40, 0x03, 0xfe, 0xdf, 0x7f, 0xff, 0xfd, 0xef, 0x7f, 0xff, 0xfb, 0xf7, 0x7f, 0xff,
0xf7, 0xfb, 0x7f, 0xff, 0x6f, 0xfd, 0x7f, 0xfe, 0x3f, 0xff, 0x7f, 0xfc, 0x1f, 0xff, 0xff, 0xf8
};

Пытаюсь сделать через Qt следующее:
QImage *img = new QImage(image, 32, 32, QImage::Format_Grayscale8);
image->save("out.bmp");

файл создается, изображение черно-белое, но глитч эффект не радует глаз

Что я делаю не так? Дайте советы как можно добиться исходного изображения в формате .bmp из массива.
  • Вопрос задан
  • 384 просмотра
Решения вопроса 1
@just_asker Автор вопроса
Решение моей проблемы:
QImage img(QImage(bitmap, width, height, (width + 7) / 8, QImage::Format_Mono));

// отображение img на форму если кому интересно:
QWidget window;
QLabel label(&window);
QPixmap image_pix(QPixmap::fromImage(image));
label.setPixmap(image_pix);
image_pix.save("out.bmp");
window.show();
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Mercury13
Программист на «си с крестами» и не только
Дело не в этом. Массив 16·8 (вместо 32×32) и такая картинка — вероятно, формат 1-битный.
Попробуйте Format_Mono или Format_MonoLSB.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы