Как преобразовать заголовок cv::mat и часть данных в один qbytearray?

Я хочу использовать Qftp модуль Qt 4.8.1 для отправки изображений opencv на FTP-сервер. Я написал следующий код:

        ftp = new QFtp(this);
        //ftp initilization
          .
          .
          .
          . 
        //
        cv::Mat InputImage(100,100,CV_8UC1,cv::Scalar::all(75));
        QImage FTP_Result = QImage((const uchar *) InputImage.data, InputImage.cols, InputImage.rows, InputImage.step, QImage::Format_Indexed8);
        QByteArray byteMe((char *) FTP_Result.bits());

        qDebug()<<"Image size is: "<<FTP_Result.height()<<"*"<<FTP_Result.width(); //it returns 100*100
        ftp->put(byteMe,"Sample.jpg");

Когда я захожу на жесткий диск ftp-сервера, я нахожу Sample.jpg, и он заполняется символом "K", что соответствует значению Asci "75". Кажется, что заголовок отсутствует, поэтому операционная система считает, что это простой текстовый файл. Я думаю, это потому, что я только скопировал InputImage.data в переменную QByteArray, поэтому никакой информации об изображении нет. Что я должен сделать, чтобы скопировать информацию заголовка "InputImage" в переменную "byteMe", чтобы я мог сохранить здоровый файл JPEG?

1 ответ

Пытаться

QByteArray byteMe((char *) FTP_Result.bits(), FTP_Results.byteCount());

Когда вы строите с простым char * он будет искать строку с нулевым символом в конце.

Другие вопросы по тегам