QT读取图像文件并保存为TXT文档
1,因为在tensbench中对图像数据进行仿真,需要读取图像数据并模拟帧使能,数据使能和数据输出;但是verilog不能直接读取文件数据(也许是我能力不足,没有找到verilog在testbench中直接读取图片文件的方法,汗、瀑布汗。。。。。。),所以使用QT写了一个简单的小程序,读取png图片,并保存为txt文件;
在转换的过程中,需要注意的是,QImage.pixel(j, i),这里出现了一些问题;
按照C语言中正常读取数组的方法,应该是按照行列循环读取,正常的读取是:
for(int i=0; i<height; i++)
{
for(int j=0; j<width; j++)
{
QImage.pixel(i, j);
}
}
但是在Qt中这样读取的数据将不正确;提示超出了像素的访问范围;
经过查找发现像素的访问模式是不一样的;
应该为:
for(int i=0; i<height; i++)
{
for(int j=0; j<width; j++)
{
QImage.pixel(j, i);
}
}
在此记录一下,提醒自己以后不要再犯同类的错误;
代码如下
QImage Tools::SavePictureToTxt(QImage origin)
{
//以原图的大小生成一张图片
QImage *newImage = new QImage(origin.width(), origin.height(), QImage::Format_ARGB32);
QColor oldColor;
QFile file("D:\\Project\\Simulate_Data\\1.txt");
if(!file.open(QIODevice::WriteOnly | QIODevice::Text|QIODevice::Append))
{
qDebug()<<"file can't open!"<<endl;
}
else
{
file.open(QIODevice::WriteOnly); //打开txt文件,并将图像数据存入txt中
qDebug()<<"Open File Success!"<<endl;
}
QTextStream in(&file);
for(int i=0; i<newImage->height(); i++)
{
in<<i<<" : ";
for(int j=0; j<newImage->width(); j++)
{
//读取原图片的RGB
oldColor = QColor(origin.pixel(j, i));
in<<oldColor.red()<< " "<<oldColor.green()<< " "<<oldColor.blue()<<" ";
if(j == newImage->width()-1)
{
in<<"end"<<"\n";
}
}
}
file.close();
return *newImage;
}