Mala pomoc u c

4

Mala pomoc u c

offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

I dalje ti ne valja kod.
for (i=0; i<len; i++)             {                 if (buffer[i] == zarez)                     one += 1;                 rgb_boja[one][i] = buffer[i];             }                         if (rgb_boja[0] != NULL && atoi(rgb_boja[0]) <= 255)                 menu_text_color.r = *substr(rgb_boja[0], 0, strlen(rgb_boja[0]));             if (rgb_boja[1] != NULL && atoi(rgb_boja[1]) <= 255)                 menu_text_color.g = *substr(rgb_boja[1], 0, strlen(rgb_boja[1]));             if (rgb_boja[2] != NULL && atoi(rgb_boja[2]) <= 255)                 menu_text_color.b = *substr(rgb_boja[2], 0, strlen(rgb_boja[2]));
I dalje ti ulazi i zarez u niz gde treba da budu samo cifre!
Sa 'i' indexiras u rgb_boja niz koji posle nekog vremena prekoracuje granicu ovog niza!
Zasto koristis substr kad nema svrhu?
Moras razumeti kod koji pises!!!

...// pod uslovom da niz rgb_boja ima korektne vrednosti int r = atoi(rgb_boja[0]); if ( r <= 255)                 menu_text_color.r = r; ...

Probaj moj kod sto sam ti stavio ranije da li ce da radi?



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 15 Jul 2009
  • Poruke: 150

Napisano: 25 Jan 2012 0:17

Tvoj radi perfektno mada nisam testirao na pogresno upisan fajl mada verujem da je ok, takodje nema upozorenja prilikom kompilacije. Ovo sto sam pokusao bez uspeha, znam da prekoracuje niz, i ne znam kako da resim da ne prekoracuje, sta reci, mora se uciti, ima slicnosti sa php samo sto tu mora 100 definicija, ovo, ono, ma komplikovano je previse... i dalje ne razumem kako da zavrsim tu moju verziju, al ok . Hvala ti puno jos jednom!

Dopuna: 27 Jan 2012 22:34

Hej, Morando, aj pomazi molim te! Onaj sourc, sto sam ti dao link, koristi neki format za font ali ne mogu nikako da desifrujem u kom je to formatu niti mogu da desifrujem sta mu je gimp_image i hex part koda gde je smesten "pixel data"... znaci kod je ovaj:
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv) {     unsigned n;     unsigned char *x;     unsigned m;     unsigned run_val;     unsigned run_count;       n = gimp_image.width * gimp_image.height;     m = 0;     x = gimp_image.pixel_data;     printf("struct {\n");     printf("  unsigned width;\n");     printf("  unsigned height;\n");     printf("  unsigned cwidth;\n");     printf("  unsigned cheight;\n");     printf("  unsigned char rundata[];\n");     printf("} font = {\n");     printf("  .width = %d,\n  .height = %d,\n  .cwidth = %d,\n  .cheight = %d,\n", gimp_image.width, gimp_image.height,            gimp_image.width / 96, gimp_image.height);     printf("  .rundata = {\n");         run_val = (*x ? 0 : 255);     run_count = 1;     n--;     x+=3;     while(n-- > 0) {         unsigned val = (*x ? 0 : 255);         x+=3;         if((val == run_val) && (run_count < 127)) {             run_count++;         } else { eject:             printf("0x%02x,",run_count | (run_val ? 0x80 : 0x00));             run_val = val;             run_count = 1;             m += 5;             if(m >= 75) {                 printf("\n");                 m = 0;             }         }     }     printf("0x%02x,",run_count | (run_val ? 0x80 : 0x00));     printf("\n0x00,");     printf("\n");     printf("  }\n};\n");     return 0; }
i on ustvari generise font_x_x.h fajl koji je u sourcu koristen, ali autor nije dao nikakav link niti bilo kakav primer kako da se taj mkfont.c i upotrebi niti je dao objasnjenje sta je gimp_image... zbunjujuce... github.com/CyanogenMod/android_bootable_re.....ont_7x16.h



offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Jeste zbunujuce, treba prelistavati sav source da bi nasao nesto konkretno, a plus nema nesto ni komentara.
Mislim da je format "png", a "gimp_image" treba da se ucita sa nekom funkcijom koju jos uvek ne mogu da nadjem gledajuci po onim folderima.
"pixel_data" je niz/pokazivac pixela iz texture fonta, s'obzirom da ovako inkrementuje pokazivac:
unsigned char *x; // unsigned char = 1 bajt / 8 bita ... x = gimp_image.pixel_data; // x sad pokazuje na prvi pixel u texturi ...  x +=3; //predji na sledeci pixel
znaci da ima 8 bita po kanalu iliti RGB (bez alfa kanala).

Font textura bi trebalo da izgleda ovako, sudeci po kodu sto si stavio (koji je nepotpun):



Probaj da nadjes na forumu za android sdk ako neko ima primer kako se ucitava custom font.

