Frage

Ich muss TGAs mit PYQT lesen und bisher scheint dies gut zu funktionieren, außer wenn ein TGA 2 Bytes pro Pixel im Gegensatz zu 3 oder 4 hat. Mein Code wird von hier aus genommen http://pastebin.com/b5vz61dz.

Insbesondere dieser Abschnitt:

def getPixel( file, bytesPerPixel):
    'Given the file object f, and number of bytes per pixel, read in the next pixel and return a     qRgba uint'
    pixel = []
    for i in range(bytesPerPixel):
        pixel.append(ord(file.read(1)))

    if bytesPerPixel==4:
        pixel = [pixel[2], pixel[1], pixel[0], pixel[3]]
        color = qRgba(*pixel)
    elif bytesPerPixel == 3:
        pixel = [pixel[2], pixel[1], pixel[0]]
        color = qRgb(*pixel)
    elif bytesPerPixel == 2:
        # if greyscale
        color = QColor.fromHsv( 0, pixel[0] , pixel[1])
        color = color.value()

    return color

und dieser Teil:

elif bytesPerPixel == 2:
    # if greyscale
    color = QColor.fromHsv( 0, pixel[0] , pixel[1])
    color = color.value()

Wie würde ich die Werte von Pixel [0] und Pixel [1] eingeben, um die Werte im richtigen Format und im richtigen Format zu erstellen?

Alle Gedanken, Ideen oder Hilfe bitte !!!

War es hilfreich?

Lösung

pixel = [ pixel[1]*2 , pixel[1]*2 , pixel[1]*2 ]
color = qRgb(*pixel)

funktioniert bei mir. Richtige Luminanz und alles. Obwohl ich nicht sicher bin, ob das Verdoppelung des Pixels [1] Wert für alle Fälle funktionieren würde.

Danke für all die Hilfe iStepura :)

Andere Tipps

http://lists.xcf.berkeley.edu/lists/gimp-developer/2000-august/013021.html

"Pixel werden in einem bgr555-Format in Little-Endian-Reihenfolge gespeichert."

Sie müssen also 5 Bit Pixel [1] als blau, ruhen, 3 Bit + 2 "links" -Bits Pixel [0] sind grün, und die nächsten 5 Bit Pixel [0] wären rot.

In Ihrem Fall sollte der Code so etwas wie:

pixel = [(pixel[1]&0xF8)>>3, ((pixel[1]&0x7)<<2)|((pixel[0]&0xC0)>>6), (pixel[0]&0x3E)>>1)
color = qRgb(*pixel)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top