2014-01-05 2 views
1

Можно ли загружать исходное содержимое файла изображения с помощью QT и иметь его как QString?Можно загрузить содержимое QImage в QString?

Причина, о которой я прошу, заключается в том, что мне нужно загрузить изображение, зашифровать данные изображения и затем отправить его на сервер. Поэтому мне нужно прочитать необработанные данные с изображения и выполнить шифрование rijndael-128, прежде чем отправлять его.

Спасибо!

+1

QByteArray QByteArray :: toBase64() const => QString str = myImage.toBase64(); – ManuelH

+1

QString для текста (unicode), для необработанных данных, таких как изображения, используется QByteArray. –

+0

@FrankOsterfeld: Хе-хе, мы думали и писали то же самое одновременно. :-) – lpapp

ответ

0

Используйте QImage::bits() или QImage::constBits(), чтобы получить двоичные (несжатые) данные изображения.

Смотрите пример в функции FreedesktopImage::FreedesktopImage(const QImage &img) здесь: https://github.com/laanwj/bitcoin/blob/master/src/qt/notificator.cpp#L119 о том, как скопировать данные в QByteArray.

Но вопрос в том, действительно ли вам нужно загружать файлы изображений в QImage, прежде чем вы их зашифруете? Вы выполняете тяжелые манипуляции с изображениями?

1

Данные изображения не похожи на QString, который помогает отображать символы UTF, поэтому эта идея преобразования звучит странно. Во всяком случае, я бы предложил отправить необработанные данные файла с помощью QByteArray и/или QDataStream.

В любом случае, вот методы, которые вы могли бы использовать для своего первоначального вопроса. Это будет первый шаг, и тогда вы сможете создать свой QByteArray или QString. Обратите внимание, что эти методы возвращают unsigned char, а не подписывают то, что ожидает конструктор вышеупомянутых классов.

uchar * QImage::bits()

Возвращает указатель на первые данные пикселей. Это эквивалентно scanLine (0).

Обратите внимание, что QImage использует неявный обмен данными. Эта функция выполняет глубокую копию данных общего пикселя, тем самым гарантируя, что этот QImage является единственным, использующим текущее возвращаемое значение.

const uchar * QImage::bits() const

Это перегруженная функция.

const uchar * QImage::constBits() const

Возвращает указатель на первые данные пикселей.

Обратите внимание, что QImage использует неявный обмен данными, но эта функция не выполняет глубокую копию данных общего пикселя, поскольку возвращаемые данные являются константами.