Russian Qt Forum

Qt => Общие вопросы => Тема начата: Sergey1985 от Ноябрь 30, 2016, 12:26



Название: Как создать QImage из массива чисел
Отправлено: Sergey1985 от Ноябрь 30, 2016, 12:26
Имеется массив uchar data_image[]; Необходимо из него создать ЧЕРНО-БЕЛУЮ  картинку. Сложность для меня заключается в том, что здесь приходится два байта на пиксель. То есть глубина цвета 16 бит. Для 8 битной градации делал просто
QImage img(data_image, 512, 640,QImage::Format_Grayscale8);
А в данном случае как быть?


Название: Re: Как создать QImage из массива чисел
Отправлено: Igors от Ноябрь 30, 2016, 12:57
Насколько мне известно, такие имеджи Qt еще не поддерживает. Придется конвертировать в Greyscale (да, руками)

здесь приходится два байта на пиксель. То есть глубина цвета 16 бит.
Будьте уверены что это unsigned short (0..65536), т.к. в природе есть и др варианты (напр  2-байтный float)


Название: Re: Как создать QImage из массива чисел
Отправлено: Sergey1985 от Декабрь 03, 2016, 21:58
Придется конвертировать в Greyscale (да, руками)


А каким образом конвертировать? Ну или может просто ссылочкой хорошей поделитесь про конвертацию на Qt


Название: Re: Как создать QImage из массива чисел
Отправлено: Igors от Декабрь 04, 2016, 08:24
А каким образом конвертировать? Ну или может просто ссылочкой хорошей поделитесь про конвертацию на Qt
Такое быстрее самому написать чем ссылочки искать. Пусть данные - непрерывный массив/контейнер ushort, число эл-тов в нем = w * h. Тогда
Код
C++ (Qt)
QImage MkImage( int w, int h, const ushort * src )
{
 QImage img(w, h, QImage::Format_Grayscale8);
 for (int y = 0; y < h; ++y) {
  uchar * dst = img.scanLine(y);
  for (int x = 0; x < w; ++x) {
    dst[x] = (*src) >> 8;
    ++src;
  }
 }
 return img;
}
 
Может придется что-то изменить если исходные 2-байтовые данные имеют др порядок байт и/или др разбивку по строкам - ну то я не знаю как они организованы