Ne mogu da povezem kako ovo odraditi. Imam samo fragmente u glavi kako bi trebalo otprilike:
pogledaj ovaj source:
... typedef struct {     GGLSurface texture;     unsigned cwidth;     unsigned cheight;     unsigned ascent; } GRFont; ... static GRFont *gr_font = 0;

gimp_image je u stvari "texture", koja se verovatno ucitava sa :
int res_create_surface(const char* name, gr_surface* pSurface);
znaci
GGLSurface gimp_image; ... // "/res/images/moj_font.png" res_create_surface("moj_font", (gr_surface*) &gimp_image); ...

e sad nisam siguran da li je negde kod za oslobadjanje memorije texture fonta vec negde podesen.
res_free_surface((gr_surface*)&gimp_image);

Nasao sam definiciju GGLSurface-a:
typedef struct {     GGLsizei    version;    // always set to sizeof(GGLSurface)     GGLuint     width;      // width in pixels     GGLuint     height;     // height in pixels     GGLint      stride;     // stride in pixels     GGLubyte*   data;       // pointer to the bits     GGLubyte    format;     // pixel format     GGLubyte    rfu[3];     // must be zero     // these values are dependent on the used format     union {         GGLint  compressedFormat;         GGLint  vstride;     };     void*       reserved; } GGLSurface;
Prvi deo onog koda iz "mkfont.c", "pixel_data" je u stvari "data". Izgleda da je taj fajl u stvari sa polu-pseudo kodom.

offline
  • Pridružio: 15 Jul 2009
  • Poruke: 150

Hvala ti opet veliko, pricao sam sa jednim, kaze mi da treba pomocu gimpa da se napravi font.slika_fomat i pretvori u *.c "nisam nikad radio sa gimpom pa ne znam na koji nacin pretvoriti u c" i da se includuje taj .c u mkfont.c i kompiluje jednostavno sa gcc mkfont.c ali opet nece da kaze detalje "dali treba font po font" ili niz karaktera u slici... hmm. I kaze da to sto pokusavam "da napravim kineski font" nece biti bas lako jer je font u ovom programu u ansi, e sad ja sam mislio da napavim neku lookup tablu "ako ovo desifrujem pokusacu" koja ce da pretvara kineske karaktere u hexadeca ili u decimalan oblik pa pomocu toga da biram pixel data...itd, samo je ovo problem desifrovati, tj pokusati napraviti slican font u ovom formatu pa onda krenuti konkretno na posao Smile

offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Aha, znaci tako se radi.
Mozes da probas ovako, mada opet nagadjam jer ne mogu sam da probam ovo da bih utvrdio ako negde gresim.

1. Skines Gimp http://www.gimp.org/downloads/
2. Skines ovaj generator bitmap textura http://www.codehead.co.uk/cbfg/
3. Namestis svoj font u generatoru, nesto kao ovako:

4. File -> Export -> Bitmap(BMP) font.bmp
5. Otvoris u Gimp-u tu font.bmp sliku i File -> Save as:

6. ubacis u onaj mkfont.c:
#include <stdio.h> ... #include <font.c>
6.1. [EDIT] printf funkcija mora da se redirektuje da pise u fajl umesto u prozor konzole. Za windows izgleda ovako:
command prompt (konzola)
c:\user\morando>cd c:\staza\do\mkfont_exe_fajla c:\staza\do\mkfont_exe_fajla>mkfont.exe > font_7x16.h
6.2. U graphics.c mislim da se ova linija mora promeniti u ime generisanog "font_7x16.h" fajla (ili kako si ga vec nazvao) ili zameniti sadrzaj sa novim generisanim.
... #ifdef BOARD_USE_CUSTOM_RECOVERY_FONT #include BOARD_USE_CUSTOM_RECOVERY_FONT #else #include "font_10x18.h"//ovo promeniti #endif ...
7. U Gimp-u onu istu texturu fonta snimis kao "png" i iskopiras u "/res/images/font.png", mislim da mora da se zove font.png!

Ne mozes kineska slova da koristis! Lepo ti je rekao samo ANSI karakteri.

offline
  • Pridružio: 15 Jul 2009
  • Poruke: 150

Ovo je super sto si pronasao, extra! Jedino jos ne razumem koje karaktere je upotrebio u onom fontu "po kojem redosledu" Smile Dali bi onaj font mogao da se "reverse" u sliku? Probao sam hexadecimalne vrednosti snimiti kao png,bmp itd i nemoguce otvoriti... mada mozda i ne treba redosled?

offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Citat:
Jedino jos ne razumem koje karaktere je upotrebio u onom fontu "po kojem redosledu".


Najverovatnije koriste karaktere od 32 - 126
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv) {    for(char c = 32; c < 127; ++c)       printf("%c",c);    getchar();     return 0; }

Ako si mislio na ove hex vrednosti u dnu https://github.com/CyanogenMod/android_bootable_re.....ont_7x16.h, one predstavljju nesto drugo a ne vrednosti pixela!
Default font se nalazi negde na nekom drugom mestu, ne mogu da nadjem.

offline
  • Pridružio: 15 Jul 2009
  • Poruke: 150

