Merhaba,
Belki grafik/demo programlarında kullanmak üzere, tıpkı LED ekranlardaki gibi dotFont çalışmasını (şimdilik 0-9, A, B, C, Ç D karakterleri yapıldı) aşağıda bulabilirsiniz. Özelliği bool veriyi byte'a çevirip kod içinde doğrudan kullanabileceğiniz veriyi ekrana döndürmesiydi. Yani bu kadar gereksiz kod/veri(*) bunun için...:)
Ayrıca sonda hangi desen ne sıklıkla kullandığı özetini veriyor. Belki satır/sütun (16x8 -> 8x16) yer değiştirilerse daha farklı (iyi/kötü) sonuç çıkabilir. Ama onun algoritmasını (şurada (http://www.kosbie.net/cmu/fall-08/15-100/handouts/notes-two-dimensional-arrays.html) bir şeyler var ama) beceremedim. Belki de sıkıştırmak gereksiz çünkü böyle bir veri yapısı topu topu 16 byte (cent variable type) yer kaplıyor. Ekrana çizilmesi ise yaklaşık 150 cycle/pixel (16x8 = 128) görünüyor. Henüz SDL'de denemedim ama iş görür gibi, ne dersiniz?
(*) Bu algoritma/veri yapısı mutlaka bir yerlerde vardır veya kullanılıyordur. Ancak bu hem Türkçe hem de kişiselleştirilebilir. Bir de BIOS'dan veri alıp da render ediyorlar galiba. O nasıl olur, hızlımı olur bilmiyorum. Ama siz de katkı sağlamak isterseniz ortalardan bir yerde harf dizisi (örneğin küçük harflere daha var!) desteği verirseniz hepimiz için bir kardır.
/*
dotfont.d (23.08.2012)
*
* dmd dotfont sdl -L-lSDL -release
*/
//import sdl, core.stdc.stdio: printf;/*
import std.stdio;//*/
void analizEt_ve_Çevir(bool[][]*[] dotfont) {
byte[][] abece;
abece.length = dotfont.length;
int[int] sayım;
int xSay, say, xTopla;
foreach(Y; dotfont) {
foreach(y; *Y) {
say = 0;
foreach(p, x; y) {
if(x) printf("Θ"); else printf("·");
say += x ? 1 << p : 0;
}
abece[xSay] ~= cast(byte)say;
printf("\n");
sayım[say]++;
}
xSay++;
sayım.writeln;
}
write("\n\nbyte[][] abece = ");
abece.writeln(";\n\n");
say = sayım.length - 1;
// +1 boş satır, değeri sıfır (0) ve sayıca fazla: ~100-200 bayt
say.writeln(" + 1 bayt farklı desen tespit edildi, bunlar:");
writeln("==================================================");
foreach(i; sayım.keys) {
if(i) i.writeln("\t: ", std.array.replicate("*",
sayım[i]), "(", sayım[i], ")");
xTopla += sayım[i];
}
writeln("==================================================");
writefln("Toplam %d bayt veri analiz edildi ve\n"
"%d'de 1'e algoritma ile özelleştirilebilir veya\n"
"sıkıştırışabilir...", xTopla, xTopla / (say +1));
}
void main() {
bool[][] sıfır = [ [ 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, 1, 1, 1, 1, 1, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 0, 1, 1, 1, 1, 1, 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 ]
];
bool[][] bir = [ [ 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, 1, 1, 0, 0, 0 ],
[ 0, 0, 1, 1, 1, 0, 0, 0 ],
[ 0, 1, 1, 1, 1, 0, 0, 0 ],
[ 1, 1, 0, 1, 1, 0, 0, 0 ],
[ 0, 0, 0, 1, 1, 0, 0, 0 ],
[ 0, 0, 0, 1, 1, 0, 0, 0 ],
[ 0, 0, 0, 1, 1, 0, 0, 0 ],
[ 0, 0, 0, 1, 1, 0, 0, 0 ],
[ 0, 0, 0, 1, 1, 0, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 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 ]
];
bool[][] iki = [ [ 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, 1, 1, 1, 1, 1, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 0, 0, 0, 0, 0, 1, 1, 0 ],
[ 0, 0, 0, 0, 1, 1, 0, 0 ],
[ 0, 0, 0, 1, 1, 0, 0, 0 ],
[ 0, 0, 1, 1, 0, 0, 0, 0 ],
[ 0, 1, 1, 0, 0, 0, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 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 ]
];
bool[][] üç = [ [ 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, 1, 1, 1, 1, 1, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 0, 0, 0, 0, 0, 1, 1, 0 ],
[ 0, 0, 0, 0, 0, 1, 1, 0 ],
[ 0, 0, 0, 1, 1, 1, 0, 0 ],
[ 0, 0, 0, 1, 1, 1, 1, 0 ],
[ 0, 0, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 0, 1, 1, 1, 1, 1, 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 ]
];
bool[][] dört = [ [ 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, 1, 1, 0, 0 ],
[ 0, 0, 0, 1, 1, 1, 0, 0 ],
[ 0, 0, 1, 1, 1, 1, 0, 0 ],
[ 0, 1, 1, 0, 1, 1, 0, 0 ],
[ 1, 1, 0, 0, 1, 1, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 0, 0, 0, 0, 1, 1, 0, 0 ],
[ 0, 0, 0, 0, 1, 1, 0, 0 ],
[ 0, 0, 0, 0, 1, 1, 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 ]
];
bool[][] beş = [ [ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 0, 0, 0 ],
[ 1, 1, 0, 0, 0, 0, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 0, 1, 1, 1, 1, 1, 1, 0 ],
[ 0, 0, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 0, 1, 1, 1, 1, 1, 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 ]
];
bool[][] altı = [ [ 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, 1, 1, 1, 1, 1, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 0, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 0, 1, 1, 1, 1, 1, 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 ]
];
bool[][] yedi = [ [ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 0, 0, 0, 0, 0, 1, 1, 0 ],
[ 0, 0, 0, 0, 1, 1, 0, 0 ],
[ 0, 0, 0, 1, 1, 0, 0, 0 ],
[ 0, 0, 1, 1, 0, 0, 0, 0 ],
[ 0, 0, 1, 1, 0, 0, 0, 0 ],
[ 0, 0, 1, 1, 0, 0, 0, 0 ],
[ 0, 0, 1, 1, 0, 0, 0, 0 ],
[ 0, 0, 1, 1, 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 ]
];
bool[][] sekiz = [ [ 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, 1, 1, 1, 1, 1, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 0, 1, 1, 1, 1, 1, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 0, 1, 1, 1, 1, 1, 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 ]
];
bool[][] dokuz = [ [ 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, 1, 1, 1, 1, 1, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 0, 1, 1, 1, 1, 1, 1, 0 ],
[ 0, 0, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 0, 1, 1, 1, 1, 1, 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 ]
];
bool[][] A = [ [ 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, 1, 0, 0, 0, 0 ],
[ 0, 0, 1, 1, 1, 0, 0, 0 ],
[ 0, 1, 1, 0, 1, 1, 0, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 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 ]
];
bool[][] B = [ [ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 1, 1, 1, 1, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 1, 1, 1, 1, 1, 1, 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 ]
];
bool[][] C = [ [ 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, 1, 1, 1, 1, 1, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 0, 0, 0 ],
[ 1, 1, 0, 0, 0, 0, 0, 0 ],
[ 1, 1, 0, 0, 0, 0, 0, 0 ],
[ 1, 1, 0, 0, 0, 0, 0, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 0, 1, 1, 1, 1, 1, 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 ]
];
bool[][] Ç = [ [ 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, 1, 1, 1, 1, 1, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 0, 0, 0 ],
[ 1, 1, 0, 0, 0, 0, 0, 0 ],
[ 1, 1, 0, 0, 0, 0, 0, 0 ],
[ 1, 1, 0, 0, 0, 0, 0, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 0, 1, 1, 1, 1, 1, 0, 0 ],
[ 0, 0, 0, 1, 1, 0, 0, 0 ],
[ 0, 0, 0, 1, 1, 0, 0, 0 ],
[ 0, 0, 1, 1, 0, 0, 0, 0 ]
];
bool[][] D = [ [ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 0, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 0, 0, 0, 1, 1, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 0 ],
[ 1, 1, 1, 1, 1, 1, 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 ]
];
bool[][]*[] sayılar = [ &sıfır, &bir, &iki, &üç, &dört, &beş, &altı,
&yedi, &sekiz, &dokuz, &A, &B, &C, &Ç, &D ];
analizEt_ve_Çevir(sayılar);
}
Çıktısı: (son kısmı)
'
20 + 1 bayt farklı desen tespit edildi, bunlar:
62 : *****************(17)
63 : ******(6)
126 : **(2)
127 : ************************************(36)
96 : *******(7)
3 : ***********(11)
99 : **************************************(38)
6 : *(1)
8 : *(1)
12 : *******(7)
48 : ******(6)
51 : *(1)
54 : **(2)
24 : **********(10)
56 : **(2)
27 : *(1)
120 : *(1)
28 : **(2)
60 : *(1)
30 : *(1)
Toplam 240 bayt veri analiz edildi ve
11'de 1'e algoritma ile özelleştirilebilir veya
sıkıştırışabilir...
'
Başarılar...
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]