Преобразовать изображение в формате uint16 в qimage

Я попытался преобразовать изображение dicom, считанное из устройства чтения изображений gdcm, которое имеет фотометрическую интерпретацию как "monochrome2" и формат пикселей как unsigned int 16 или uint16, я пробовал следующий код поверх него, но не выдает нужное изображение, пожалуйста, помогите.

        QVector<QRgb> table(2);
        for(int c=0;c<256;c++)
        {
            table.append(qRgb(c,c,c));
        }
        std::cout << "this is the format UINT16" << std::endl;
        int size = dimX*dimY*2; // length of data in buffer, in bytes
        quint8 * output = reinterpret_cast<quint8*>(buffer);
        const quint16 * input = reinterpret_cast<const quint16*>(buffer);
        do {
            *output++ = (*input) >> 8;
        } while (size -= 2);
        imageQt = new QImage(output, dimX, dimY, QImage::Format_Indexed8);
        imageQt->setColorTable(table);

С уважением

1 ответ

Я думаю, что вижу твою проблему. Вы записываете данные для вывода и увеличиваете указатель для вывода по мере продвижения.

Затем вы создаете QImage, указывающее на конец растрового изображения.

Вам нужно сделать следующее:

imageQt = new QImage( reinterpret_cast< uchar* >( buffer ), dimX, dimY, QImage::Format_Indexed8);

Изменить: Также вы не продвигаете указатель ввода.

Вам нужно изменить свой внутренний цикл следующим образом:

*output++ = (*input++) >> 8;
Другие вопросы по тегам