Startseite ¦  was ist neu ¦  programmier tips ¦  indy artikel ¦  intraweb artikel ¦  informationen ¦  links ¦  interviews ¦  sonstiges
kylix ¦  tutorials ¦  online shop ¦  fotos ¦  Add&Win Gewinnspiel


Willkommen Gast. Bitte einloggen oder registrieren.
21.05.2012, 12:16:19
Übersicht Hilfe Suche Einloggen Registrieren

+  SwissDelphiCenter Forum
|-+  German Forums
| |-+  Forum Fragen & Ankündigungen Forum
| | |-+  Suche jemand zum Dateien umwandeln (entschlüsseln)
« vorheriges nächstes »
Seiten: [1] 2 Drucken
Autor Thema: Suche jemand zum Dateien umwandeln (entschlüsseln)  (Gelesen 5553 mal)
kevinwiedener
Full Member
***
Offline Offline

Beiträge: 204



« am: 11.09.2002, 13:37:41 »

Hi Leute,

ist hier jemand, der sehr gut Dateien umwandeln, bzw. entschlüsseln kann?

Was ich benötige ist folgendes:

Ich habe von einem Spiel ein paar Grafikdateien, die aber als *.gpi (eigenes Format) gespeichert sind.

Nun suche ich jemand, dem es möglich ist, diese *.gpi-Dateien als tga-Dateien zu speichern.

Dass es möglich ist, zeigen Editorprogramme für dieses Spiel.

Es wäre absolut genial, wenn ich mich bei fragen immer an jemanden wenden könnte, der mir hilft.

Ist jemand in der Lage, die Dateien zu "entschlüsseln"?

Eine *.gpi-Datei findet ihr hier:

[a href="http://gpx.host.sk/1.gpi" target="_blank"]http://gpx.host.sk/1.gpi[/a]

Kevin
Gespeichert
Tokter
Gast
« Antworten #1 am: 11.09.2002, 17:02:35 »

Dem Link geht aber konkret nit
Gespeichert
kevinwiedener
Full Member
***
Offline Offline

Beiträge: 204



« Antworten #2 am: 11.09.2002, 18:05:14 »

du musst nen Rechtsklick machen und Ziel speichern selektieren. :-)

Würdest du mir helfen, das Format zu entschlüsseln?

Wär echt genial

Außerdem habe ich nun einen richtigen Vergleich upgeloadet. Ich habe das original gpi-File und das gpi to tga konvertierte tga-Bild (aus einem anderen Editor). Nun sollte es einfacher sein, das gpi-Format ins tga-Format zu konvertieren.

-] [a href="http://www.evju-urbach.de/gpi.zip" target="_blank"]http://www.evju-urbach.de/gpi.zip[/a]

Danke

Kevin
Gespeichert
Tokter
Gast
« Antworten #3 am: 12.09.2002, 13:50:35 »

Hmm da gibts nichts zu entschlüsseln...

Dein gpi file ist 262144 Byte gross und das TGA ist 256x256 Pixel gross

also 262144/(256*256)=4...das heisst pro Pixel hat das File genau 4 Bytes somit wird wohl das file einfach nur so aussehen:

RGBARGBARGBARGBARGBARGBA...etc

also ein byte rot ein byte Grün ein Byte Blau und ein Byte Alpha und dann das gleiche fürs nächste Pixel...

Habs aber nicht ausprobiert...wird aber mit an Sicherheit grenzender Wahrscheinlichkeit so sein...
Gespeichert
Joern
Newbie
*
Offline Offline

Beiträge: 44



« Antworten #4 am: 12.09.2002, 14:46:04 »

Wie Tokter schon sagte....
aber mit der Folge BGRABGRABGRABGRABGRABGRA...

[font  size=2 face="Courier New" color="#000000"]unit Unit1;

interface

uses
  
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  
TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;

    procedure Button1Click(Sender: TObject);
    function  Gpi2Bmp(fnam : string) : TBitmap;
  private
    
[font color="#000080"]{ Private declarations }
    
[/font]bmp     : TBitmap;
  public
    
[font color="#000080"]{ Public declarations }
  
[/font]end;


