AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia TGA - Was ein Dateiformat o.O
Thema durchsuchen
Ansicht
Themen-Optionen

TGA - Was ein Dateiformat o.O

Ein Thema von Neutral General · begonnen am 6. Aug 2006 · letzter Beitrag vom 15. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

TGA - Was ein Dateiformat o.O

  Alt 6. Aug 2006, 18:44
Hi,

Wie man in einem gewissen anderen Post erkennen kann befasse ich mich in letzter Zeit (jetzt seit etwa ner Stunde ) mit dem Targa-Format. Das Format ist in hier bei Wikipedia beschrieben.
Nunja es gibt etliche Abschnitte in der Datei die als optional gekennzeichnet sind.. nunja "zum Glück" stehen aber im Dateifuß die Offsets zu den vielleicht vorhandenen Informationen... Naja das blöde ist nur der Dateifuß ist auch optional o.O
Was mach ich denn wenn ich keinen Dateifuß hab ? Dann weiß ich ja nichtmehr wo ich anfangen soll mit dem lesen von Targa-Dateien. Weil ja alles irgendwo da oder nicht da sein kann

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: TGA - Was ein Dateiformat o.O

  Alt 6. Aug 2006, 19:08
Steht doch unten dran: Der Dateifuß kann optional sein, wenn diese optionalen Abschnitte aber enthalten sind, muss er natürlich auch enthalten sein.
Zitat:
1optional ab Version 2.0, Entwicklerverzeichnis und Dateifuß erforderlich
2optional ab Version 2.0, Dateifuß erforderlich
3optional ab Version 2.0, Metainformationen und Dateifuß erforderlich
4optional ab Version 2.0 (wenn vorhanden, dann immer die letzten 26 Bytes)
[add]
Im Klartext: Wenn nach dem Bitmap noch Daten folgen, muss es auch einen Dateifuß geben.
[/add]
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: TGA - Was ein Dateiformat o.O

  Alt 6. Aug 2006, 19:17
Ok.

Aber ein weiteres Problem:

Zitat:
Bild-ID
(optional) 0-255 Bytes Bildidentifikator
Farbpalette
(optional) 0-8192 Bytes Palettendaten
die beiden Informationen kommen vor den Bilddaten und sind optional.. Woher weiß ich nun ob die Informationen vorhanden sind ? Bzw es würde ja schon reichen wenn ich wüsste wie ich die Bilddaten von den anderen unterscheide...

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: TGA - Was ein Dateiformat o.O

  Alt 6. Aug 2006, 19:21
Steht doch alles im Dateikopf .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: TGA - Was ein Dateiformat o.O

  Alt 6. Aug 2006, 19:26
*Brillengläser putz*

ups
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: TGA - Was ein Dateiformat o.O

  Alt 7. Aug 2006, 13:22
Ok ich hätte da aber noch ne kleine Frage: Da steht unter "Entwicklerverzeichnis" "weitere Verzeichniseinträge
(je 10 Bytes)". Das auszulesen ist im Prinzip ja kein Problem weil die Anzahl etc steht ja vorher schon drin aber was steht in diesen 10 Bytes drin ? Sind das Zeichen (also 1Byte = 1Char?) oder sind das mehrere Informationen?. Jedenfalls wie soll ich das einlesen ?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: TGA - Was ein Dateiformat o.O

  Alt 12. Aug 2006, 17:29
*Push*

Siehe oben
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#8

Re: TGA - Was ein Dateiformat o.O

  Alt 12. Aug 2006, 17:38
Zitat von Neutral General:
Das auszulesen ist im Prinzip ja kein Problem weil die Anzahl etc steht ja vorher schon drin aber was steht in diesen 10 Bytes drin ?
Hm?
Ein Verzeichniseintrag besteht immer aus ID (Word), Offset (DWord) und Größe (DWord), macht 10 Byte. Und was im variabel langen Entwicklerbereich steht, weiß nur der Entwickler selbst.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: TGA - Was ein Dateiformat o.O

  Alt 14. Aug 2006, 13:35
Also das Bild usw wird alles wunderbar ausgelesen, aber ab dem markierten Bereich läuft irgendwas falsch. Ich habe mir mal aus dem Metadata-Bereich einige Werte anzeigen lassen und die können einfach nicht so stimmen... Ich habe schon tausendmal drübergeguckt, aber ich konnte keinen Fehler entdecken

Meine Informationen habe ich aus Wikipedia:

