Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Mär 29, 2024 07:58

Foren-Übersicht » Sonstiges » Projekte
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
 Betreff des Beitrags: TGA Builder
BeitragVerfasst: Sa Aug 07, 2004 09:03 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Micht stört schon seit längerem die Umständlichkeit der Vorgehensweise, aus irgendwelchen Bildern brauchbare Texturen zu machen, die in meinen eigenen Programmen verwendet werden können. Insbesondere ist es immer einigermaßen langwierig, z.B. aus JPEGs gute Billboards zu machen, da man, dank verlustbehaftetem Format, schlecht mit ColorKeys arbeiten kann und immer Toleranzgrenzen verwenden muss - die entsprechenden Einstellungen sind denn in meiner Bildbearbeitung der Wahl (Photoline, weil es schön schnell startet) auch nicht ganz intuitiv zu finden.

Aus diesem Grund habe ich mich die letzten zwei Abende hingesetzt und den TGA Builder gebastelt: dieses Progrämmchen startet in der linken oberen Ecke des Bildschirms, von wo aus einfach (fast) beliebige Bilddateien drauf gezogen werden können. Klickt man dann in die Miniaturansicht, oder die Bildvorschau, wird über die entsprechende Farbe ein Alphakanal berechnet, wobei die beiden Scrollbars a) die Toleranzgrenze festlegen und b) es ermöglichen Bildränder stufenlos in den Hintergrund überzublenden.

Bild

TGA Builder rechnet die Bildgröße automatisch in OpenGL texturtaugliche Zweierpotenzen um, wobei erstmal eine Größe vorgeschlagen wird, bei der keine Informationen verloren gehen, die endgültige Größe kann mittels Klicks auf die entsprechenden Buttons schnell festgelegt werden. Bei der Umrechnung von Größen wird ein guter Filter verwendet, der auch den Alphakanal berücksichtigt, damit möglichst wenig Informationen verlorengehen.

Mit der rechten Maustaste kann man das resultierende Bild in der Miniaturansicht oder der Bildvorschau (deren Fenster beliebig vergrößerbar ist) auch noch zurechtschneiden, sodass in vielen Fällen keine weiteren Tools zur Nachbearbeitung diverser Internetressourcen notwendig sein sollten.

Der Name TGA Builder ergibt sich übrigens daraus, dass das Programm generell nur unkomprimierte 32 Bit TGAs (RGBA) erstellt, die den Vorteil haben, dass sie sehr einfach geladen werden können. Eine entsprechnde Routine ist z.B. weiter unten zu finden.

Und hier gibt es das Programm
http://www.basegraph.com/bg/instpack/tgabuilder.zip

Code:
  1.  
  2.   TRGBA = packed record
  3.             r: byte;
  4.             g: byte;
  5.             b: byte;
  6.             a: byte;    // align rgb for windows bitmaps
  7.           end;
  8.   PRGBA = ^TRGBA;
  9.   TRGBAs = array[0..4096*4096] of TRGBA; // reserve enough space
  10.   PRGBAs = ^TRGBAs;
  11.  
  12.   TRGBAImage = record
  13.     width: integer;
  14.     height : integer;
  15.     data : PRGBAs;
  16.   end;
  17.   PRGBAImage = ^TRGBAImage;
  18.  
  19.   TTGAHeader = packed record
  20.     idlength            : byte;
  21.     colourmaptype       : byte;
  22.     datatypecode        : byte;
  23.     colourmaporigin     : smallint;
  24.     colourmaplength     : smallint;
  25.     colourmapdepth      : byte;
  26.     x_origin            : smallint;
  27.     y_origin            : smallint;
  28.     width               : smallint;
  29.     height              : smallint;
  30.     bitsperpixel        : byte;
  31.     imagedescriptor     : byte;
  32.   end;
  33.  
  34. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  35. //
  36. //  32 bit TGA image loader
  37. //
  38. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  39.  
  40. function LoadTGAImage(FileName : String) : PRGBAImage;
  41.  
  42.   var
  43.       Header : TTGAHeader;
  44.       F : File;
  45.       img : PRGBAImage;
  46.       l : integer;
  47.       h : byte;
  48.  
  49.   begin
  50.     img := NIL;
  51.     if IOResult<>0 then ; // clear IOResult
  52.     Assign(F, FileName);
  53.     Reset(F, 1);
  54.     if IOResult=0 then begin
  55.       BlockRead(F, Header, SizeOf(Header));
  56.       with Header do
  57.       if (datatypecode=2) and (bitsperpixel=32) then begin
  58.         Seek(F, SizeOf(Header) + idlength + colourmaptype * colourmaplength);
  59.         New(img);
  60.         img.width := width;
  61.         img.height := height;
  62.         l := img.width * img.height;
  63.         GetMem(img.data, l * 4);
  64.         BlockRead(F, img.data^, l * 4);
  65.         repeat
  66.           dec(l);
  67.           with img.data^[l] do begin h:=r; r:=b; b:=h; end;
  68.         until l=0;
  69.       end;
  70.       Close(F);
  71.     end
  72.     else begin
  73.       New(img);
  74.       img.width := 16;
  75.       img.height := 16;
  76.       GetMem(img.data, 1024);
  77.       FillChar(img.data^, 1024, $FF);
  78.     end;
  79.     result := img;
  80.   end;
  81.  
  82.  

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Foren-Übersicht » Sonstiges » Projekte


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 24 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.059s | 17 Queries | GZIP : On ]