var
  
Form1: TForm1;

implementation

[font color="#000080"]{$R *.dfm}

[/font]function TForm1.Gpi2Bmp(fnam : string) : TBitmap;
type
  
TRGBTripleArray = Array[word] of TRGBTriple;
  pRGBTripleArray = ^TRGBTripleArray;

var
  
f       : file of byte;
  buf     : array[0..3] of byte;
  NumRead : Integer;
  row     : pRGBTripleArray;
  xx, yy  : Integer;
  Data    : array[0..255,0..255] of TColor;
  color   : TColor;
begin
  
AssignFile(f,fnam);
  Reset(f);
  yy := 0;
  xx := 0;

  repeat
    
BlockRead(f, Buf, SizeOf(Buf), NumRead);
    color := RGB(buf[2],buf[1],buf[0]);
    Data[xx,yy] := color;
    if xx=255 then
    begin
      
xx:=0;
      inc(yy);
    end else
    begin
      
inc(xx);
    end;
  until (NumRead = 0);
  CloseFile(f);

  for yy := 0 to 255 do
  begin
    
row := Bmp.ScanLine[yy];
    for xx := 0 to 255 do
    begin
      
Row[xx].rgbtRed   := GetRValue(Data[xx,yy]);
      Row[xx].rgbtGreen := GetGValue(Data[xx,yy]);
      Row[xx].rgbtBlue  := GetBValue(Data[xx,yy]);
    end;
  end;
  result := bmp;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  
bmp := TBitmap.Create;
  bmp.Width  := 256;
  bmp.Height := 256;
  bmp.PixelFormat := pf24bit;

  [font color="#000080"]//Gpi2Bmp('michael.gpi');
  
[/font]Gpi2Bmp('track.gpi');

  Image1.Canvas.Draw(0,0,bmp);

  bmp.Free;
end;

end.

[/font]

Komponenten für's tga-Format findest Du bei Torry oder

hier [a href="http://www.hicomponents.com" target="_blank"]http://www.hicomponents.com[/a]

Gruss, Jörn
Gespeichert
kevinwiedener
Full Member
***
Offline Offline

Beiträge: 204



« Antworten #5 am: 12.09.2002, 18:35:10 »

Wow, Jungs.

Die Sache klappt fast, aber wirklich nur fast!!!

Schaut euch mal die folgenden 3 Bilder an (gezippt).

Die geben alle samt Fehler und kommen vollkommen falsch raus.

Irgendwas ist noch faul an deinem Code (auch weil er immer von 256x256 Pixeln ausgeht)

3 Bilder -] [a href="http://www.evju-urbach.de/gpitobmp.zip" target="_blank"]http://www.evju-urbach.de/gpitobmp.zip[/a]


Schon mal recht herzlichen Dank für Eure Mühe

Kevin
Gespeichert
kevinwiedener
Full Member
***
Offline Offline

Beiträge: 204



« Antworten #6 am: 12.09.2002, 18:42:04 »

Ah, jetzt hab ich glaub ich den Fehler entdeckt.

Es ist darum, weil nicht jedes gpi-File die Größe und Breite von 256x256 hat. Und du gehst in deinem Code natürlich davon aus.

Wie kriege ich raus, wie groß die gpi-Dateien sind (also Höhe und Breite)? Dass muss ich dann am Code ändern und die Sache stimmt!!!

Im Übrigen: Könntet ihr mir vielleicht auch den Code geben, wie ich ein bmp-File wieder in ein gpi-File umwandeln kann. Das wär echt hammergenial von Euch. Schon jetzt ein riesen Kompliment!!!! Danke

PS: Ich dachte es ist einfacher, dass gpi-File gleich in ein tga-File umzuwandeln und nicht erst in ein Bitmap. Ist das etwa nicht der Fall?

Kevin
Gespeichert
Joern
Newbie
*
Offline Offline

Beiträge: 44



« Antworten #7 am: 12.09.2002, 20:07:40 »

Hi Kevin,

Zitat
Wow, Jungs.
Irgendwas ist noch faul an deinem Code (auch weil er immer von 256x256 Pixeln ausgeht)