Delphi-Quellcode:
procedure TTgaImage.LoadFromStream(AStream: TStream);
var i,j: Integer;
    buf: Word;
    lPtr: Pointer;
begin
  AStream.Read(TGAInfo.Header.IDLength, SizeOf(Byte));
  AStream.Read(TGAInfo.Header.HasPalette, SizeOf(Byte));
  AStream.Read(TGAInfo.Header.PictureFormat, SizeOf(Byte));

   // Palette-Info
  AStream.Read(TGAInfo.Header.Palette.Start, SizeOf(Word));
  AStream.Read(TGAInfo.Header.Palette.Length, SizeOf(Word));
  AStream.Read(TGAInfo.Header.Palette.Size, SizeOf(Byte));
  // Zero Point
  AStream.Read(TGAInfo.Header.xZero, SizeOf(Word));
  AStream.Read(TGAInfo.Header.yZero, SizeOf(Word));
  // Picture Width/Height
  AStream.Read(TGAInfo.Header.Width, SizeOf(Word));
  AStream.Read(TGAInfo.Header.Height, SizeOf(Word));
  // Bits per Pixel
  AStream.Read(TGAInfo.Header.Bpp, SizeOf(Byte));
  // Attrubutes
  AStream.Read(TGAInfo.Header.Attributes, SizeOf(Byte));

  if TGAInfo.Header.IDLength > 0 then
  begin
    SetLength(TGAInfo.ID, TGAInfo.Header.IDLength);
    AStream.Read(TGAInfo.ID[0], TGAInfo.Header.IDLength);
  end;

  if Boolean(TGAInfo.Header.HasPalette) then
  begin
    SetLength(TGAInfo.Palette.Colors,TGAInfo.Header.Palette.Length);
    case TGAInfo.Header.Palette.Size of
      15,16: begin
              for i:= 0 to TGAInfo.Header.Palette.Length-1 do
              begin
                AStream.Read(buf,2);
                TGAInfo.Palette.Colors[i].R := (buf and $7C00) shr 10;
                TGAInfo.Palette.Colors[i].G := (buf and $03E0) shr 5;
                TGAInfo.Palette.Colors[i].B := (buf and $001F);
              end;
               // Ist alles noch beta
             end;
      24: begin
               for i:= 0 to TGAInfo.Header.Palette.Length-1 do
               begin
                AStream.Read(TGAInfo.Palette.Colors[i].B,SizeOf(Byte));
                AStream.Read(TGAInfo.Palette.Colors[i].G,SizeOf(Byte));
                AStream.Read(TGAInfo.Palette.Colors[i].R,SizeOf(Byte));
               end;
             end;
      32: begin
              // Ist alles noch beta
             end;
    end;
  end;

  SetLength(TGAInfo.Picture, TGAInfo.Header.Width, TGAInfo.Header.Height);
  // Read Picture Data
  if TGAInfo.Header.PictureFormat in [1..3] then
  begin
   FBitmap.Width := TGAInfo.Header.Width;
   FBitmap.Height := TGAInfo.Header.Height;
   FBitmap.PixelFormat := pf24bit;
   for i:= 0 to FBitmap.Height-1 do
   begin
    lptr := FBitmap.ScanLine[i];
    AStream.Read(lptr^,SizeOf(Byte)*3*FBitmap.Width);
   end;
  end
  else if TGAInfo.Header.PictureFormat in [9..11] then
  begin
    // Wird später eingefügt
  end;

  // Read First Footer
  AStream.Position := AStream.Size - 26;
  AStream.Read(TGAInfo.Footer.MetaOffset, SizeOf(Longword));
  AStream.Read(TGAInfo.Footer.DevOffset, SizeOf(Longword));
  for i:= 0 to 17 do
   AStream.Read(TGAInfo.Footer.Signature[i], SizeOf(Char));
  
  {
  !!!!!!! ------------- !!!!!!! <-- ab hier läuft was schief :|
  }
     

  // Dev Area
  AStream.Position := TGAInfo.Footer.DevOffset;

  AStream.Read(TGAInfo.DevCount, SizeOf(Word));

  SetLength(TGAInfo.DevelopmentAreas, TGAInfo.DevCount);
  for i:= 0 to TGAInfo.DevCount-1 do
  begin
   AStream.Read(TGAInfo.DevelopmentAreas[i].ID, SizeOf(Word));
   AStream.Read(TGAInfo.DevelopmentAreas[i].Offset, SizeOf(Longword));
   AStream.Read(TGAInfo.DevelopmentAreas[i].Size, SizeOf(Longword));
  end;

  AStream.Position := TGAInfo.Footer.MetaOffset;
  AStream.Read(TGAInfo.Metadata.Size, SizeOf(Longword));

  SetLength(TGAInfo.Metadata.Author, 41);
  AStream.Read(TGAInfo.Metadata.Author[0], 41);

  SetLength(TgaInfo.Metadata.Comment, 324);
  AStream.Read(TGAInfo.Metadata.Comment[0], 324);

  AStream.Read(TGAInfo.Metadata.Month, SizeOf(Word));
  AStream.Read(TGAInfo.Metadata.Day, SizeOf(Word));
  AStream.Read(TGAInfo.Metadata.Year, SizeOf(Word));
  AStream.Read(TGAInfo.Metadata.Hour, SizeOf(Word));
  AStream.Read(TGAInfo.Metadata.Minute, SizeOf(Word));
  AStream.Read(TGAInfo.Metadata.Second, SizeOf(Word));

  SetLength(TGAInfo.Metadata.Jobname, 41);
  AStream.Read(TGAInfo.Metadata.Jobname[0], 41);

  AStream.Read(TGAInfo.Metadata.JHour, SizeOf(Word));
  AStream.Read(TGAInfo.Metadata.JMinute, SizeOf(Word));
  AStream.Read(TGAInfo.Metadata.JSecond, SizeOf(Word));

  SetLength(TGAInfo.Metadata.SoftwareID, 41);
  AStream.Read(TGAInfo.Metadata.SoftwareID[0], 41);

  // Version
  AStream.Read(TGAInfo.Metadata.Version, SizeOf(Word));
  AStream.Read(TGAInfo.Metadata.VersionEx, SizeOf(Byte));
  // Realations + BG Color
  AStream.Read(TGAInfo.Metadata.BackgroundColor, SizeOf(Longword));
  AStream.Read(TGAInfo.Metadata.PixRealationH, SizeOf(Word));
  AStream.Read(TGAInfo.Metadata.PixRealationL, SizeOf(Word));
  // Gamma Info
  AStream.Read(TGAInfo.Metadata.GammaH, SizeOf(Word));
  AStream.Read(TGAInfo.Metadata.GammaL, SizeOf(Word));

  AStream.Read(TGAInfo.Metadata.ColorCorrTabOffset, SizeOf(Longword));
  AStream.Read(TGAInfo.Metadata.ThumbnailOffset, SizeOf(Longword));
  AStream.Read(TGAInfo.Metadata.ScanLineOffset, SizeOf(Longword));

  // Scanline Info
  SetLength(TGAInfo.ScanLineInfo, TGAInfo.Header.Height * SizeOf(Longword));
  AStream.Read(TGAInfo.ScanLineInfo[0], TGAInfo.Header.Height * SizeOf(Longword));

  // Thumbnail Width/Height
  AStream.Read(TGAInfo.Tumbnail.Width, SizeOf(Byte));
  AStream.Read(TGAInfo.Tumbnail.Width, SizeOf(Byte));

  FThumb.Width := TGAInfo.Tumbnail.Width;
  FThumb.Height := TGAInfo.Tumbnail.Height;
  FThumb.PixelFormat := pf24bit;
  // Thumbnail Data
  for i:= 0 to FThumb.Height-1 do
  begin
    lptr := FThumb.ScanLine[i];
    AStream.Read(lptr^,SizeOf(Byte)*3*FThumb.Width);
  end;
  // Color Correction Tab
  for i:= 0 to 255 do begin
   for j:= 0 to 4 do begin
    AStream.Read(TGAInfo.ColorCorTab[i,j], SizeOf(Longword));
   end;
  end;
end;
Kann sich vielleicht einer die Mühe machen und mal gucken ob er einen Fehler findet ?
Also ich finde nichts...

[EDIT]: Ach ja wenn ich

Delphi-Quellcode:
 AStream.Position := TGAInfo.Metadata.ScanLineOffset;
 AStream.Position := TGAInfo.Metadata.ThumbnailOffset;
 AStream.Position := TGAInfo.Metadata.ColorCorrTabOffset;
an den enstprechenden Stellen einfüge dann gibts en Fehler beim Laden -.- [/EDIT]

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#10

Re: TGA - Was ein Dateiformat o.O

  Alt 14. Aug 2006, 13:44
An genau der Stelle würde aufhören der Wikipedia zu vertrauen und lieber auf die Format Specification von Wotsit.org ( http://www.wotsit.org/ ) zurückgreifen. Da mal nach Targa suchen und die große Spec runterladen.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz