Gå til innhold

[Løst] Gjøre om fra HEX til JPEG, eller fra råformat til bilde


Anbefalte innlegg

For å komme i gang tror jeg det er enklest å starte med et ukomprimert format som RGB24 og helst et lett gjenkjennelig motiv så det er mulig å vite når man har funnet ut av formatet. Ta et bilde med "test-kameraet" ditt og et annet fra samme sted med et annet kamera/mobilen og legg ut begge.

Lenke til kommentar
Videoannonse
Annonse

Her er den siste RGB24 fila, som du kan se så har du fremdeles problemer med overføringen og har mistet noen bytes sånn at sifrene kommer i uorden på slutten av fila.

 

Bildet ligger med siste line fremst i fila. Jeg har snudd bildet 180 grader for å få det likt eksemplet.

 

Siden bildet er såpass ute av fokus så kan jeg ikke se om det er RGB eller BGR som er brukt, Jeg brukte RGB i konverteringen.

post-13911-0-03819100-1383915581_thumb.png

Endret av Kristallo
  • Liker 2
Lenke til kommentar

Har du prøvd JPEGSnoop?

http://www.impulseadventure.com/photo/jpeg-snoop.html

"JPEGsnoop is a free Windows application that examines and decodes the inner details of JPEG and MotionJPEG AVI files. It can also be used to analyze the source of an image to test its authenticity."

 

Det funker ganske bra til å søke igjennom en vilkårlig fil, lete etter kjennetegn på JPEG og dekode det som lar seg dekode.

 

-k

Lenke til kommentar

Her er den siste RGB24 fila, som du kan se så har du fremdeles problemer med overføringen og har mistet noen bytes sånn at sifrene kommer i uorden på slutten av fila.

 

Bildet ligger med siste line fremst i fila. Jeg har snudd bildet 180 grader for å få det likt eksemplet.

 

Siden bildet er såpass ute av fokus så kan jeg ikke se om det er RGB eller BGR som er brukt, Jeg brukte RGB i konverteringen.

Takk for utrolig bra hjelp :w00t: Det jeg lurer på er hvordan du får åpnet bildet? Konverterer du .txt fila til en binærfil? Hvilket program bruker for å vise det, Photoshop?

Lenke til kommentar

Jeg laget et program, i dette tilfellet skrevet i Visual Basic siden jeg allerede hadde et gammelt program liggende som hentet bilder fra en kameramodul.

 

Så tok jeg to og to bytes fra fila og behandlet det som et tosiftret tall i heksadesimal og konverterte det til en integer.

 

Jeg leste 6 bytes pr piksel, 2 for rød, 2 for grønn og 2 for blå. Så plottet jeg RGB verdiene inn på en bitmap, når jeg hadde lest hele fila så lagret jeg bitmapen i en fil.

 

Så det som ligger i fila er i tekstformat, jeg lurer litt på hvor det kommer fra siden jeg har en annen C329 modul og den spytter ut dataene i binært format.

  • Liker 1
Lenke til kommentar

Jeg laget et program, i dette tilfellet skrevet i Visual Basic siden jeg allerede hadde et gammelt program liggende som hentet bilder fra en kameramodul.

 

Så tok jeg to og to bytes fra fila og behandlet det som et tosiftret tall i heksadesimal og konverterte det til en integer.

 

Jeg leste 6 bytes pr piksel, 2 for rød, 2 for grønn og 2 for blå. Så plottet jeg RGB verdiene inn på en bitmap, når jeg hadde lest hele fila så lagret jeg bitmapen i en fil.

 

Så det som ligger i fila er i tekstformat, jeg lurer litt på hvor det kommer fra siden jeg har en annen C329 modul og den spytter ut dataene i binært format.

Du har ikke tilfeldigvis lyst til å vise meg koden for VB? :whistle:

 

C329 modulen spytter ut dataene binært, det stemmer. Men jeg bruker sprintf() funksjonen og konverterer de binære dataene til hex data før jeg overfører dem over USART til et terminalvindu.

Lenke til kommentar

Hvis jeg har forstått det riktig med RGB24 nå så skal jeg ha ut 320x240x6=460800 hex "bokstaver" fra kameraet mitt? Jeg får ofte bare mellom 420000 og 450000, så her ser det ut som om det er noe galt i overføringen eller lesingen fra kameraet. Hadde du noen problemer med dette Kristallo? Hvordan frekvens hadde du på SPI klokka? Ser fila jeg la ut her som du konverterte for meg har 460796 tegn, men nå sliter jeg med å få over 440000 tegn i overføringen.

Lenke til kommentar

Du har forstått RGB24 riktig. Min kameramodul bruker UART så den sender når den er klar.

 

Har du implementert HOLD funksjonen? Hvis du har gjort det korrekt så skal det fungere.

 

Fila jeg konverterte har 460796 tegn, det vil si at 4 mangler. Det er også noen tegn som var 0 mot slutten av fila som tyder på at du har lest ut noen bytes mens chipen var opptatt og ikke sendte data.

  • Liker 1
Lenke til kommentar

Bra :wee:

 

Jeg har implementert HOLD funksjonen ja. Hvis HOLD er høy (logisk 1) så skal mikrokntrolleren stoppe opp/vente (gjort ved hjelp av en while-løkke som sjekker om den er høy) til HOLD er lav igjen. Dette har jeg gjort inne i lesingen av hver byte fra kameraet.

while(j<460800){
	spi_selectChip(AT45DBX_SPI,3);
	while (gpio_get_pin_value(AVR32_PIN_PA25)){}//Wait for the module to be ready
	spi_put(AT45DBX_SPI,0x00); //Put dummy byte on the MOSI pin to get data
	spi_read(AT45DBX_SPI,&datapic); //read the data from MISO
	sprintf(datacam,"%X",datapic); //Convert the data to a string with HEX format
	usart_write_line(USART,datacam); //send to terminal window
	spi_unselectChip(AT45DBX_SPI,3);
	datapic= 0;
	j++;
} 

Oppdaget en rar ting nå. Hvis jeg setter på dekslet forran linsen så skal hele bildet bli svart. Men når jeg overfører dataene får jeg kun 230400 bytes, altså halvparten av bildet (skulle vel vært 460800) før HOLD går høy og aldri går lav igjen.

 

Skjønner ikke helt hvorfor kun halve bildet skal overføres for så og stoppe, men hvis jeg tar av dekslet så overfører kameret 450000 ish bytes før HOLD går høy. Skjønner heller ikke hvorfor jeg greide 460796 på det bildet jeg ga deg, for det har jeg ikke greid igjen siden da.

svart.txt

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...