Forum: Projekte & Code Bitmap auf KS0108


von peter (Gast)


Lesenswert?

Hi,
da ich kein Tool gefunden habe, welches mir ein Bitmap in eine
Header Datei für das KS0108 umwandelt, habe ich selber eins
geschrieben. Es kann monochrome, unkomprimierte 128x64 Pixel große
Bitmaps verarbeiten. In der Headerdatei stehen dann 1024 Hexwerte,
nach dem schema
chip0 pattern 0 byte 0 bis 63
chip0 pattern 1 byte 0 bis 63
.
.
.
chip1 pattern 7 byte 0 bis 63
Konnte aber mangels Speicher :( noch gar kein ganzes Bild testen.
Nur bis chip 0 patter 5. Sah aber ganz gut aus.
Falls ihr es benutzt, sagt doch hier kurz bescheid wie gut es
funktioniert.
<a href="http://www.stoix.de/bmp2ks/bmp2ks.zip">Programm</a>;
Grueße
peter

von Tobias P. (hubertus)


Lesenswert?

hallo peter,
da ich grade mit einem graphikdisplay am basteln bin, habe ich mir dein 
programm mal angesehen.
es ist recht nützlich, aber leider schade, dass man keine ausgabge für 
assembler machen lassen kann.
ich programmiere ausschliesslich in assembler, deshalb ist es recht 
umständlich, das h-file, welches dein programm erzeugt, erst in asm 
umzusetzen. aber wenn du einen passenden konevrter hast...
bis jetzt habe ich meine graphiken von hand immer in dieses format 
gebracht:

chip 0  pattern 0  bytes 0..63
chip 1  pattern 0  bytes 0..63
chip 0  pattern 1  bytes 0..63
chip 1  pattern 1  bytes 0..63

usw.

aber sosnt - nützliches tool ;)

von Florian G (Gast)


Lesenswert?

Und wie bringt man dem controller jetzt genau bei, dass er die ganze 
header datei ausgeben soll. Hast du eventuell ein Beispiel von dir, wie 
du es gemacht hast?

von axel sch. (Gast)


Lesenswert?

Hallo,
habe das ganze zusammen mit den C-Routinen von ape wie folgt gelöst:
1
#include "bitmap.h"
2
3
void glcdMainOut(void)
4
{
5
    ks0108ClearScreen();
6
7
    int offset = 0;
8
    int y = 0;
9
    int x =0;
10
11
    for(y=0; y<63 ;y=y+8)
12
    {
13
      for(x=0; x<64 ;x++)
14
      {
15
        ks0108GotoXY(x, y);
16
        ks0108WriteData(ImageMap[offset]);
17
        offset++;
18
      }
19
    }
20
    
21
    for(y=0; y<63 ;y=y+8)
22
    {
23
      for(x=63; x<127 ;x++)
24
      {
25
        ks0108GotoXY(x, y);
26
        ks0108WriteData(ImageMap[offset]);
27
        offset++;
28
      }
29
    }
30
}

Tool funktioniert 1a! Lob an Peter! ;)
Gruß axel

von axel sch. (Gast)


Lesenswert?

kleine Korrektur...
1
#include "bitmap.h"
2
3
void glcdMainOut(void)
4
{
5
    ks0108ClearScreen();
6
7
    int offset = 0;
8
    int y = 0;
9
    int x =0;
10
11
    for(y=0; y<63 ;y=y+8)
12
    {
13
      for(x=0; x<64 ;x++)
14
      {
15
        ks0108GotoXY(x, y);
16
        ks0108WriteData(ImageMap[offset]);
17
        offset++;
18
      }
19
    }
20
    
21
    for(y=0; y<63 ;y=y+8)
22
    {
23
      for(x=63; x<128 ;x++)
24
      {
25
        ks0108GotoXY(x, y);
26
        ks0108WriteData(ImageMap[offset]);
27
        offset++;
28
      }
29
    }
30
}

von Christoph W. (redstorm)


Lesenswert?

Hallo,
der Link, den Peter oben angegeben hat, tut leider nicht mehr. Kann 
vielleicht jemand einen aktuellen Link posten. Das währe sehr nett.
Grüße
Redstorm

