QImage с глубиной цвета 16 бит



  • Мне нужно вывести в GUI черно-белую картинку с глубиной цвета 16 бит.

    Картинку инициализирую так:
    QImage image = QImage(fileWidth, fileHeight, QImage::Format_Grayscale16);

    Дальше в коде в цикле заполняю картинку пикселями и вывожу с помощью QLabel в GUI:
    for (int i = 0; i < map.size(); i++)
    {
    int y = i / fileHeight;
    int x = i - y * fileWidth;
    Pixel p = Pixel(x, y, 0);
    float noiseColor = makePerlinNoise(p) * (float)color;
    quint16 resultColor;
    if (noiseColor > 0)
    resultColor = noiseColor + map[i];
    else
    resultColor = 0;
    newMap.append(resultColor);
    image.setPixelColor(x, y, resultColor);
    imagePixels.append(image.pixelColor(x,y));
    }
    imageLabel->setPixmap(QPixmap::fromImage(image));

    Здесь у меня два QVector<quint16> - это map - первоначальная картинка и newMap - картинка после добавления шума Перлина. Ну и собственно картинка image, для вывода в GUI. Данные для map берутся из внешнего файла в формате raw, newMap записывается в другой raw-файл, и результат можно посмотреть, открыв файл в фотошопе.

    Мне нужно, чтобы в GUI выводилась та же самая картинка, что и в итоговом raw-файле, но почему то все работает неправильно. Это можно увидеть на приложенных картинках. Первая - это как должно быть, второе - результат в GUI. Тут видимо происходит превышение допустимых значений, из-за чего появляются характерные полоски. То есть 16-битное число не помещается в пиксель QImage, или что то вроде того. Хотя я указал формат Grayscale16 при инициализации.
    0_1562418994858_Снимок1.PNG 0_1562419002356_Снимок2.PNG

    Может кто нибудь поможет мне понять, где моя ошибка?


Log in to reply