Qt4: Переделать С-функцию записи в файл в Qt4-функцию записи в ByteArray

Есть функция на С:
int fp_img_save_to_file(struct fp_img *img, char *path)
{
FILE *fd = fopen(path, "w");
size_t write_size = img->width * img->height;
int r;

if (!fd) {
fp_dbg("could not open '%s' for writing: %d", path, errno);
return -errno;
}

r = fprintf(fd, "P5 %d %d 255\n", img->width, img->height);
if (r < 0) {
fp_err("pgm header write failed, error %d", r);
return r;
}

r = fwrite(img->data, 1, write_size, fd);
if (r < write_size) {
fp_err("short write (%d)", r);
return -EIO;
}

fclose(fd);
fp_dbg("written to '%s'", path);
return 0;
}

Уже полночи пытаюсь переписать ее на ByteArray. Вышло пока вот это:
QByteArray create_pgm(struct fp_img *img)
{
    int width = fp_img_get_width(img);
    int height = fp_img_get_height(img);
    //int size = width * height;
    unsigned char * data = fp_img_get_data(img);

    QBuffer buffer;

    buffer.open(QIODevice::WriteOnly);
    QDataStream out(&file);

    out << "P5 " << width << " " << height << " 255" << endl;
    out << data;
    buffer.close();
    QByteArray byteArray(buffer.data());

    return byteArray;
}

Но пишется в массив какая-то ахинея. P5, например, не в начале, а где-то на 5-6 байтах. В чем проблема?

P.S. Эта функция пишет PGM изображение из GrayScale Data.

0
Robotex - 21 Февраль, 2011 - 09:23

Сделал вот таким вот способом. Но возможно существует более элегантное решение?

QByteArray create_pgm(struct fp_img *img)
{
    int width = fp_img_get_width(img);
    int height = fp_img_get_height(img);
    int size = width * height;
    unsigned char * data = fp_img_get_data(img);

    QByteArray byteArray;
    QBuffer buffer(&byteArray);
    buffer.open(QIODevice::WriteOnly);

    // вот это вот место не нравится
    QString str;
    str.sprintf("P5 %d %d 255\n", width, height);
    buffer.write(QByteArray(str.toAscii()));

    buffer.write(QByteArray::fromRawData(reinterpret_cast < const char* > (data), size));
    buffer.close();

    return byteArray;
}

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры