qt 将图片输出二进制

来源:互联网 发布:交通数据开放平台 编辑:程序博客网 时间:2024/05/16 19:15
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "qstring.h"
#include "qimage"
#include <qfiledialog.h>
#include <qmessagebox.h>
#include <QDataStream>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::on_pushButton_clicked()
{
    QString filename,filenameout;
    int  Image_Width=ui->label->width();
     int Image_Height=ui->label->height();
     QImage *image ;
      image=new QImage(Image_Width,Image_Height,QImage::Format_RGB32);//设置图片大小和图片类型      //RGB32位
        filename=QFileDialog::getOpenFileName(this,QString::fromLocal8Bit("选择图像"),"",tr("Images (*.png *.bmp *.jpg *.tif *.GIF )"));
        if(!filename.isEmpty())
        {
            if(image->load(filename))//读取图像
            {
                ui->label->setPixmap(QPixmap::fromImage(*image));
            }
            else
            {
                QMessageBox::information(this,QString::fromLocal8Bit("打开图像失败"),QString::fromLocal8Bit("打开图像失败!"));
                //delete image;
                return;
            }
        }
        else
        {
           return;
        }
                int width=image->width();//图像宽
                int height=image->height();//图像高
                int bytePerLine=(width*24+31)/8;//图像每行字节对齐
                unsigned char *data=image->bits();
                char unsigned *graydata;
                    float *red;
                        graydata=new unsigned char[bytePerLine*height];//存储处理后的数据
                        red = new float[width*height];//存储处理后的数据
                unsigned char r,g,b;
                for (int i=0;i<height;i++)
                {
                    for (int j=0;j<width;j++)
                    {
                        r = *(data+2);
                        g = *(data+1);
                        b = *data;
                        graydata[i*bytePerLine+j*3]  =(r*30+g*59+b*11)/100;
                        graydata[i*bytePerLine+j*3+1]=(r*30+g*59+b*11)/100;
                        graydata[i*bytePerLine+j*3+2]=(r*30+g*59+b*11)/100;
                        red[i*width+j]=1.0*(r*30+g*59+b*11)/100.0;
                        data+=4;
                    }
                }
                filenameout=filename;
                filenameout.append(".dat");
                QMessageBox::information(this,filename,filenameout);
                //filenameout=QFileDialog::getOpenFileName(this,QString::fromLocal8Bit("选择图像"),"",tr("bin (*.bin )"));
                QFile file(filenameout);
               file.open(QIODevice::WriteOnly);
                    QDataStream out(&file);
                    for (int i=0;i<height;i++)
                    {
                        for (int j=0;j<width;j++)
                        {
                       // float b  = red[i*width+j] ;
                        //file.write(&red[i*width+j], sizeof(float));
                        //file.write((char*)&b, sizeof(b));
                        out<<red[i*width+j];
                        }}
}
原创粉丝点击