2013-02-27 71 views
1

我正在像下面这样的图像文件中实例化一个QImage,然后将它呈现在QWidget上。对于某些图像,QImage的加载方向错误

QImage (const QString & fileName, const char * format = 0) 

对于大多数图像,一切工作正常。但是对于一些图像,QImage会载入90度旋转的图像。

看来,这种情况只会出现在我的手机拍摄的肖像模式中。那些在风景拍摄的罚款

+1

也许图像包含一些关于方向的元数据,并且您正在使用的图像查看器根据该信息旋转图像。 – 2013-02-27 22:10:21

回答

1

您可能需要使用一个库像libexif确定照片方向,然后旋转的QImage相应

+0

你知道哪个'libexif' API可以告诉照片的方向吗?更好的是,Qt中有一个库可以完成这项工作吗? – 2013-02-28 05:07:46

+0

@SaptarshiBiswas我简单地看了一下,它看起来并不像Qt处理exif。 exif中的旋转属性称为orientation,我相信。 libexif是一个非常简单的库,可以使用并且拥有非常开放的许可证。很容易融入现有项目。 – cppguy 2013-02-28 19:14:33

+1

'libexif'为我工作。 – 2013-03-01 05:06:42

1

https://discussions.apple.com/thread/2541504?start=0&tstart=0

这听起来像这是一个很常见的问题,在这里图像上添加了一些标志或标签,说明如何旋转它,而不是实际重新排序图像中的像素。对于要呈现的图像,您可以采用您尝试使用的格式,并查看是否有任何额外的标记可以检查并让Qt执行旋转。

听起来像cppguy知道一个库,可以让你检查这些标志。

编辑为它找到一个更好的描述:

johninsj - 回复:iPhone 4照片的&视频旋转横盘电子邮件

2010年11月2日1:45 PM(响应VibrantRedGT)

当你拍摄照片时,苹果会设置jpeg中继标记的方向,所以如果你拿着iphone上下或侧身等,图像 (由于相机向上拍摄,因为相机向上拍摄 向下/侧身)知道它需要翻转/旋转图像,当你看它 。

并非所有的软件都支持旋转设置。瘸子(它运行在 的一切,并且是免费的)。

您可以旋转图像并保存它们,或者学习如何使用iPhone以正确的方向拍摄未旋转图像的照片。当你看着屏幕时, 将与主屏幕按钮向右。

希望有所帮助。

+0

感谢您的好解释。有没有办法在Qt中读取exif而不是像cppguy中提到的那样使用外部库? – 2013-02-28 06:12:35

+0

这两个问题:http://stackoverflow.com/questions/15128656/read-exif-metadata-of-images-in-qt和http://stackoverflow.com/questions/4105534/what-exif-lib-can -i-use-from-a-qt-program-on-embedded-linux?rq = 1可能会有帮助。它看起来像是有什么东西,你可以添加:http://doc.qt.digia.com/qtextended4.4/qexifimageheader.html – phyatt 2013-02-28 16:20:50

+1

由于QExifImageHeader不是Qt的一部分,我对它的支持和维护有疑问方面 - 所以我按照cppguy的建议使用libexif。 – 2013-03-01 05:08:58