Toon posts:

[C# / RTF] picture decoderen (hex to ??)

Pagina: 1
Acties:
  • 103 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hi,

Bijna klaar met mijn rtf to html converter en nu de images nog.

Ik heb dus picture data wat er als volgt ongeveer uit ziet:
code:
1
2
3
4
5
6
7
8
9
{\nonshppict
{\pict\picscalex100\picscaley101\piccropl0\piccropr0\piccropt0\piccropb0\picw7163\pich940\picwgoal4061\pichgoal533\wmetafile8\bliptag-431187998\blipupi300 
010009000003b8cc00000000a14e000000001610000026060f002220574d46430100000000000100492f00000000080000000020000064da000064fa00000100
00006c00000000000000000000000e01000023000000000000000000000059250000f404000020454d460000010064fa00000c00000001000000000000000000
000000000000780500001a040000ee0100007
..
..
..
00aa0000000000000024000f0100000000040000002701ffff030000000000}}


Heeft iemand enig idee hoe ik hier een afbeelding uit krijg? De RTF specificatie gaat hier totaal niet op in namelijk.

Alvast bedankt voor hulp.

Statix

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 07:54

Janoz

Moderator Devschuur®

!litemod

Hoezo niet? Ik heb ff via google gekeken en hier werd een omschrijving gegeven van hoe plaatjes gecodeerd worden. Wat lukt niet?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Janoz schreef op maandag 16 april 2007 @ 16:55:
Hoezo niet? Ik heb ff via google gekeken en hier werd een omschrijving gegeven van hoe plaatjes gecodeerd worden. Wat lukt niet?
Dat wat daar vermeld staat, komt uit de specificatie van Microsoft, behalve dat er nu een versie 1.9 is.

Ik bedoel ... wat moet ik met die Hexidecimale data ? Nergens staat vermeld wat ik daarmee moet T__T ...

Omzetten naar binair? Dan heb ik 1-en en 0-en ....

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 07:54

Janoz

Moderator Devschuur®

!litemod

Het hexadecimaal is gewoon een manier van weergeven. Je weet waar een byte uit bestaat? Je weet dat je met 2 hexadecimale characters een byte kunt representeren? Je weet ook dat je met 8 binaire characters een byte kunt representeren? Het werkt neit veel anders dan met drie decimale characters een byte representeren, alleen zijn bij de laatste niet alle combinaties geldig.

Als je eenmaal die data hebt kun je vervolgens uit de header afleiden wat voor type het is. Hiermee kun je vervolgens weer uitzoeken hoe je van die data daadwerkelijk een plaatje zou moeten maken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Aaah oke =D

Bedankt. Ik ga hier morgen lekker mee stoeien.

Verwijderd

Topicstarter
hmm...

ben een eind op weg,

Maar er komt een boel extra rommel in het plaatje en is corrupt.

Begin correcte PNG afbeelding
code:
1
2
3
4
‰PNG

   
IHDR   M   '   JfŌ


Begin corrupte PNG afbeelding wat gedecodeerd is
code:
1
2
3
4
5
      ¼    ô        ô     & ÞWMFC      ¿ý       ¼      ¼     l           L   &           œ
  ]   EMF   ¼                    x    î  r              @‰ ð¦ F   ,       EMF+@       ÀÛ   `   `   F   ü  ð  EMF+"@        @            $@        0@         €?!@        @ H  <  ÀÛ                      ‰PNG

   
IHDR   M   '   JfŌ


Ik denk dat de hexadecimale data in blokken opgedeeld moet worden ofzo, omdat er na het decoderen extra data bijgekomen is.

Let wel op dat in het code voorbeeld de &#.... door het forum is gegeneerd

Als iemand enig idee heeft _/-\o_ ik zie het niet meer ....

  • Xiphalon
  • Registratie: Juni 2001
  • Laatst online: 01-12 16:44
Laat het stukje code eens zien waarmee je de boel omzet?

Verwijderd

Topicstarter
darkmage schreef op dinsdag 17 april 2007 @ 12:24:
Laat het stukje code eens zien waarmee je de boel omzet?
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
List<char> chars = new List<char>();

for (int i = 0; i < textBox1.Text.Length-1; i += 2)
{
  chars.Add((char)int.Parse(textBox1.Text.Substring(i, 2), 
    System.Globalization.NumberStyles.HexNumber));
}

FileStream fs = new FileStream(@"c:\image.txt", FileMode.OpenOrCreate);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(chars.ToArray());
bw.Close();
fs.Close();

textBox1 bevat hexadecimale codes zonder newline characters.

[ Voor 8% gewijzigd door Verwijderd op 17-04-2007 12:32 ]


  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 30-11 11:20

voodooless

Sound is no voodoo!

Ik zie EMF staan, dat is een vector afbeelding, en zeker geen PNG. Ik kan me ook niet voorstellen dat Microsoft PNG zou gebruiken eerlijk gezegd.

Do diamonds shine on the dark side of the moon :?


Verwijderd

Topicstarter
voodooless schreef op dinsdag 17 april 2007 @ 13:17:
Ik zie EMF staan, dat is een vector afbeelding, en zeker geen PNG. Ik kan me ook niet voorstellen dat Microsoft PNG zou gebruiken eerlijk gezegd.
Rtf specificatie about picture type: <picttype> | \emfblip | \pngblip | \jpegblip | \macpict | \pmmetafile | \wmetafile | \dibitmap <bitmapinfo> | \wbitmap <bitmapinfo>

\pngblip geeft aan dat het om een png gaat.

Op de een of andere manier staat er dus extra informatie in de Hexadecimale code. Emf -> Enhanced Metafile ...

Ben driftig opzoek of dit ergens uitgelegd staat, maar tot nu toe niets gevonden !! Bedankt Microsoft !

Verwijderd

Topicstarter
Krijg net een misschien geniaal idee... De binary stream in een GDI functionaliteit inlezen en dan misschien informatie eruit vissen....

Even proberen maar =D

  • Xiphalon
  • Registratie: Juni 2001
  • Laatst online: 01-12 16:44
Verwijderd schreef op dinsdag 17 april 2007 @ 12:31:
[...]

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
List<char> chars = new List<char>();

for (int i = 0; i < textBox1.Text.Length-1; i += 2)
{
  chars.Add((char)int.Parse(textBox1.Text.Substring(i, 2), 
    System.Globalization.NumberStyles.HexNumber));
}

FileStream fs = new FileStream(@"c:\image.txt", FileMode.OpenOrCreate);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(chars.ToArray());
bw.Close();
fs.Close();

textBox1 bevat hexadecimale codes zonder newline characters.
Het gaat fout bij de char array. Een char is een unicode karakter, en kan dus bij waardes hoger dan 127 andere waarden aannemen dat jij wilt. Je zal met een byte array moeten gaan werken.

even snel:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
List<byte> bytes = new List<byte>();

for (int i = 0; i < textBox1.Text.Length-1; i += 2)
{
  bytes.Add(byte.Parse(textBox1.Text.Substring(i, 2), 
    System.Globalization.NumberStyles.HexNumber));
}

FileStream fs = new FileStream(@"c:\image.txt", FileMode.OpenOrCreate);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(bytes.ToArray());
bw.Close();
fs.Close();

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Verwijderd schreef op dinsdag 17 april 2007 @ 13:20:
Ben driftig opzoek of dit ergens uitgelegd staat, maar tot nu toe niets gevonden !! Bedankt Microsoft !


In de 1.9 spec staat:
To comment on this paper or request more documentation on these developer features, contact us at O12Devdx@microsoft.com. We look forward to hearing from you.
Dit geeft "Bedankt Microsoft !" een hele andere betekenis...

Verwijderd

Topicstarter
Daos schreef op dinsdag 17 april 2007 @ 14:00:
[...]



In de 1.9 spec staat:

[...]


Dit geeft "Bedankt Microsoft !" een hele andere betekenis...
Klopt. Had dat wel gelezen, maar was inmiddels weer vergeten. Zojuist een mailtje gestuurd, hopelijk positief antwoord.

Maar het lijkt mij dat dit toch wel beschreven moet worden hoe dit geïnterpreteerd moet worden. De code doet het wel, alleen verkeerd ...

  • SKiLLa
  • Registratie: Februari 2002
  • Niet online

SKiLLa

Byte or nibble a bit ?

Gaat het met die byteArray nog steeds fout ?

'Political Correctness is fascism pretending to be good manners.' - George Carlin


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-11 15:10

Creepy

Tactical Espionage Splatterer

In de code in je startpost zie ik toch echt wmetafile8 staan en geen pngblip. Je hebt dus zo te zien toch echt een metafile te pakken waarin een afbeelding zit verpakt. Dit is dus zeker geen PNG.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Byte array gaat goed.

Hmm.. ja inderdaad wmetafile8 .... enig idee hoe ik de afbeelding hier kan uitpakken? Want als ik de hexadecimale code decodeer dan zie ik wel PNG namelijk ... (naar rechts scrollen (post 6))

Alvast bedankt.

Nog geen antwoord gehad van microsoft ondertussen.
Pagina: 1