Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: BABAH от Октябрь 27, 2009, 18:37



Название: QImage->QBuffer->file == лишние байты
Отправлено: BABAH от Октябрь 27, 2009, 18:37
Незнаю уже и в чем проблема,бьюсь целый день и не могу понять,что не так.
При выводе изображения из QImage в QBuffer, а из него в файл или в stdout появляются из неоткуда лишние байты и картинка получается поврежденной...Если сохранять картинку стандартным QImage::write(), то все нормально и работает.В дебаге все нормально QBuffer::size() такой какой и должен быть. 

код:
#include <QApplication>
#include <QImage>
#include <QVector>
#include <iostream>
#include <fstream>
using namespace std;

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QGraphicsScene scene;
    scene.addEllipse(QRectF(0,0,100,100), QPen(Qt::black,2),QBrush(QColor(64,78,128,192)));

    QImage image(scene.itemsBoundingRect().size().toSize(),
          QImage::Format_ARGB32_Premultiplied);

    image.fill(0);

    QPainter painter(&image);
    painter.setRenderHint(QPainter::Antialiasing);
    scene.render(&painter);
    painter.end();


    QByteArray ba(0);
    QBuffer buffer(&ba);
    buffer.open(QIODevice::ReadWrite);
    image.save(&buffer,"png");//полный отстой...
    image.save("c:\\4.png");//Выводится без проблем и все супер

    ofstream f("c:\\s.png");
    cout<<"Content-type: image/png" << endl
    << "Content-Length:" << (int)buffer.size() << endl;
    f.write(buffer.data().data(), (int)buffer.size());
    f.close();

    return 0;
}


Название: Re: QImage->QBuffer->file == лишние байты
Отправлено: Rcus от Октябрь 27, 2009, 18:51
Может проблема в том что при записи бинарных данных нужно открывать ofstream в binary режиме?
пробовали побайтное сравнение файлов? если моя гипотеза верна, то искажения должны быть около 0x13 0x10.


Название: Re: QImage->QBuffer->file == лишние байты
Отправлено: BABAH от Октябрь 27, 2009, 18:57
так оно и есть))спасибо большое, сам бы я точно не догадался бы)) :)