Tjo, war eigentlich nur als Denkanstoss gedacht...
Das Ganze kann natürlich auch - ohne grösseren Aufwand - mit dynamischen Arrays gelöst werden.

Zitat
Ah, jetzt hab ich glaub ich den Fehler entdeckt.
Wie kriege ich raus, wie groß die gpi-Dateien sind (also Höhe und Breite)? Dass muss ich dann am Code ändern und die Sache stimmt!!!
Kevin

So wie ich das sehe, gibt's gar keinen Header in den gpi-Files der Rückschlüsse auf Höhe und Breite zulässt.

Zitat

PS: Ich dachte es ist einfacher, dass gpi-File gleich in ein tga-File umzuwandeln und nicht erst in ein Bitmap. Ist das etwa nicht der Fall?

Wenn Du dir die Sources zur Speicherung von tga-Files anschaust
(z.B. [a href="http://kbt.narod.ru/docs/lgfp/ch07/07-01.html#Heading1)" target="_blank"]http://kbt.narod.ru/docs/lgfp/ch07/07-01.h....html#Heading1)[/a] , ist es einfacher erst alles in einer TBitmap zu bearbeiten und
erst dann (mit einer fertigen Komponente) in ein tga-File zu speichern.

Gruss, Jörn
Gespeichert
kevinwiedener
Full Member
***
Offline Offline

Beiträge: 204



« Antworten #8 am: 12.09.2002, 20:10:18 »

Ja, aber da gibts ein Problem.

Dann fällt ja der Alpha Channel weg, und den brauch ich absolut!!!

Also wie kann ich die gpi-Datei direkt in ein tga-File umwandeln, mit Alpha Informationen???

Und wie gesagt, wie kann ich aus einem tga-File wieder eine gpi-Datei machen?

Kevin
Gespeichert
Joern
Newbie
*
Offline Offline

Beiträge: 44



« Antworten #9 am: 12.09.2002, 20:15:41 »

Schau Dir mal diese Seite an:

[a href="http://www.efg2.com/Lab/ImageProcessing/Scanline.htm" target="_blank"]http://www.efg2.com/Lab/ImageProcessing/Scanline.htm[/a]
(Stichwort pf32bit)

oder geh nach [a href="http://www.efg2.com/Lab/search.htm" target="_blank"]http://www.efg2.com/Lab/search.htm[/a] und such nach tga...

Für mich ist [a href="http://www.efg2.com" target="_blank"]http://www.efg2.com[/a] die genialste Quelle, was Bildbearbeitung anbelangt....

Vielleicht hilft Dir das weiter.
Jörn
Gespeichert
kevinwiedener
Full Member
***
Offline Offline

Beiträge: 204



« Antworten #10 am: 12.09.2002, 21:34:54 »

:-(((

Ich blick des echt net so richtig Jungs.

Es muss doch möglich sein, dass durch dich bereits "entschlüsselte" gpi-File in ein tga-File umzuwandeln, dass 32Bit hat (das ist auch unbedingt notwendig) und vor allem, wo der Alpha Channel erhalten bleibt.

Ich weiß, ihr werdet mich für ziemlich blöd halten.

Aber es wäre gigantisch, wenn es jemand von Euch versuchen würde, das gpi-File direkt in ein tga-File (32Bit, AlphaChannel, evtl. mit Kompression) umzuwandeln und dennoch in einem Image anzuzeigen.

Dass muss doch irgendwie gehen, oder nicht? *heul*

Jetzt bin ich schon fast am Ziel, ich muss nur noch das gpi-File in ein tga-File umwandeln können, und auch wieder zurück.


:-(

Kevin
Gespeichert
MrSaint
Sr. Member
****
Offline Offline

Beiträge: 472



WWW
« Antworten #11 am: 12.09.2002, 21:54:05 »

Also ich komm halt mal wieder mit meinem nun bestimmt schon bekannten Link: [a href="http://www.wotsit.org" target="_blank"]http://www.wotsit.org[/a]   Da dann in das Suchen-Feld tga eingeben. Da bekommst du dann ne genaue Beschreibung vom tga Format. Dann brauchst du nicht über das Bitmap gehn. Wird zwar evtl. etwas aufwendig, bis man das ganze TGA-Format verstanden hat, müsste aber funktionieren :)



MrSaint
Gespeichert

Follow the reaper and keep on rocking ;)
kevinwiedener
Full Member
***
Offline Offline

Beiträge: 204



« Antworten #12 am: 12.09.2002, 22:14:27 »

Jo, ich hab mir das auch schon angeschaut. Wenn ichs nur blicken würde *g* :-(

@Joern: Mal was ganz anderes jetzt: Was mache ich, wenn ich das folgendes haben möchte:

  bmp.PixelFormat := pf32bit;

Wie muss ich da dann deinen Code umschreiben, oder was muss ich dran ändern?

Danke

Kevin

BTW: Um die Größe der gpi-Datei bestimmen zu können, muss es irgendeine mathematische Berechnung dafür geben. Soviel wurde mir zumindest gesagt.... hmm, könnt ihr was daraus erschließen?

Folgendes ist z.B. möglich:

172.800 Bytes =] 172800/(2*240) = 2*180

und das Bild ist 240x180 Pixel groß!!! Ist das vielleicht die Lösung?
Gespeichert
Tokter
Gast
« Antworten #13 am: 13.09.2002, 10:20:31 »

Wenn diese Dateien beliebige Auflösungen haben können dann kann man aleine aus der Datei Grösse nicht bestimmen ob es 240*180 oder 180*240 ist, ich dachte dies seien eh nur Quadratische Texturen....
Wenn nicht hat dieses Spiel vieleicht irgend wo gespeichert wie gross die einzelnen Dateien sind...
Gespeichert
kevinwiedener
Full Member
***
Offline Offline

Beiträge: 204



« Antworten #14 am: 13.09.2002, 12:45:47 »

Möglich, aber eigentlich wollte ich das nur nebenbei fragen.

Mein Hauptproblem besteht noch immer darin, das gpi-File MIT ALPHA-CHANNEL Information als ein tga (32Bit (!!!!!!), alpha channel und wenns geht mit Kompression) zu speichern und WIEDER UMGEKEHRT!

Außerdem möchte ich es auch in der Image-Komponente als 32bit-Bild darstellen (mit Alpha Channel, bzw. Transparent-Info!!!)!!!!

Kann mir da niemand helfen :-( ?

Kevin
Gespeichert
Tokter
Gast
« Antworten #15 am: 13.09.2002, 15:29:40 »

Dein Problem war doch rauszufinden wie man das gpi file zu interpretieren hat und das ist gelöst. Wie man tga files schreibt sollte ja kein Problem sein selber rauszufinden da gibts sicher schon genügend komponenten die das tun...
Gespeichert
Horst Kniebusch
Hero Member
*****
Offline Offline

Beiträge: 611


128288739
WWW
« Antworten #16 am: 13.09.2002, 18:31:02 »

Umgekehrt würde das ja funktionieren, da hast Du ja die Maße, aber ohne die Maße wird es schwierig (um nicht zu sagen unmöglich) sein das Bild wiederherzustellen.

ciao
Gespeichert

[img src=\"http://www.againsttcpa.com/images/AgainstTCPA-Log01Small.gif\"]
kevinwiedener
Full Member
***
Offline Offline

Beiträge: 204



« Antworten #17 am: 13.09.2002, 19:54:30 »

Also, ich habs echt versucht bis eben - dann hab ichs aufgegeben.

Ich hab versucht, die Datei als komprimierte tga 32bit zu speichern. Aber verdammt nochmal, ich blick es nicht!!! :-( Ich blicks einfach nicht!!! Es ist echt zu kotzen.

Jeder andere würds wahrscheinlich hinkriegen

Kevin
Gespeichert
Joern
Newbie
*
Offline Offline

Beiträge: 44



« Antworten #18 am: 14.09.2002, 09:46:47 »

Versuch doch mal mit der ImageEn Komponente rumzuspielen.
[a href="http://www.hicomponents.com" target="_blank"]http://www.hicomponents.com[/a]

Diese unterstützt den Alpha-Channel und tga.

Jörn
Gespeichert
kevinwiedener
Full Member
***
Offline Offline

Beiträge: 204



« Antworten #19 am: 14.09.2002, 16:47:37 »

So, Leute,

ich glaube, ich hab endlich mal eine kleine Erfolgsmeldung zu verzeichnen. So, aus dem 24bit-Bitmap habe ich glaube ich nun ein 32bit-Bitmap erstellen können. Allerdings bin ich mir da nicht so sicher. Gibt es überhaupt 32bit-Bitmap-Bilder. Und außerdem zeigt mir kein Bildbearbeitungsprogramm an, dass es sich um ein 32bit-Bild handelt. Eins zeigte es sogar als 24bit-Bitmap an, ein anderes Programm konnte das File nicht lesen. Jetzt hätte ich nun gern Klarheit.

Kontrolliert mal bitte den folgenden Code und sagt mir, ob er richtig ist. Bei einem 32bit-Bitmap wird doch der AlphaChannel mitgespeichert, richtig??? Bitte gebt mir darüber Bescheid!!!

Code:

function TForm1.Gpi2Bmp(fnam : string) : TBitmap;

type

  TRGBQuadArray = Array[Word] of TRGBQuad;

  pRGBQuadArray = ^TRGBQuadArray;

var

  f       : file of byte;

  buf     : array[0..3] of byte;

  NumRead : Integer;

  row     : pRGBQuadArray;

  xx, yy  : Integer;

  Data    : array[0..255,0..255] of TColor;

  Alpha   : array[0..255,0..255] of TColor;

  color   : TColor;

begin

  AssignFile(f,fnam);

  Reset(f);

  yy := 0;

  xx := 0;



  repeat

    BlockRead(f, Buf, SizeOf(Buf), NumRead);

    color := RGB(buf[2],buf[1],buf[0]);

    Data[xx,yy] := color;

    Alpha[xx,yy] := buf[3];

    if xx=255 then

    begin

      xx:=0;

      inc(yy);

    end else

    begin

      inc(xx);

    end;

  until (NumRead = 0);

  CloseFile(f);



  for yy := 0 to 255 do

  begin

    row := Bmp.ScanLine[yy];

    for xx := 0 to 255 do

    begin

      Row[xx].rgbRed   := GetRValue(Data[xx,yy]);

      Row[xx].rgbGreen := GetGValue(Data[xx,yy]);

      Row[xx].rgbBlue  := GetBValue(Data[xx,yy]);

      Row[xx].rgbReserved := Alpha[xx,yy];

    end;

  end;

  result := bmp;

end;





procedure TForm1.Button1Click(Sender: TObject);

begin

  bmp := TBitmap.Create;

  bmp.Width  := 256;

  bmp.Height := 256;

  bmp.PixelFormat := pf32bit;



  Image1.Refresh;



  if OpenDialog1.Execute then

    Gpi2Bmp(OpenDialog1.FileName);



  Image1.Canvas.Draw(0,0,bmp);



  bmp.SaveToFile(ExtractFilePath(ParamStr(0)) + 'test.bmp');



  bmp.Free;



end;





Ist das jetzt so richtig, damit der AlphaChannel mitgespeichert wird?

Jetzt habe ich nur noch ein Problem: Kennt ihr eine Komponente mit der ich ein 32bit-Bitmap als 32bit tga-File speichern kann (inkls. AlphaChannel). Und die Komponente sollte, nicht wie hicomponents möglichst Freeware sein.

Alternativ: Wer mir helfen möchte, kann auch versuchen, den folgenden Code einfach zusammenzufassen. Ich habs versucht, aber bin dran gescheitert, weil ich nicht weiß, wie welche Variablen zu deklarieren sind, usw. Vielleicht kann mir jemand helfen, und hier dann nur noch den Code posten, den ich benötige, um ein 32bit-Tga-File zu speichern (mit AlphaChannel): [a href="http://kbt.narod.ru/docs/lgfp/ch07/07-01.html" target="_blank"]http://kbt.narod.ru/docs/lgfp/ch07/07-01.html[/a]

Danke

Kevin
Gespeichert
Seiten: [1] 2 Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS