Sida 1 av 2

Konvertera monokroma bilder till inline assembly

Postat: 6 maj 2010, 19:38:12
av Swech
Någon som har ett program som kan konvertera monokroma bilder till
asciitext för inline assembly. Jag skall alltså inte göra ascii grafik utan
jag vill länka in grafik i assemblerkoden.

exempel

.dw 0b11111111111111
.dw 0b10000011100001
.dw 0b10001111110001
.dw 0b10000111100001
.dw 0b10000000000001
.dw 0b11111111111111

Swech

Re: Konvertera monokroma bilder till inline assembly

Postat: 7 maj 2010, 00:08:05
av TomasL
Om du pratar snällt med Baron3D så, kanske.

Re: Konvertera monokroma bilder till inline assembly

Postat: 7 maj 2010, 00:16:59
av victor_passe
FastLCD kan typ göra det, man pekar ut en bmp och i vilket format man vill ha ut-datan och den genererar lite hex.

Re: Konvertera monokroma bilder till inline assembly

Postat: 7 maj 2010, 03:33:38
av baron3d
Mitt program kan inte göra det du vill.

Re: Konvertera monokroma bilder till inline assembly

Postat: 7 maj 2010, 03:51:18
av blueint
Omvandla bilden till BMP. Skriv ett litet perl skript som läser in den som binärsträng. Och matar ut i valfritt format.
Beror förstås lite på hur assembler programmet läser bilddatat.

Re: Konvertera monokroma bilder till inline assembly

Postat: 7 maj 2010, 03:57:20
av bearing
Jag har en gång skrivit ett program i C som kan läsa och skriva BMP. Om du vill kan jag leta rätt på det, och ändra efter dina önskemål, ifall jag orkar.

Re: Konvertera monokroma bilder till inline assembly

Postat: 7 maj 2010, 14:22:58
av Swech
FastLCD funkade... fanns en hel del att önska utöver vad som bjöds men det går att leva med..

Swech

Re: Konvertera monokroma bilder till inline assembly

Postat: 7 maj 2010, 16:37:15
av bearing
När jag googlade efter fastlcd hittade jag den här:
http://rs503.rapidshare.com/files/15808 ... astlcd.rar

Testade bmp2asm och den skapar detta av en testbild:
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x03,0x01
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF

Re: Konvertera monokroma bilder till inline assembly

Postat: 8 maj 2010, 13:40:32
av bos
Swech skrev:Någon som har ett program som kan konvertera monokroma bilder till
asciitext för inline assembly.
Här har du ett snabbhack jag skrev i Python:

Kod: Markera allt

import Image

img = Image.open("hej.png")
d = img.tostring()
_x, _y = img.size
n = 0

for y in xrange(_y):
    s = ".dw 0b"
    for x in xrange(_x):
        s = s + str(ord(d[n]))
        n = n + 1
    print s

Kod: Markera allt

>>> ## working on region in file /usr/tmp/python-19677Vmn...
.dw 0b0000000000000000
.dw 0b0100001000000010
.dw 0b0100001000000000
.dw 0b0100001001100110
.dw 0b0111111010010010
.dw 0b0100001011110010
.dw 0b0100001010000010
.dw 0b0100001001110010
.dw 0b0000000000000010
.dw 0b0000000000001100
.dw 0b0000000000000000

Re: Konvertera monokroma bilder till inline assembly

Postat: 8 maj 2010, 15:25:25
av bearing
Jag tror Swech menade att bilderna är helt svartvita (ingen gråskala) och att varje bit ska representera en pixel.

Re: Konvertera monokroma bilder till inline assembly

Postat: 8 maj 2010, 16:10:26
av blueint
Självklart är perl minst lika bra till uppgiften.. :D

Om infilen är en 1-bit/pixel .pbm (portable bitmap) fil som denna:

Kod: Markera allt

P4
# CREATOR: XV
480 270
Ûm¶Ûm¶Ûm^@^@¶Ûm¶Õ ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^B
.
.
Kan man omvandla den med detta Perl program:

ppm2inline.pl

Kod: Markera allt

$input_filename = $ARGV[0];

if(  open(F,$input_filename)  ){
  <F>; <F>; $param=<F>;
  read(F, $bin, 1<<24);
  close F;
  }

if(  $param =~ /^(\d+)\s+(\d+)/s  ){
  $x_siz = $1;
  $y_siz = $2;
  }

$x_max  = $x_siz;
$y_max  = $y_siz;

for($y=0;  $y<$y_max;  $y++){
  for($x=0;  $x<$x_max;  $x++){
    $pos = $y*$x_siz + $x;

    $str[$n] .= sprintf("%d",  (ord(substr($bin, $pos/8, 1)) >> (7-($pos)%8))&1  );
    if(  length($str[$n]) >= 16  )
      { $n++; }
    }
  }

for($n=0; $n<=$#str; $n++){
  printf(".dw 0b%s\n", $str[$n] );
  }
Som ger detta resultat:

Kod: Markera allt

.dw 0b1101101101101101
.dw 0b1011011011011011
.dw 0b0110110110110110
.dw 0b1101101101101101
.
.

Re: Konvertera monokroma bilder till inline assembly

Postat: 8 maj 2010, 16:17:40
av bos
bearing skrev:Jag tror Swech menade att bilderna är helt svartvita (ingen gråskala) och att varje bit ska representera en pixel.
Ja?

(Ledtråd: Läs vad det står i 1orna)

Re: Konvertera monokroma bilder till inline assembly

Postat: 8 maj 2010, 16:36:00
av bearing
Intressant att image.tostring ger den utdatan. Det trodde jag inte att den skulle göra, utan att strängen skulle fyllas med bytes som antingen är 0xff eller 0x00.

Re: Konvertera monokroma bilder till inline assembly

Postat: 8 maj 2010, 16:44:02
av bos
Varför gissa när lösningen fanns framför näsan? :) Och varför skulle tostring() returnera 0 och 0xff?

tostring() ger 0 och 1 därför att det är en monokrom bild med endast två palettindex, vilket sammanfaller rätt bra med det Swech ville ha.

Re: Konvertera monokroma bilder till inline assembly

Postat: 8 maj 2010, 16:54:44
av bearing
Det var min första tanke att funktionen skulle fungera så. Sen kollade jag i dokumentation som sa att tostring() kan arbeta med 8,24,32 bitars bilder, det stod inget om 1-bitars. Så jag trodde att om indata var en 1-bit monokrom bild skulle bilden konverteras till en 8-bitars gråskalebild, som bara innehåller bytesen 0xff och 0x00. Såg inte att ettorna bildar ordet "hej", utan tänkte att det där bara var någon slumpvis data ifrån första linjen i en gråskalebild.