von Esquilax (Gast)


Lesenswert?

Doch geht schon, den Links hats nur ein bisschen "zerbröselt":
http://www.stoix.de/bmp2ks/bmp2ks.zip

von gaston (Gast)


Lesenswert?

Hallo,

hab irgendwie Probleme, ein akzeptables Format herzustellen.

Wenn ich mit Photoshop ein bitmap (1 bit farbtiefe) mit 128x64 pixeln 
erstelle, kommt immer die Standartfehlermeldung mit dem bmp2ks tool.

Kann mir jemand erklären wie ich das hinbekomme?

Danke und Grüße

von Michael U. (amiga)


Lesenswert?

Hallo,

vielleicht mit Kanonen (Photoshop) auf Spatzen (Bitmap) geschossen?

Hab gerade mal zum Test mit Windows-Paint (WinXP) ein Bild mit 128x64 in 
s/w bestellt, ein Linien reingemalt, gespeichert und konvertiert.

Keine Probleme...

Gruß aus Berlin
Michael

von gaston (Gast)


Lesenswert?

Hallo,

Tatsache, ohne Photoshop gehts.
Mit Linux geht das Programm "kolourpaint". bmp2ks kann dann problemlos 
konvertieren.

Danke

grüße gaston

von nixversteh (Gast)


Lesenswert?

Weil wir gerade dabei sind, meine Version der Mal-Routine.
Jetzt dürfen die Pic's auch im Flash bleiben.
Aufgerufen wird so:
1
ks0108WritePic(ImageMap);
1
void ks0108WritePic(const uint8_t* ptr) {
2
    ks0108ClearScreen();
3
4
    uint16_t offset = 0;
5
    uint8_t y = 0;
6
    uint8_t x =0;
7
8
    for(y = 0; y < 64; y += 8) {
9
        for(x = 0; x < 64; x++) {
10
            ks0108GotoXY(x, y);
11
            ks0108WriteData(pgm_read_byte(ptr + offset));
12
            offset++;
13
        }
14
    }
15
    for(y = 0; y < 64; y += 8) {
16
        for(x = 64; x < 128; x++) {
17
            ks0108GotoXY(x, y);
18
            ks0108WriteData(pgm_read_byte(ptr + offset));
19
            offset++;
20
        }
21
    }
22
}

von nixversteh (Gast)


Lesenswert?

Sorry, ich nochmal.
Aber, in der Kürze liegt die Würze.
1
void ks0108WritePic(const uint8_t* ptr) {
2
    ks0108ClearScreen();
3
4
    uint8_t y=0;
5
    uint8_t x=0;
6
7
    for(y=0; y<64; y+=8) {
8
        for(x=0; x<64; x++) {
9
            ks0108GotoXY(x, y);
10
            ks0108WriteData(pgm_read_byte(ptr++));
11
        }
12
    }
13
    for(y=0; y<64; y+=8) {
14
        for(x = 64; x<128; x++) {
15
            ks0108GotoXY(x, y);
16
            ks0108WriteData(pgm_read_byte(ptr++));
17
        }
18
    }
19
}

von gaston (Gast)


Lesenswert?

weißt du diese sorry bezieht sich doch nur auf bytes die du mit schrift 
voll machst.
poste ich ein bild sind 2.5 millionen bytes wech. sind wir doch alle 
froh, dass du nicht nen bild gepostet hast ;)
ps: bin grad nicht in der verfassung, aber kann man diese for's nicht in 
do-whiles umwandeln, könnte man noch mehr sparen.

N8 dann auch

von Felix L. (linsenm)


Lesenswert?

@Peter,

ich benutze dein Programm und es funktioniert hervorragend. Dankeschön!

Mit was hast du es denn geschrieben? Kannst du den Source-Code 
vielleicht posten?

@All: Da ich eine Weile gebraucht habe bis ich ein gültiges Format 
erzeugen konnte möchte ich meinen Weg unter Windows kurz posten:

1. Bitmap mit Gimp erstellen
2. Mit paint öffnen
3. Mit paint speichern. Das geforderte Speicherformat kann hier 
komfortabel ausgewählt werden.

Schönen Gruß!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.