[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    extragear/graphics/gwenview
From:       Angelo Naselli <anaselli () linux ! it>
Date:       2007-03-25 21:14:58
Message-ID: 1174857298.145066.32682.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 646489 by anaselli:

Now jpeg with exif info can be managed for printing without scaling as well.
Please Aurélien take a look at it.

CCBUG:129948
CCMAIL:gwenview-general@lists.sourceforge.net

 M  +2 -0      gvcore/imageloader.cpp  
 M  +60 -0     imageutils/jpegcontent.cpp  
 M  +3 -0      imageutils/jpegcontent.h  


--- trunk/extragear/graphics/gwenview/gvcore/imageloader.cpp #646488:646489
@@ -673,6 +673,8 @@
 					QSize size = content.size();
 					d->mProcessedImage = QImage(size, d->mDecoder.image().depth());
 				}
+				d->mProcessedImage.setDotsPerMeterX(content.getDotsPerMeterX());
+				d->mProcessedImage.setDotsPerMeterY(content.getDotsPerMeterY());
 			} else {
 				kdWarning() << "ImageLoader::changed(): JPEGContent could not load '" << \
d->mURL.prettyURL() << "'\n";  }
--- trunk/extragear/graphics/gwenview/imageutils/jpegcontent.cpp #646488:646489
@@ -290,6 +290,66 @@
 }
 
 
+int JPEGContent::getDotsPerMeterX() const {
+	Exiv2::ExifKey keyResUnit("Exif.Image.ResolutionUnit");
+	Exiv2::ExifData::iterator it = d->mExifData.findKey(keyResUnit);
+	if (it == d->mExifData.end()) {
+		return 0;
+	}
+	int XRes = it->toLong();
+	Exiv2::ExifKey keyXResolution("Exif.Image.XResolution");
+	it = d->mExifData.findKey(keyXResolution);
+	if (it == d->mExifData.end()) {
+		return 0;
+	}
+	// The unit for measuring XResolution and YResolution. The same unit is used for \
both XResolution and YResolution. +	//     If the image resolution in unknown, 2 \
(inches) is designated. +	//         Default = 2
+	//         2 = inches
+	//         3 = centimeters
+	//         Other = reserved
+	const float INCHESPERMETER = (100. / 2.54); 
+	switch (XRes) {
+	case 3:  // dots per cm 
+		return (it->toLong() * 100); 
+	default:  // dots per inch 
+		return (it->toLong() * INCHESPERMETER); 
+	}
+
+	return 0;
+}
+
+
+int JPEGContent::getDotsPerMeterY() const {
+	Exiv2::ExifKey keyResUnit("Exif.Image.ResolutionUnit");
+	Exiv2::ExifData::iterator it = d->mExifData.findKey(keyResUnit);
+	if (it == d->mExifData.end()) {
+		return 0;
+	}
+	int YRes = it->toLong();
+	Exiv2::ExifKey keyYResolution("Exif.Image.YResolution");
+	it = d->mExifData.findKey(keyYResolution);
+	if (it == d->mExifData.end()) {
+		return 0;
+	}
+	// The unit for measuring XResolution and YResolution. The same unit is used for \
both XResolution and YResolution. +	//     If the image resolution in unknown, 2 \
(inches) is designated. +	//         Default = 2
+	//         2 = inches
+	//         3 = centimeters
+	//         Other = reserved
+	const float INCHESPERMETER = (100. / 2.54); 
+	switch (YRes) { 
+	case 3:  // dots per cm 
+		return (it->toLong() * 100); 
+	default:  // dots per inch 
+		return (it->toLong() * INCHESPERMETER); 
+	}
+
+	return 0;
+}
+
+
 void JPEGContent::resetOrientation() {
 	Exiv2::ExifKey key("Exif.Image.Orientation");
 	Exiv2::ExifData::iterator it = d->mExifData.findKey(key);
--- trunk/extragear/graphics/gwenview/imageutils/jpegcontent.h #646488:646489
@@ -43,6 +43,9 @@
 	
 	Orientation orientation() const;
 	void resetOrientation();
+  
+	int getDotsPerMeterX() const;
+	int getDotsPerMeterY() const;
 
 	QSize size() const;
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic