diff --git a/src/screenshot.cpp b/src/screenshot.cpp
index fa455049f2..47c92b400a 100644
--- a/src/screenshot.cpp
+++ b/src/screenshot.cpp
@@ -63,6 +63,7 @@ struct ScreenshotFormat {
 	const char *name;            ///< Name of the format.
 	const char *extension;       ///< File extension.
 	ScreenshotHandlerProc *proc; ///< Function for writing the screenshot.
+	bool supports_32bpp;         ///< Does this format support 32bpp images?
 };
 
 /*************************************************
@@ -568,10 +569,10 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user
 /** Available screenshot formats. */
 static const ScreenshotFormat _screenshot_formats[] = {
 #if defined(WITH_PNG)
-	{"PNG", "png", &MakePNGImage},
+	{"PNG", "png", &MakePNGImage, true},
 #endif
-	{"BMP", "bmp", &MakeBMPImage},
-	{"PCX", "pcx", &MakePCXImage},
+	{"BMP", "bmp", &MakeBMPImage, true},
+	{"PCX", "pcx", &MakePCXImage, false},
 };
 
 /** Get filename extension of current screenshot file format. */
@@ -604,6 +605,16 @@ const char *GetScreenshotFormatDesc(int i)
 	return _screenshot_formats[i].name;
 }
 
+/**
+ * Determine whether a certain screenshot format support 32bpp images.
+ * @param i Number of the screenshot format.
+ * @return true if 32bpp is supported.
+ */
+bool GetScreenshotFormatSupports_32bpp(int i)
+{
+	return _screenshot_formats[i].supports_32bpp;
+}
+
 /**
  * Set the screenshot format to use.
  * @param i Number of the format.
diff --git a/src/screenshot.h b/src/screenshot.h
index 474b93f890..844085423e 100644
--- a/src/screenshot.h
+++ b/src/screenshot.h
@@ -15,6 +15,7 @@
 void InitializeScreenshotFormats();
 
 const char *GetScreenshotFormatDesc(int i);
+bool GetScreenshotFormatSupports_32bpp(int i);
 void SetScreenshotFormat(uint i);
 const char *GetCurrentScreenshotExtension();
 
diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp
index 53217bb04a..433e49261b 100644
--- a/src/settings_gui.cpp
+++ b/src/settings_gui.cpp
@@ -32,6 +32,7 @@
 #include "viewport_func.h"
 #include "core/geometry_func.hpp"
 #include "ai/ai.hpp"
+#include "blitter/factory.hpp"
 #include "language.h"
 
 
@@ -260,6 +261,7 @@ struct GameOptionsWindow : Window {
 				list = new DropDownList();
 				*selected_index = _cur_screenshot_format;
 				for (uint i = 0; i < _num_screenshot_formats; i++) {
+					if (!GetScreenshotFormatSupports_32bpp(i) && BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() == 32) continue;
 					list->push_back(new DropDownListStringItem(SPECSTR_SCREENSHOT_START + i, i, false));
 				}
 				break;