Results 1 to 1 of 1

Thread: PyQt QImage and BMP in 16bits 565 created from The Gimp

  1. #1
    Join Date
    Aug 2010
    Posts
    1
    Qt products
    Platforms
    Windows

    Question PyQt QImage and BMP in 16bits 565 created from The Gimp

    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
    Here are one "bleu.bmp" that cannot be read by qimage and test16bf565.bmp that is read properly.
    Bleu.jpgtest16bf565.bmp

    I've written a little program that load BMP and show them by a label with a pyQt window.
    It looks like this :

    Qt Code:
    1. from PyQt4 import QtGui, QtCore
    2. import sys, os, wx
    3.  
    4. class Ui_ShowBmp(QtGui.QMainWindow):
    5. def setupUi(self, ShowBmp):
    6. ShowBmp.setObjectName("ShowBmp")
    7. ShowBmp.resize(660, 529)
    8. sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
    9. sizePolicy.setHorizontalStretch(0)
    10. sizePolicy.setVerticalStretch(0)
    11. sizePolicy.setHeightForWidth(ShowBmp.sizePolicy().hasHeightForWidth())
    12. ShowBmp.setSizePolicy(sizePolicy)
    13. self.centralwidget = QtGui.QWidget(ShowBmp)
    14. self.centralwidget.setObjectName("centralwidget")
    15. self.verticalLayout_2 = QtGui.QVBoxLayout(self.centralwidget)
    16. self.verticalLayout_2.setObjectName("verticalLayout_2")
    17. self.verticalLayout = QtGui.QVBoxLayout()
    18. self.verticalLayout.setObjectName("verticalLayout")
    19. self.label = QtGui.QLabel(self.centralwidget)
    20. self.label.setPixmap(QtGui.QPixmap("Sample.bmp"))
    21. self.label.setObjectName("label")
    22. self.verticalLayout.addWidget(self.label)
    23. self.loadButton = QtGui.QPushButton(self.centralwidget)
    24. sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
    25. sizePolicy.setHorizontalStretch(0)
    26. sizePolicy.setVerticalStretch(0)
    27. sizePolicy.setHeightForWidth(self.loadButton.sizePolicy().hasHeightForWidth())
    28. self.loadButton.setSizePolicy(sizePolicy)
    29. self.loadButton.setObjectName("loadButton")
    30. self.verticalLayout.addWidget(self.loadButton)
    31. self.verticalLayout_2.addLayout(self.verticalLayout)
    32. ShowBmp.setCentralWidget(self.centralwidget)
    33.  
    34. self.retranslateUi(ShowBmp)
    35. QtCore.QMetaObject.connectSlotsByName(ShowBmp)
    36.  
    37. def retranslateUi(self, ShowBmp):
    38. ShowBmp.setWindowTitle(QtGui.QApplication.translate("ShowBmp", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
    39. self.loadButton.setText(QtGui.QApplication.translate("ShowBmp", "Load", None, QtGui.QApplication.UnicodeUTF8))
    40.  
    41. class Ui_Extension(Ui_ShowBmp):
    42. def __init__ (self):
    43. self.app = QtGui.QApplication(sys.argv)
    44. QtGui.QMainWindow.__init__(self)
    45. self.window = QtGui.QMainWindow()
    46. self.setupUi(self.window)
    47. self.createSignals()
    48. self.window.show()
    49. self.curdir = os.getcwd()
    50. (self.xsize,self.ysize) = ("0","0")
    51.  
    52. def createSignals(self):
    53. QtCore.QObject.connect(self.loadButton, QtCore.SIGNAL("clicked()"), self.pushedLoadBmpButton)
    54. def pushedLoadBmpButton(self):
    55. self.imagepath = QtGui.QFileDialog.getOpenFileName(self,"Select BMP", self.curdir, ("BMP (*.bmp)"))
    56. (self.xsize,self.ysize) = self.getSize(self.imagepath)
    57. self.image = QtGui.QImage(str(self.imagepath))
    58. self.label.setGeometry(10, 10,int(self.xsize), int(self.ysize))
    59. self.label.setPixmap(QtGui.QPixmap.fromImage(self.image))
    60. def getSize(self,filepath):
    61. '''Return the size from the bmp loaded'''
    62. file = open(filepath,"rb")
    63. fileread = file.read()
    64. file.close()
    65. header = fileread[:71]
    66. xpixels = header[21:17:-1]
    67. xlist = []
    68. for c in xpixels:
    69. data = str(hex(ord(c)))
    70. if len(data) == 3:
    71. data = 'x0'.join(data.split('x'))
    72. xlist.append(data)
    73. xsize = int('0x'+''.join(''.join(xlist).split('0x')),base = 16)
    74.  
    75. ypixels = header[25:21:-1]
    76. ylist = []
    77. for c in ypixels:
    78. data = str(hex(ord(c)))
    79. if len(data) == 3:
    80. data = 'x0'.join(data.split('x'))
    81. ylist.append(data)
    82. ysize = int('0x'+''.join(''.join(ylist).split('0x')),base = 16)
    83. return (str(xsize),str(ysize))
    84.  
    85.  
    86.  
    87.  
    88.  
    89. class Ui_ShowBmp(QtGui.QMainWindow):
    90. def setupUi(self, ShowBmp):
    91. ShowBmp.setObjectName("ShowBmp")
    92. ShowBmp.resize(660, 529)
    93. sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
    94. sizePolicy.setHorizontalStretch(0)
    95. sizePolicy.setVerticalStretch(0)
    96. sizePolicy.setHeightForWidth(ShowBmp.sizePolicy().hasHeightForWidth())
    97. ShowBmp.setSizePolicy(sizePolicy)
    98. self.centralwidget = QtGui.QWidget(ShowBmp)
    99. self.centralwidget.setObjectName("centralwidget")
    100. self.verticalLayout_2 = QtGui.QVBoxLayout(self.centralwidget)
    101. self.verticalLayout_2.setObjectName("verticalLayout_2")
    102. self.verticalLayout = QtGui.QVBoxLayout()
    103. self.verticalLayout.setObjectName("verticalLayout")
    104. self.label = QtGui.QLabel(self.centralwidget)
    105. self.label.setPixmap(QtGui.QPixmap("EswinRD640x480.bmp"))
    106. self.label.setObjectName("label")
    107. self.verticalLayout.addWidget(self.label)
    108. self.loadButton = QtGui.QPushButton(self.centralwidget)
    109. sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
    110. sizePolicy.setHorizontalStretch(0)
    111. sizePolicy.setVerticalStretch(0)
    112. sizePolicy.setHeightForWidth(self.loadButton.sizePolicy().hasHeightForWidth())
    113. self.loadButton.setSizePolicy(sizePolicy)
    114. self.loadButton.setObjectName("loadButton")
    115. self.verticalLayout.addWidget(self.loadButton)
    116. self.verticalLayout_2.addLayout(self.verticalLayout)
    117. ShowBmp.setCentralWidget(self.centralwidget)
    118.  
    119. self.retranslateUi(ShowBmp)
    120. QtCore.QMetaObject.connectSlotsByName(ShowBmp)
    121.  
    122. def retranslateUi(self, ShowBmp):
    123. ShowBmp.setWindowTitle(QtGui.QApplication.translate("ShowBmp", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
    124. self.loadButton.setText(QtGui.QApplication.translate("ShowBmp", "Load", None, QtGui.QApplication.UnicodeUTF8))
    125.  
    126.  
    127.  
    128. def ShowBmp():
    129. ui = Ui_Extension()
    130. sys.exit(ui.app.exec_())
    131.  
    132. if __name__ == '__main__':
    133. ShowBmp()
    To copy to clipboard, switch view to plain text mode 

    Thanks in advance for your help
    Last edited by sebcbien; 11th August 2010 at 14:53. Reason: Attach files

Similar Threads

  1. Alpha Channel support is broken for GIMP png and bmp files
    By mschifter in forum Qt Programming
    Replies: 3
    Last Post: 25th June 2015, 21:52
  2. Opening another created gui pyqt
    By jaybstory in forum Qt Programming
    Replies: 6
    Last Post: 3rd February 2011, 09:15
  3. Upgrading from PyQt 4.5 to PyQt 4.7
    By RogerCon in forum Installation and Deployment
    Replies: 0
    Last Post: 14th July 2010, 18:52
  4. GIMP and GPL
    By mhoover in forum General Discussion
    Replies: 1
    Last Post: 30th May 2010, 08:10
  5. Replies: 3
    Last Post: 15th March 2006, 11:44

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.