首先声明,我是一个菜鸟。一下文章中出现技术误导情况盖不负责
从文件42.train读入一个长度为dstSize*dstSize字节数据,存到一个数组psData中,这些数据全部是像素点的值,不包括文件优等帮助信息.通过qt创建一个gui工程,基类选择QWidegt,将图片显示出来。代码如下
#include "widget.h" #include "ui_widget.h" #include <QPainter> #include <cstdio> typedef unsigned short WORD; typedef unsigned char BYTE; typedef unsigned int DWORD; const int dstSize = 128; Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); } Widget::~Widget() { delete ui; } void Widget::paintEvent(QPaintEvent *e) { QPainter paint(this); FILE *pf = NULL; const char * name = "42.train"; DWORD wsize = dstSize * dstSize; BYTE * psData = (BYTE*)malloc(wsize); if( (pf = fopen(name, "rb" )) == NULL ) { printf( "File coulkd not be opened " ); return ; } DWORD *pSrc = (DWORD*)malloc(wsize*sizeof(DWORD)); int n = fread(psData, wsize, 1, pf); if( n== 1) { for (unsigned int i = 0; i < wsize; ++i) { BYTE *pb=(BYTE *)(pSrc+i); pSrc[i] = 0; pb[0] = psData[i]; pb[1] = psData[i]; pb[2] = psData[i]; } free(psData); } QByteArray imageByteArray = QByteArray( (const char*)pSrc, wsize*4 ); uchar* transData = (unsigned char*)imageByteArray.data(); QImage image = QImage(transData, dstSize, dstSize, QImage::Format_RGB32); free(pSrc); fclose(pf); paint.drawImage(QPoint(0, 0), image); paint.end(); }
文章结束给大家分享下程序员的一些笑话语录: 开发时间
项目经理: 如果我再给你一个人,那可以什么时候可以完工?程序员: 3个月吧!项目经理: 那给两个呢?程序员: 1个月吧!
项目经理: 那100呢?程序员: 1年吧!
项目经理: 那10000呢?程序员: 那我将永远无法完成任务.
--------------------------------- 原创文章 By 文件和数据 ---------------------------------