TGAs auslesen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

StarGazer

Betreff: TGAs auslesen

BeitragSa, Aug 19, 2006 0:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo
hat jemand von euch schon ein TGA Loader geschrieben ?, also ohne LOADIMAGE.
Ich habe danach gesucht, aber nicht passendes gefunden.
BMP kann ich zwar auslesen, aber BMP besitzt kein Alpha. ( selbst es wenn es BMPs mit Alpha geben sollte, mein Grafikprogramm kann solche jedenfalls nicht speichern, dacher möchte ich TGAs auslesen können ).

hoffe jemand kann mir helfen.

Jolinah

BeitragSa, Aug 19, 2006 1:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Was ist mit PNG? Das hat super Qualität, einen Alpha-Kanal und ist kleiner als BMP. Damit sollten die meisten Grafikprogramme eigentlich klar kommen.

Aber ein TGA-Loader wär trotzdem nicht schlecht Wink
 

Dreamora

BeitragSa, Aug 19, 2006 10:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Nö hat sich kaum jemand geschrieben, würde keinen sinn machen:

FreeImage Library hat das drin
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Jolinah

BeitragSa, Aug 19, 2006 11:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich meinte nur zu Übungszwecken (sprich so einen Loader zu Programmieren wär trotzdem nicht schlecht) Wink Und er hätte dann was er wollte, wobei ich PNG eindeutig besser finde.

StarGazer

BeitragSa, Aug 19, 2006 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
PNG oder TGA beides wäre mir ok Smile ,aber PNG ist sicherlich viel komplizierter.
Eigentlich will ich nur die Dateien dann in ein eigenes Format abspeichern.
Da ist mir eingefallen das man sie vielleicht doch mit LOADIMAGE lesen könnte, aber man müste die Daten irgenwie aus dem Speicher lesen, die BildRBGPixel und die AlphaWerte.

Kann man denn irgenwie die Daten aus einem geladen Bild das im Speicher liegt auslesen ?
Eigentlich aus einer geladenen Texture (LoadTexture), da in Blitz2D es wohl keine AlphaWerte gibt, dacher lieber die RGB und Alpha-Daten aus einer Textur auslesen die gerade im Speicher liegt.
Aber dann gehört dieses Thema wohl eher in den 3D Bereich.

PowerProgrammer

BeitragSa, Aug 19, 2006 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
ImageBuffer() und ReadPixelfast()


Du meinst mit Daten doch die Pixel, oder?
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter!

StarGazer

BeitragSa, Aug 19, 2006 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo, die RGB Werte halt Smile
ich habe dafür was du meinst eine Funktion hier im Forum gefunden

Code: [AUSKLAPPEN]

   LockBuffer( ImageBuffer( image ) )
   SetBuffer ( ImageBuffer( image ) )   

   rgb = ReadPixelFast( x, y )
   r = ( rgb Shr 16 ) And $ff
   g = ( rgb Shr 8 )  And $ff
   b =   rgb          And $ff


doch "ReadPixel" liest nur die RGB Werte aus, wie bekommt denn da die AlphaWerte herraus ? (zudem verstehe ich nicht was das "And $ff" bedeuten soll, das kenne ich leider nicht)

können denn in BB2D die Bilder überhaupt AplhaWerte besitzen ?, dacher auch die Frage ob man das nicht aus einer Textur herrauslesen könnte ?

PowerProgrammer

BeitragSa, Aug 19, 2006 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
http://www.blitzbase.de/befehl...elfast.htm

Den Link habe ich oben schon gepostet gehabt! Guck dir das mal an! Da gibts auch ein Beispiel zu dem Befehl!

Die Onlinehilfe hat Folgendes geschrieben:
BlitzBasic: [AUSKLAPPEN]
;Berechnung der Farbanteile aus einem Farbcode:
a=(rgb And $FF000000)/$1000000 ;ALPHA!!!!
r=(rgb And $FF0000)/$10000
g=(rgb And $FF00)/$100
b=rgb And $FF




Und das Dollar vor den Variablen in deinem Beispiel heißt, das der folgende Wert Hexadezimal ist. Das $ff ist das gleiche wie der Dezimalwert 255!



~EDIT~
Hmm, das Beispiel von dir müsste etwas schneller sein. So müsste es mit Alpha aussehen, glaub ich:
BlitzBasic: [AUSKLAPPEN]
   rgb = ReadPixelFast( x, y )
a = ( rgb Shr 24 ) And $ff ;ALPHA!!!!
r = ( rgb Shr 16 ) And $ff
g = ( rgb Shr 8 ) And $ff
b = rgb And $ff

Ich garantiere für nichts Wink

Jolinah

