Aehm, kann Gimp nicht sowas?`Muesste mich doch scherw taeuschen wenn nicht. Einfach "speichern unter" Dann dann beim Filetyp waehlen
hm, der fehler liegt nahezu sicher daran, dass eine negative zahl mit
sprintf(buf,"%u,",*(file2+i)); als unsigned geschrieben wird.
ist file2 bei dir nun als char* (also signed) deklariert? dann dürfte der fehler dort liegen.. versuch evtl mal file2 dann doch als unsigned char* zu deklarieren, sonst fällt mir grade nix ein.
weiß leider grad auf die schnelle die genaue fehlerquelle nicht, und muss nun ins bett. ich guck es mir morgen nochmal an, sobald ich dazu komme.
gruesse
Aehm, kann Gimp nicht sowas?`Muesste mich doch scherw taeuschen wenn nicht. Einfach "speichern unter" Dann dann beim Filetyp waehlen
danke robocat,
es scheint jetzt zu funktionieren. es kommen zu midest vernünftige werte dabei raus. ob auf dem display jetzt was ordentliches ankommt is ne andere frage^^
nochmals vielen dank für eure hilfe
mfg maddin
ja das hab ich schon gemacht. aber egal wie es ist, das ergebnis ist nicht brauchbar. ich hab einfach mal ein komplett schwarzes bild 84x48pixel konvertieren lassen. ergebnis:
und weiß:Code:unsigned char picture[]={ 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,251,123,123,123, 123,123,123,123,255,127,127,127, 127,127,127,127,255,127,63,63, 63,63,63,31,255,255,255,255, 255,255,127,127,255,255,255,255, 255,255,255,223,255,255,255,255, 255,255,255,255,255,191,191,191, 191,191,191,191,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,247,215,23,23};
Code:unsigned char picture[]={ 0,0,0,0,0,0,0,0, 255,255,255,255,255,255,255,255, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,255,255,255,255, 255,255,255,255,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 255,255,255,255,255,255,255,255, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,255,255,255,255, 255,255,255,255,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 255,255,255,255,255,255,255,255, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,248,120,120,120, 120,120,120,120,255,127,127,127, 127,127,127,127,248,120,56,56, 56,56,56,24,248,248,248,248, 248,248,120,120,248,248,248,248, 248,248,248,216,248,248,248,248, 248,248,248,248,248,184,184,184, 184,184,184,184,248,248,248,248, 248,248,248,248,248,248,248,248, 248,248,248,248,248,248,248,248, 248,248,248,248,240,208,16,16};
da kann was nicht stimmen.
file2=malloc(504);
memset(file2,0,504);
for(x=0;x<84;x++)
{
for(y=0;y<48;y++)
{
if(!(*(file1+y*12+x/>>(7-(x%
))&1==1)
{
*(file2+(5-y/*84+x)|=1<<(7-(y%
);
}
}
}
diesen code abschnitt habe ich so abgeändert:
file2=malloc(1024);
memset(file2,0,1024);
for(x=0;x<128;x++)
{
for(y=0;y<64;y++)
{
if(!(*(file1+y*12+x/>>(7-(x%
))&1==1)
{
*(file2+(5-y/*128+x)|=1<<(7-(y%
);
}
}
}
ist das richtig so ? naja das programm lässt sich so zwar compilieren, aber windoof hängt sich immer auf wenn ich das programm dann starte.
aber wenn ich nur 84x48 bilder konvertiere mit dem alten code, funktioniert es ja auch nicht, siehe oben
habs jetzt mal angeguckt und geändert, sollte nun bei dir funktionieren, hoffe ich:
setz am besten deinen code in [code]-tags, um diese sonnenbrillen-smilies zu vermeiden.Code:/*---------------------------------------------------------------- width*height schwarz-weiss bitmap in nokia 3310 daten wandeln compiler: bcc32 OS: XP robocat, 13.04.07 ----------------------------------------------------------------*/ #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> // define glcd size here unsigned int width=128; unsigned int height=64; int main() { FILE *pDatei; unsigned int size,i,x,y; unsigned char buf[64],*file1,*file2; long pos1,pos2; pDatei = fopen("J:\\test.bmp", "rb"); if(pDatei == NULL) { printf("Fehler beim Oeffnen der Quell-Datei!\n"); printf("Programm beendet.\n"); exit(1); } fseek(pDatei,0,SEEK_END); pos2=ftell(pDatei); fseek(pDatei,10,SEEK_SET); fread(&pos1,4,1,pDatei); fseek(pDatei,pos1,SEEK_SET); size=pos2-pos1; file1=malloc(size); fread(file1,1,size,pDatei); fclose(pDatei); file2=(unsigned char*)malloc(width*height/8); memset(file2,0,width*height/8); for(x=0;x<width;x++) { for(y=0;y<height;y++) { if(!(*(file1+y*width/8+x/8)>>(7-(x%8)))&1==1) { *(file2+((height/8-1)-y/8)*width+x)|=1<<(7-(y%8)); } } } pDatei = fopen("J:\\test.txt", "w"); if(pDatei == NULL) { printf("Fehler beim Oeffnen der Ziel-Datei!\n"); printf("Programm beendet.\n"); free(file1); free(file2); exit(1); } sprintf(buf,"unsigned char picture[]={"); fwrite (buf,strlen(buf),1,pDatei); for(i=0;i<width*height/8;i++) { if(i%8==0)fwrite("\n",1,1,pDatei); sprintf((char*)buf,"%u,",*(file2+i)); fwrite(buf,strlen(buf),1,pDatei); } fseek(pDatei,-1,SEEK_END); fwrite ("};\n",3,1,pDatei); fclose(pDatei); free(file1); free(file2); return 0; }
vergiss nicht, das bmp als S/W und im richtigen format zu speichern, sonst stimmts hinten und vorn nicht.
gruesse von der katze
ich kann jetzt einen ersten erfolg verbuchen:
auf dem display kann ich ein 48*84 bmp darstellen. das original und das ergebnis weichen allerdings voneinnander ab. (es ist mit fantasie allerdings zu erkennen, was gemeint ist.) ob das am AVR code oder am konverter liegt weiß ich noch nicht so genau.
ich werde nachher mal deinen code ausprobieren.
außer ein paar casts war dein code ok. ich hab jetzt die bilder ans display geschickt. das konvertieren hat nicht ganz geklappt, das bild ist zwei mal da aber dafür halb so groß und dem entsprechend schlecht erkennbar. aber immerhin, es kommt ein erkennbares gesicht auf dem glcd an. woran könnte das liegen ? ich hab schon height und weight vertauscht, daran liegt es nicht.
das ist der code mit den richtigen casts. keine ahnung warum mein compiler da so kleinlich ist.... ^^Code:/*---------------------------------------------------------------- width*height schwarz-weiss bitmap in nokia 3310 daten wandeln compiler: bcc32 OS: XP robocat, 13.04.07 ----------------------------------------------------------------*/ #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> // define glcd size here unsigned int width=128; unsigned int height=64; int main() { FILE *pDatei; unsigned int size,i,x,y; unsigned char buf[128],*file1,*file2; long pos1,pos2; pDatei = fopen("C:\\martin.bmp", "rb"); if(pDatei == NULL) { printf("Fehler beim Oeffnen der Quell-Datei!\n"); printf("Programm beendet.\n"); while(1); } fseek(pDatei,0,SEEK_END); pos2=ftell(pDatei); fseek(pDatei,10,SEEK_SET); fread(&pos1,4,1,pDatei); fseek(pDatei,pos1,SEEK_SET); size=pos2-pos1; file1=(unsigned char*)malloc(size); fread(file1,1,size,pDatei); fclose(pDatei); file2=(unsigned char*)malloc(width*height/8); memset(file2,0,width*height/8); for(x=0;x<width;x++) { for(y=0;y<height;y++) { if(!(*(file1+y*width/8+x/8)>>(7-(x%8)))&1==1) { *(file2+((height/8-1)-y/8)*width+x)|=1<<(7-(y%8)); } } } pDatei = fopen("C:\\martin.txt", "w"); if(pDatei == NULL) { printf("Fehler beim Oeffnen der Ziel-Datei!\n"); printf("Programm beendet.\n"); free(file1); free(file2); while(1); } sprintf((char*)buf,"unsigned char picture[]={"); fwrite (buf,strlen((const char*)buf),1,pDatei); for(i=0;i<width*height/8;i++) { if(i%8==0)fwrite("\n",1,1,pDatei); sprintf((char*)buf,"%u,",*(file2+i)); fwrite(buf,strlen((const char*)buf),1,pDatei); } fseek(pDatei,-1,SEEK_END); fwrite ("};\n",3,1,pDatei); fclose(pDatei); free(file1); free(file2); printf("OK"); while(1); }
EDIT: ok jetzt ist der fehler mit dem doppelbild weg. (hab die bmp von 64x128 nach 128x64 gedreht). es sieht allerdings immernoch ziemlich verzerrt aus... mal sehen vllt finde ich den fehler ja noch.
ohne das display hier zu haben, kann ich leider nichts dazu sagen, ausser, dass das bmp auf meinem display auch anfangs seltsam ungenau/verfälscht ausgesehen hat. weiß aber nimmer genau worans lag.
du könntest mal das bitmap 64x128 lassen (wie zuvor) und dafür width und height im code vertauschen, wenn du das noch nicht gemacht hast.
viel erfolg wünscht die katz
jau, wight und hight hab ich schon vertauscht, das bild ist immer noch so komisch. liegt aber nicht am AVR programm sondern schon am erzeugten array. ich habs mal pixel für bixel durchgeprüft und habe schon nach wenigen zeilen einige fehler entdeckt... ich weiß nicht woran es liegt aber i.wie funktioniert die konvertierung noch nicht so ganz richtig.
mfg maddin
Lesezeichen