Qt大画像を描くと表示できない問題(画像をズーム)について

1291 ワード

Qtは、ピクチャをロードする際にピクチャをキャッシュ(QPIxmapCache)に格納し、ピクチャが大きすぎてコンピュータのメモリが不足している場合、プログラムがクラッシュすることがあるため、ピクチャを処理する際にピクチャをスケールすることを考慮することができる.
ここではQImageWriterを用いてファイルを再保存するqt開発ではQpixmapで画像を描くと表示できないという問題に直面しやすいが、画像はwindowsやサードパーティツールで正常に表示できるのは、画像接尾辞が修正されたためであり、接尾辞名を変更することで回避できないためだ.
したがって,ファイルを読み書きする際に接尾辞を直接除去し,画像ファイル自体を解析することで画像フォーマットを取得することができる.
bool checkImageSize(const QString & path, const QSize & decSize)
{
	//        
	if (!QFile::exists(path)) {
		qInfo() << QStringLiteral("           ") << path;
		return false;
	}
	
	//         
	QImageReader reader(path);
	reader.setDecideFormatFromContent(true);
	if (!reader.canRead()) {
		qInfo() << QStringLiteral("      ");
		return false;
	}

	//             
	auto size = reader.size();
	if (size.width() <= decSize.width() && size.height() <= decSize.height()) {
		return true;
	}
	
	//     decSize  
	size.scale(maxSize, Qt::KeepAspectRatio);
	reader.setScaledSize(size);
	
	//      
	QByteArray imageFormat = QImageReader::imageFormat(path);
	
	//     
	QImageWriter writer(path, imageFormat);
	bool status = writer.write(reader.read());
	if (status) {
		return true;
	}

	qInfo() << QStringLiteral("    ")<< path;
	return false;
}