Я пишу библиотеку изображений с нуля. Я написал консольное приложение, которое загружает растровое изображение, выполняет некоторые манипуляции и записывает вывод в другое растровое изображение.Теперь я хотел бы построить пользовательский интерфейс поверх моего приложения.Поэтому я хотел бы сделать это в Qt Creator, так как у меня есть некоторый опыт работы с Qt, и я хочу, чтобы он работал на нескольких платформах.
Вот мой код, который загружает растровое изображение:
FILE *streamIn = fopen("path/to/file.bmp", "rb");
if (streamIn == (FILE *)0)
{
printf("Unable to open file\n");
}
unsigned char bmpHeader[54];
unsigned char bmpColorTable[1024];
for (int i = 0; i < 54; i++)
{
bmpHeader[i] = getc(streamIn);
}
int width = *(int *)&bmpHeader[18];
int height = *(int *)&bmpHeader[22];
int bitDepth = *(int *)&bmpHeader[28];
if (bitDepth <= 8)
{
fread(bmpColorTable, sizeof(unsigned char), 1024, streamIn);
}
unsigned char buf[height * width];
fread(buf, sizeof(unsigned char), (height * width), streamIn);
fclose(streamIn);
Как мне вставить это в мой интерфейс?Я уже пробовал что-то вроде:
const QImage image(buf, width, height, QImage::Format_Grayscale8);
imageLabel->setPixmap(QPixmap::fromImage(image));
Но это приводит к крошечному белому изображению, а не к тому, что я только что прочитал.Возможно, я могу пропустить создание QImage
и сразу создать QPixmap
?То, что я попробовал сейчас, не работает, так что, может быть, кто-то более опытный может сказать мне, как это сделать.Когда я загружал исходное изображение, я хотел бы обновить представление, когда я делаю некоторые манипуляции, чтобы пользователь мог видеть изменения.
Я знаю, что это может быть сделано намного проще с QImageReader
, но это для целей обучения.