BeitragSa, Aug 19, 2006 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
zudem verstehe ich nicht was das "And $ff" bedeuten soll, das kenne ich leider nicht


Das ist eine Bitmaske, die dafür sorgt dass nur gewisse Bits beachtet und die anderen einfach ignoriert werden.

Code: [AUSKLAPPEN]
argb = ReadPixelFast(x, y)
;argb ist nun z.B. hexadezimal gesehen $AARRGGBB (= 1 Int = 4 Bytes)

;$AARRGGBB And $FF000000 -> $AA000000 (nur die ersten 8 bits, Alpha)
;$AARRGGBB And $00FF0000 -> $00RR0000 (nur die zweiten 8 bits, Rot)

;Nur sind die einzelnen Werte jetzt noch an der falschen Stelle.
;Um den Rot-Wert zu bekommen bringt $00RR0000 nicht viel,
;es müsste $000000RR heissen. Also schiebt man die Stelle einfach nach;
;Rechts mit shr (shift right).
rot = (argb shr 16) ; -> $000000RR (um 2 * 8 = 16 bits verschoben)


R und G gibts natürlich hexadezimal nicht, war nur ein Beispiel Wink

StarGazer

BeitragSa, Aug 19, 2006 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Super ich danke euch Very Happy, habs soweit verstanden denke ich Smile

jetzt würde ich nur gern festellen ob der Alphawert wirklich gespeichert wurde, dafür erstelle ich eine Texture und lade die Daten wieder ein (ich will das auch für Texturen benutzen)

Code: [AUSKLAPPEN]
   tex = CreateTexture( width, height, 2 )
   
   LockBuffer(TextureBuffer( tex ) )
   SetBuffer (TextureBuffer( tex ) )
   Cls
      a = ReadByte( file )
      r = ReadByte( file )
      g = ReadByte( file )
      b = ReadByte( file )

      alpha = ( a Shl 24 )
      rgb   = ( r Shl 16 ) Or ( g Shl 8 ) Or b
     
      WritePixelFast( x, y, rgb )                 ; was ist denn

      WritePixelFast x,y,rgb, TextureBuffer(tex)  ; von den beiden besser ?


   UnlockBuffer(TextureBuffer( tex ) )


mit WritePixel kann man in die Texture reinschreiben, das funktioniert auch, man sieht auch die Texture Smile , nur wie kann man einen AlphaWert in eine Texture herreinschreiben ?, das konnte ich leider nicht herrausfinden.

PS: Ich weis, das sollte jetzt eigentlich eher in den 3D Bereich, aber ich hab ja mit TGA auslesen angefangen, und nun hat sch das weiter entwickelt, SORRY. Deshalb jetzt extra im 3D Bereich ein neues Thema aufmachen ?!.

PowerProgrammer

BeitragSa, Aug 19, 2006 20:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Nee, ist nicht schlimm, wenn du es hier belässt. Wenn die Mods was dagegen haben, verschieben sie das schon in das passende Forum, also B3D, oder eher noch Allgemein. Naja, eigentlich gehörts ja doch in die Beginners-Corner, hmmm.... Laughing Wink

Du du jeden Pixel umwandelst, um ihn später wieder zurückzuwandeln, gebe ich dir den kleinen Tipp, die Pixel direkt als Integer abzuspeichern...




~EDIT~


Code: [AUSKLAPPEN]
 tex = CreateTexture( width, height, 2 )
   
   LockBuffer(TextureBuffer( tex ) )
   SetBuffer (TextureBuffer( tex ) )
   Cls
      a = ReadByte( file )
      r = ReadByte( file )
      g = ReadByte( file )
      b = ReadByte( file )

      argb   = ( a Shl 24 ) Or( r Shl 16 ) Or ( g Shl 8 ) Or b

      WritePixelFast x,y,argb


   UnlockBuffer(TextureBuffer( tex ) )
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter!

StarGazer

BeitragSa, Aug 19, 2006 22:33
Antworten mit Zitat
Benutzer-Profile anzeigen
DANKE DIR Very Happy
das funktioniert jetzt wie erhofft super Cool

zuerst wollte es jedoch nicht, weil anscheinend in BB2D mit"LoadImage" die Bilder im Speicher nicht mit Alpha abgelegt sind. Dann habe ich es mit "LoadTexture" versucht, und dann ging es, FREU, nur nicht vergessen die Textur als AlphaMode "2" herreinzuladen sonst klappt es trotzdem nicht Smile.

D2006

Administrator

BeitragSa, Aug 19, 2006 23:20
Antworten mit Zitat
Benutzer-Profile anzeigen
um nochmal fix Bezug zum Thema zu nehmen:
https://www.blitzforum.de/foru...6056#66056

TGAs laden und speichern.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group