应用场景:
需要显示图片的同时也需要图片的二进制数据。例如需要将图片作为二进制数据转化为string发送,而同时需要显示图片。
主要思路:
将图片文件用二进制格式读入,然后将二进制数据加载到 QImage 中,达到显示效果。让后根据需要,将读取到的二进制数据自行做处理。
主要代码:
//begin std::ifstream fileInput("F:\\VSprojects\\DChat\\1.jpg", std::ios_base::binary); //获取文件大小 fileInput.seekg(0, std::ios_base::end); const size_t maxSize = fileInput.tellg(); //重置文件指针 fileInput.seekg(0, std::ios_base::end); //读取图片文件 char *picBin = new char[maxSize]; fileInput.read(picBin, maxSize); //载入二进制数据初始化Qimage QImage img; img.loadFromData((uchar*)picBin, maxSize); //显示图片QImage QDialog *newDialog = new QDialog(); QLabel *picLabel = new QLabel(newDialog); picLabel->setPixmap(QPixmap::fromImage(img)); newDialog->show(); newDialog->setVisible(true); //复制图片 std::ofstream fileOutput("F:/VSprojects/DChat/2.jpg", std::ios_base::binary); fileOutput.write(picBin, maxSize); fileInput.close(); fileOutput.close(); //end
其他说明:
std::ifstream::seekg(streampos pos); //设置指针位置。
std::ifstream::seekg(strrampoff off, std::ios_base::seekdir way); //设置指针起始位置以及偏移量, off为偏移量。
参考:http://www.cplusplus.com/reference/istream/istream/seekg/
结果截图:
最后:
如有错漏,欢迎指点。。
时间: 2024-10-25 07:02:04