diff -Naur old/mythplugins-0.20.2/mythgallery/mythgallery/galleryutil.cpp new/mythplugins-0.20.2/mythgallery/mythgallery/galleryutil.cpp
--- old/mythplugins-0.20.2/mythgallery/mythgallery/galleryutil.cpp	2007-08-02 00:17:46.000000000 +1000
+++ new/mythplugins-0.20.2/mythgallery/mythgallery/galleryutil.cpp	2007-11-11 16:41:45.000000000 +1100
@@ -28,6 +28,11 @@
 #include "galleryutil.h"
 #include "thumbgenerator.h"
 
+#ifdef Q_WS_X11
+#define USING_XV
+#include "util-x11.h"
+#endif // Q_WS_X11
+
 #ifdef EXIF_SUPPORT
 #include <libexif/exif-data.h>
 #include <libexif/exif-entry.h>
@@ -348,6 +353,51 @@
     return false;
 }
 
+QSize GalleryUtil::ScaleToDest(QSize sz, QSize dest)
+{
+
+    // calculate screen pixel aspect ratio
+    double pixelAspect = 1.0;
+#ifdef Q_WS_X11
+    Display *display = MythXOpenDisplay();
+    int scr = DefaultScreen(display);
+    int displayWidthPixel  = DisplayWidth(display,scr);
+    int displayHeightPixel = DisplayHeight(display,scr);
+    int displayWidthMM     = DisplayWidthMM(display,scr);
+    int displayHeightMM    = DisplayHeightMM(display,scr);
+    // avoid divide by 0
+    if ((displayWidthPixel != 0) && (displayHeightPixel != 0) &&
+        (displayWidthMM != 0) && (displayHeightMM != 0))
+    {
+        pixelAspect = 
+            ((double)displayWidthMM / (double)displayWidthPixel) /
+            ((double)displayHeightMM / (double)displayHeightPixel);
+    }
+#endif // Q_WS_X11
+
+    // calculate image aspect ratio
+    double imageAspect = 1.0;
+    // avoid divide by 0
+    if ((sz.width() != 0) && (sz.height() != 0))
+    {
+        imageAspect =
+           (double)sz.width() / (double)sz.height();
+    }
+
+    // scale to dest height for most images
+    int scalewidth = (int)((float)dest.height() * imageAspect / pixelAspect);
+    int scaleheight = dest.height();
+    if (scalewidth > dest.width())
+    {
+        // scale to dest width for extra wide images
+        scalewidth = dest.width();
+        scaleheight = (int)((float)dest.width() * pixelAspect / imageAspect);
+    }
+
+    sz.scale(scalewidth, scaleheight, QSize::ScaleFree);
+    return sz;
+}
+
 bool GalleryUtil::CopyDirectory(const QFileInfo src, QFileInfo &dst)
 {
     QDir srcDir(src.absFilePath());
diff -Naur old/mythplugins-0.20.2/mythgallery/mythgallery/galleryutil.h new/mythplugins-0.20.2/mythgallery/mythgallery/galleryutil.h
--- old/mythplugins-0.20.2/mythgallery/mythgallery/galleryutil.h	2006-07-22 05:05:04.000000000 +1000
+++ new/mythplugins-0.20.2/mythgallery/mythgallery/galleryutil.h	2007-11-11 14:52:55.000000000 +1100
@@ -43,6 +43,7 @@
     static bool Copy(const QFileInfo &src, QFileInfo &dst);
     static bool Move(const QFileInfo &src, QFileInfo &dst);
     static bool Delete(const QFileInfo &file);
+    static QSize ScaleToDest(QSize sz, QSize dest);
 
   private:
     static bool CopyDirectory(const QFileInfo src, QFileInfo &dst);
diff -Naur old/mythplugins-0.20.2/mythgallery/mythgallery/gltexture.cpp new/mythplugins-0.20.2/mythgallery/mythgallery/gltexture.cpp
--- old/mythplugins-0.20.2/mythgallery/mythgallery/gltexture.cpp	2006-07-25 06:59:38.000000000 +1000
+++ new/mythplugins-0.20.2/mythgallery/mythgallery/gltexture.cpp	2007-11-11 16:36:14.000000000 +1100
@@ -26,6 +26,7 @@
 // MythGallery headers
 #include "thumbview.h"
 #include "gltexture.h"
+#include "galleryutil.h"
 
 /** \fn GLTexture::Init(const QImage&)
  *  \brief Create the texture initialized with QImage
@@ -85,8 +86,7 @@
 
 void GLTexture::ScaleTo(const QSize &dest)
 {
-    QSize sz = GetSize();
-    sz.scale(dest.width(), dest.height(), QSize::ScaleMin);
+    QSize sz = GalleryUtil::ScaleToDest(GetSize(), dest);
     SetScale((float)sz.width()  / (float)dest.width(),
              (float)sz.height() / (float)dest.height());
 }
diff -Naur old/mythplugins-0.20.2/mythgallery/mythgallery/singleview.cpp new/mythplugins-0.20.2/mythgallery/mythgallery/singleview.cpp
--- old/mythplugins-0.20.2/mythgallery/mythgallery/singleview.cpp	2006-07-25 06:59:38.000000000 +1000
+++ new/mythplugins-0.20.2/mythgallery/mythgallery/singleview.cpp	2007-11-11 16:35:34.000000000 +1100
@@ -594,9 +594,11 @@
     if (m_image.isNull())
         return;
 
-    QImage img = m_image.smoothScale((int) (screenwidth  * m_zoom),
-                                     (int) (screenheight * m_zoom),
-                                     QImage::ScaleMin);
+    QSize dest = QSize(
+        (int)(screenwidth * m_zoom),
+        (int)(screenheight * m_zoom));
+    QSize sz = GalleryUtil::ScaleToDest(m_image.size(), dest);
+    QImage img = m_image.smoothScale(sz);
 
     SetPixmap(new QPixmap(img));
 }
