[SOLVED]
Hello all,
I have found a way to display this and I have posted the solution below.
Unfortunately I did not find a way to actually display the DDS file so I
had to run a convert under the hood using Image Magick (great tool).
I then ran the TGA file image through the rungs of formatting the data to
generate a pixmap.
Anyway here are the functions I used to help my situation. I hope it helps
some people!!
*CODE:*
def convertDDS(self, ddsPath='', imageMagickDir='', overlay=False):
""" Convert the DDS files passed in to a tga file """
convert = imageMagickDir+'\\convert'
if overlay:
tempOutPath = r'D:\\magickOverlayOut.tga'
else:
tempOutPath = r'D:\\magickOut.tga'
subprocess.call([convert, ddsPath, tempOutPath])
return tempOutPath
def returnQPixmapFromImage(self, inputPath='', overlayPath=''):
# We turn out input paths into ImageQt objects for Qt to use later
inImg = Image.open(inputPath)
inputImg = ImageQt.ImageQt(inImg)
overImg = Image.open(overlayPath)
overlayImage = ImageQt.ImageQt(overImg)
# Creating the input image into a QPixmap
pix = QtGui.QPixmap.fromImage(inputImg)
pix = pix.scaled(512, 512, QtCore.Qt.KeepAspectRatioByExpanding)
pixHeight = round(pix.size().height(), 2)
pixWidth = round(pix.size().width(), 2)
# Creating the overlay images
overlayPix = QtGui.QPixmap.fromImage(overlayImage)
overlayImage = QtGui.QPixmap.toImage(overlayPix)
overlayImage = overlayImage.scaled(pix.size(),
QtCore.Qt.KeepAspectRatio)
# Check the image has an alpha channel so we can remove it for preview
if pix.hasAlpha():
qtFormat = QtGui.QImage.Format_RGB32
else:
# We need this for DXT1's/TGA's without an alpha. For some
reason it crashes the app
qtFormat = QtGui.QImage.Format_ARGB32
# Converting to QImage and removing the alpha then back to pixmap again
stripAlpha = QtGui.QPixmap.toImage(pix).convertToFormat(qtFormat)
myQImg = stripAlpha
painter = QtGui.QPainter()
painter.begin(myQImg)
painter.drawImage(0, 0, overlayImage)
painter.end()
finalImage = QtGui.QPixmap.fromImage(myQImg)
return finalImage, pixHeight, pixWidth
On Monday, 17 August 2015 15:26:49 UTC+2, Benjam901 wrote:
>
> Hello all,
>
> I am having some trouble loading a dds file into PyQt for displaying in a
> window.
>
> I have dug around and I keep being pointed towards OpenGL.GL and QtOpenGL.
> I found a function on tech artists forum
> http://tech-artists.org/forum/showthread.php?5196-Simple-DDS-loader that
> supposedly returns a Qimage from a dds filepath but when the function tries
> to bind the texture it fails instantly or returns 0. Am I missing a step
> before trying to bind the image?
>
> I have also tried a custom fucntion earlier using QtOpenGL but I have had
> no luck so far
>
> There doesn't seem to be a huge amount of info out there on this so
> hopefully someone on here can help shine a light!
>
> The code is below to ilustrate my issue:
>
> import osimport sysfrom PyQt4 import QtGui, QtCorefrom PyQt4.QtOpenGL
> import *from OpenGL.GL import * class ShaderCoordWindow(QtGui.QDialog):
> def __init__(self): QtGui.QDialog.__init__(self) global coordWindow
> coordWindow = QtGui.QDialog() coordWindow.resize(512, 512)
> coordWindow.setWindowTitle("Objects to skin")
> coordWindow.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) testDDS = r'D:
> \\test.dds' testJPG = r'D:\\test_jpg.jpg' jpgPixMap =
> QtGui.QPixmap(testJPG) qFileDDS = fileDDS(testDDS) testImg =
> QtGui.QPixmap.fromImage(qFileDDS._qImage) imageLabel =
> QtGui.QLabel(coordWindow) imageLabel.setPixmap(testImg) layout =
> QtGui.QHBoxLayout() layout.addWidget(imageLabel)
> coordWindow.setLayout(layout) coordWindow.show()
> #############################################################################
> DDS file readerclass fileDDS(object): """This class represnts a generic
> DDS file as a QImage""" #global gDebug
> ...
--
You received this message because you are subscribed to the Google Groups
"Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/python_inside_maya/ef762d9a-7a56-4a2f-ac6b-09c84eb4b16c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.