From 54d42c46eece26d1b7f49bb2958304315bd42e2b Mon Sep 17 00:00:00 2001 From: Nicolas Dufour Date: Mon, 23 Jul 2012 20:34:01 +0200 Subject: Bitmap. Fix for Bug #165952 (png resolution not imported) by Daniel Wagenaar. (bzr r11567) --- src/extension/internal/Makefile_insert | 5 ++++- src/extension/internal/gdkpixbuf-input.cpp | 33 ++++++++++++++++++++++++++---- 2 files changed, 33 insertions(+), 5 deletions(-) (limited to 'src/extension') diff --git a/src/extension/internal/Makefile_insert b/src/extension/internal/Makefile_insert index 06fa275cb..e9b11553b 100644 --- a/src/extension/internal/Makefile_insert +++ b/src/extension/internal/Makefile_insert @@ -136,4 +136,7 @@ ink_common_sources += \ extension/internal/emf-win32-print.h \ extension/internal/emf-win32-print.cpp \ extension/internal/emf-win32-inout.h \ - extension/internal/emf-win32-inout.cpp + extension/internal/emf-win32-inout.cpp \ + extension/internal/image-resolution.h \ + extension/internal/image-resolution.cpp + diff --git a/src/extension/internal/gdkpixbuf-input.cpp b/src/extension/internal/gdkpixbuf-input.cpp index 80be2ecc2..30c4d4338 100644 --- a/src/extension/internal/gdkpixbuf-input.cpp +++ b/src/extension/internal/gdkpixbuf-input.cpp @@ -12,6 +12,8 @@ #include "selection-chemistry.h" #include "sp-image.h" #include "document-undo.h" +#include "unit-constants.h" +#include "image-resolution.h" #include namespace Inkscape { @@ -77,22 +79,45 @@ GdkpixbufInput::open(Inkscape::Extension::Input *mod, char const *uri) double width = gdk_pixbuf_get_width(pb); double height = gdk_pixbuf_get_height(pb); + double defaultxdpi = prefs->getDouble("/dialogs/import/defaultxdpi/value", PX_PER_IN); + ImageResolution *ir = 0; + double xscale = 1; + double yscale = 1; + gchar const *str = gdk_pixbuf_get_option( pb, "Inkscape::DpiX" ); if ( str ) { gint dpi = atoi(str); if ( dpi > 0 && dpi != 72 ) { - double scale = 72.0 / (double)dpi; - width *= scale; + xscale = 72.0 / (double)dpi; } + } else { + if (!ir) + ir = new ImageResolution(uri); + if (ir->ok()) + xscale = 90.0 / ir->x(); + else + xscale = 90.0 / defaultxdpi; } + width *= xscale; + str = gdk_pixbuf_get_option( pb, "Inkscape::DpiY" ); if ( str ) { gint dpi = atoi(str); if ( dpi > 0 && dpi != 72 ) { - double scale = 72.0 / (double)dpi; - height *= scale; + yscale = 72.0 / (double)dpi; } + } else { + if (!ir) + ir = new ImageResolution(uri); + if (ir->ok()) + yscale = 90.0 / ir->y(); + else + yscale = 90.0 / defaultxdpi; } + height *= yscale; + + if (ir) + delete ir; // Create image node Inkscape::XML::Document *xml_doc = doc->getReprDoc(); -- cgit v1.2.3