Hi,
I've got some trouble opening files saved by The Gimp in BMP 16bits 565. I've test some various bmp they all work except those saved from The Gimp and I really don't know why the format might be different from the one found there:http://wvnvaxa.wvnet.edu/vmswww/bmp.html
Bleu.bmp and Mire.bmp are some files that can't be show properly while test16bf565.bmp can be open.
I've written a little program that load BMP and show them by a label with a pyQt window.
It looks like this :
from PyQt4 import QtGui, QtCore
import sys, os
class Ui_ShowBmp(QtGui.QMainWindow):
def setupUi(self, ShowBmp):
ShowBmp.setObjectName("ShowBmp")
ShowBmp.resize(660, 529)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(ShowBmp.sizePolicy().hasHeightForWidth())
ShowBmp.setSizePolicy(sizePolicy)
self.centralwidget = QtGui.QWidget(ShowBmp)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout_2 = QtGui.QVBoxLayout(self.centralwidget)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.verticalLayout = QtGui.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.label = QtGui.QLabel(self.centralwidget)
self.label.setPixmap(QtGui.QPixmap("Sample.bmp"))
self.label.setObjectName("label")
self.verticalLayout.addWidget(self.label)
self.loadButton = QtGui.QPushButton(self.centralwidget)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.loadButton.sizePolicy().hasHeightForWidth())
self.loadButton.setSizePolicy(sizePolicy)
self.loadButton.setObjectName("loadButton")
self.verticalLayout.addWidget(self.loadButton)
self.verticalLayout_2.addLayout(self.verticalLayout)
ShowBmp.setCentralWidget(self.centralwidget)
self.retranslateUi(ShowBmp)
QtCore.QMetaObject.connectSlotsByName(ShowBmp)
def retranslateUi(self, ShowBmp):
ShowBmp.setWindowTitle(QtGui.QApplication.translate("ShowBmp", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
self.loadButton.setText(QtGui.QApplication.translate("ShowBmp", "Load", None, QtGui.QApplication.UnicodeUTF8))
class Ui_Extension(Ui_ShowBmp):
def __init__ (self):
self.app = QtGui.QApplication(sys.argv)
QtGui.QMainWindow.__init__(self)
self.window = QtGui.QMainWindow()
self.setupUi(self.window)
self.createSignals()
self.window.show()
self.curdir = os.getcwd()
(self.xsize,self.ysize) = ("0","0")
def createSignals(self):
QtCore.QObject.connect(self.loadButton, QtCore.SIGNAL("clicked()"), self.pushedLoadBmpButton)
def pushedLoadBmpButton(self):
self.imagepath = QtGui.QFileDialog.getOpenFileName(self,"Select BMP", self.curdir, ("BMP (*.bmp)"))
(self.xsize,self.ysize) = self.getSize(self.imagepath)
self.image = QtGui.QImage(str(self.imagepath))
self.label.setGeometry(10, 10,int(self.xsize), int(self.ysize))
self.label.setPixmap(QtGui.QPixmap.fromImage(self.image))
def getSize(self,filepath):
'''Return the size from the bmp loaded'''
file = open(filepath,"rb")
fileread = file.read()
file.close()
header = fileread[:71]
xpixels = header[21:17:-1]
xlist = []
for c in xpixels:
data = str(hex(ord(c)))
if len(data) == 3:
data = 'x0'.join(data.split('x'))
xlist.append(data)
xsize = int('0x'+''.join(''.join(xlist).split('0x')),base = 16)
ypixels = header[25:21:-1]
ylist = []
for c in ypixels:
data = str(hex(ord(c)))
if len(data) == 3:
data = 'x0'.join(data.split('x'))
ylist.append(data)
ysize = int('0x'+''.join(''.join(ylist).split('0x')),base = 16)
return (str(xsize),str(ysize))
class Ui_ShowBmp(QtGui.QMainWindow):
def setupUi(self, ShowBmp):
ShowBmp.setObjectName("ShowBmp")
ShowBmp.resize(660, 529)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(ShowBmp.sizePolicy().hasHeightForWidth())
ShowBmp.setSizePolicy(sizePolicy)
self.centralwidget = QtGui.QWidget(ShowBmp)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout_2 = QtGui.QVBoxLayout(self.centralwidget)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.verticalLayout = QtGui.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.label = QtGui.QLabel(self.centralwidget)
self.label.setPixmap(QtGui.QPixmap("Sample.bmp"))
self.label.setObjectName("label")
self.verticalLayout.addWidget(self.label)
self.loadButton = QtGui.QPushButton(self.centralwidget)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.loadButton.sizePolicy().hasHeightForWidth())
self.loadButton.setSizePolicy(sizePolicy)
self.loadButton.setObjectName("loadButton")
self.verticalLayout.addWidget(self.loadButton)
self.verticalLayout_2.addLayout(self.verticalLayout)
ShowBmp.setCentralWidget(self.centralwidget)
self.retranslateUi(ShowBmp)
QtCore.QMetaObject.connectSlotsByName(ShowBmp)
def retranslateUi(self, ShowBmp):
ShowBmp.setWindowTitle(QtGui.QApplication.translate("ShowBmp", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
self.loadButton.setText(QtGui.QApplication.translate("ShowBmp", "Load", None, QtGui.QApplication.UnicodeUTF8))
def ShowBmp():
ui = Ui_Extension()
sys.exit(ui.app.exec_())
if __name__ == '__main__':
ShowBmp()
Thanks in advance for your help