Ok, igracu se jos malo sa tim fontovima, generisao sam vec jedan 8x16 ali prikazuje ga na telefonu u hiroglifima i nista se ne razume, verovatno treba prozirna slika da bude prilikom gimpovanja, al ok, pokusacu jos koji put na vise nacina dok ne dobijem ono sto sam hteo da znam. Znam kako cu to da odradim, posto ovo ne podrzava utf znakove, pokusacu da napravim nesto sa realnim png slikama kao sto sam napravio za level baterije da prikaze level u icon formatu (koristeci lookup tablu od 100 nizova odakle koristim redosled slika "enum u common.h":
//used enum from common.h in our hardcoded level lookup table for first part of the battery picture!!! static const short level_lookup_table_first[] = {          10,   10,   10,   10,   10,   10,   10,   10,   10,   11,             11,   11,   11,   11,   11,   11,   11,   11,   11,   12,             12,   12,   12,   12,   12,   12,   12,   12,   12,   13,             13,   13,   13,   13,   13,   13,   13,   13,   13,   14,             14,   14,   14,   14,   14,   14,   14,   14,   14,   15,             15,   15,   15,   15,   15,   15,   15,   15,   15,   16,             16,   16,   16,   16,   16,   16,   16,   16,   16,   17,             17,   17,   17,   17,   17,   17,   17,   17,   17,   18,             18,   18,   18,   18,   18,   18,   18,   18,   18,   19,             19,   19,   19,   19,   19,   19,   19,   19,   19,   30 }; //used enum from common.h in our hardcoded level lookup table for seccond part of the battery picture!!! static const short level_lookup_table_seccond[] = {          21,   22,   23,   24,   25,   26,   27,   28,   29,   20,             21,   22,   23,   24,   25,   26,   27,   28,   29,   20,             21,   22,   23,   24,   25,   26,   27,   28,   29,   20,             21,   22,   23,   24,   25,   26,   27,   28,   29,   20,             21,   22,   23,   24,   25,   26,   27,   28,   29,   20,             21,   22,   23,   24,   25,   26,   27,   28,   29,   20,             21,   22,   23,   24,   25,   26,   27,   28,   29,   20,             21,   22,   23,   24,   25,   26,   27,   28,   29,   20,             21,   22,   23,   24,   25,   26,   27,   28,   29,   20,             21,   22,   23,   24,   25,   26,   27,   28,   29,   20 };

A nesto slicno cu probati da napravim da konvertuje kineski "char" u interval i kroz lookup tablu da ucita png sliku za taj karakter... U svakom slucaju hvalaaaaa ti puno i svaka ti cast na volji da pomognes!!!

offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Napisano: 30 Jan 2012 18:30

Probaj ovaj plugin za Gimp. Nisam uspeo na windows-u da ga namestim da radi! Mozda ces ti moci na Linux-u? Onda nema potrebe za onim font generatorom.
Takodje mislim da kod font texture sve treba da bude u jednom redu kao na onoj prvoj slici sto sam ti postavio ranije:


Probaj prvo normalno bez alfa kanala slobodno, jer koliko sam razumeo onaj kod bitno je da je pozadina crna a slova da budu bela:
// 0 crno (minimana vrednost), 255 belo (maximalna vrednost) unsigned val = (*x ? 0 : 255);

Dopuna: 30 Jan 2012 18:40

Dobro pogledaj ovu njihovu liniju koda:
printf("  .width = %d,\n  .height = %d,\n  .cwidth = %d,\n  .cheight = %d,\n", gimp_image.width, gimp_image.height,            gimp_image.width / 96, gimp_image.height);
predpostavljam sledece:
width = duzina texture
height = visina texture
cwidth = fixna duzina 1 karaktera = gimp_image.width / 96; // zato sto treba da ima 96 karaktera!
// ^ to ti je ono od 32 - 127
cheight = fixna visina 1 karaktera = gimp_image.height

Znaci treba da budu lepo rasporedjeni po slici/texturi!

A B C D E F...
a ne:
ABCDEF...
to mislim da odradjuje onaj plugin kako treba!

Srecno i javi da li si sta uspeo. Smile

offline
  • Pridružio: 15 Jul 2009
  • Poruke: 150

Super! U pravu si, kad stavim 2 reda dobijam font prevelik 16x32 ili tako nesto, znaci mora 1 red, i mislim da si u pravu da ipak ide od 32 - 127, e sad dali slika treba da bude 668 width ili ne mora
7x16.h
  .width = 668,   .height = 16,   .cwidth = 7,   .cheight = 16, mislim da mora ako hocu 7x16. Dali treba ABCD ili A B C D tu te ne kontam bas najbolje, kako mislis?

Ko je trenutno na forumu
 

Ukupno su 607 korisnika na forumu :: 16 registrovanih, 2 sakrivenih i 589 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: _Sale, Drug pukovnik, helen1, Ilija Cvorovic, ladro, Milos ZA, prle122, RecA, shaja1, Smd, sokars, srecko81, Trpe Grozni, vathra, yrraf, zlaya011