Tam Sürümünü Görmek İçin : Text = bitmap
Volkan Uzun
31/01/2003, 10:49
selamlar,
sıkıştırma konusunda bir arkadas text yazıyı bitmape cevirip sonra bunu gif e cevirmekten bahsetmişti gerci burada kayip oluır gibi geliyor. Ama gibi gelmesi kötü tabii test edip gormek lazım.
Bu konuda aranızda acaba verilen bir text dosyayi bitmap e ceviren programı yazmak isteyen olurmu ki ?
ahmet ustun
31/01/2003, 12:02
böyle bir yazılım ben yazmıştım, sen nasıl bir şey yazacaksın.
Bu islemin amaci, verinin daha az yer kaplamasi degil, degil mi?
ahmet ustun
31/01/2003, 13:01
bazen daha az yer kaplıya biliyor.
ahmet ustun
31/01/2003, 13:07
neden
Volkan Uzun
31/01/2003, 13:10
amacı birilerinin buraya bisiler yazması :)
baska bir amac : bir buyuk arastirmacı derki :
kisilerin yazılarını resime cevirirsen, cıkan geometrik sekiller birbirine benzer. peki bu resimlerden yola cikarak, kisileri tahmin edebilirmiyiz.
@acemi5 eger yaziyi bitmap yapip sonra gif vs yaparsak veri kaybı olur bence. ucuncu bir amacta, daha onceki bir topicte tartisilian veri sıkıstırmasında, bitmap yapip sonra gif vs yaparak sıkıştırma olurmu bu gormek !
@ahmet ustun : kodu buraya gonderirsen ne guzel olurdu :hmmm:
daha az yer kaplamasının imkanı yok derken eger kayipsiz veri dersek headerden dolayi banada imkansız gozukuyor. ama neden programla bunu denemiyoruz ???
ahmet ustun
31/01/2003, 13:16
bir yazılım yaptım ve denemesinide yaptım ve bazen zipli dosyaya göre yarı yarıya olabiliyor.
veri kaybına gelince veri kaybolmaz çünkü şekil değiştiriyor. olayları tersine çevirince eski haline gelir.
Volkan Uzun
31/01/2003, 13:29
Selamlar,
simdi anlamadigim sudur : text = bitmap yaparken bitmapteki bitler yerine charleri yazıyorsan ve sonrada bunu jpeg veya gif e cevirirsen ve sıkıstırmak icin bunlari compressed yapiyorsan eger, veri kaybi olmali cunku jpeg veya gif sıkıstırırken veri kaybı yapiyor diye biliyorum. dolayısıyla geri dönüşü yok bu işlemin gibi geliyor.
ama sen eger baska bir algoritma izliyorsan onuda paylasırsan sevinirim.
ahmet ustun
31/01/2003, 13:39
bitmap dosyada sadece siyah ve beyazlar var gif'e çevirince görüntüde bir fark olmuyor.
Volkan Uzun
31/01/2003, 13:42
anlasıldı.
<%saka%>
ahmet ustun bizimle program sourceunu paylasmak istemiyor
</%saka>
iş başa düştü yazalım bakalım programı.
:super:
ahmet ustun
31/01/2003, 13:44
@acemi5 imkanı yok demiştin neden?
@sanal_programci istersen mail adresine göndereyim.
ben şu sıralar bütün sıkıştırma teknolojilerini öğrenmeye çalışıyorum hepsinin farklı yöntemleri var bunlardan biri kesin işime yarayacağını umuyorum.
Text dosyada her bi harf icin 8 bit harcaniyor. Bitmap dosyada 8 bit ile, 8 adet nokta ancak tanimlanir. Bu da bir harfi bile tanimlamaya yetmez. Sikistirma islemine gelince, text dosya sikistirma isleminde de oldukca iyi sonuc verir.
Ornegin forumdaki su ufak ikonlara bakin (renkli olanlar degil, siyah-beyaz olanlar) Bu gif dosyalarin en ufagi bile yaklasik 100 byte civarinda ki 100 byte, text dosyada 100 adet harfi gostermek icin kullanilabilir.
Veya :) ikonu 370 bytes yer kapliyor. yani 370 harfin kaplayacagi kadar yer.
Volkan Uzun
31/01/2003, 13:48
himm source uzunsa ve c++ ise mailime atmani isterim.
sanal_programci@yahoo.com.
sourceu paylasip paylasamayacagimida yazarsan sevinirim.
ama delphi, veya en kotusu benim için vb ise, veya burada paylasamazsam gerek yok teşekkür ederim :)
demekki sıkıştırma algoritmaları konusunda, ahmet ustunden epey bilgi alabiliriz. ne güzel yeni bir kaynak.
ahmet ustun
31/01/2003, 13:48
ama mayura isminde bir yazılımı duydunuzmu bilmiyorum. gifli dosyaya göre yarıyarıya sıkıştırma yapabiliyor.
ahmet ustun
31/01/2003, 13:53
ben aslında bu yazılım için interprobilişim ödüllerine katılmak için göndermiştim.
@sanal_programci yazılımı delphi3 ile yaptım içinde lisanslı bir component var kaynak kodu paylaşamam bu yüzden ama exe'yi gönderebilirim.
100 byte'lik gif'i, 4 byte'a indiremedigi surece text dosyadan daha ufak olamaz. Bi de dusun, henuz sikistirilmamis text dosyadan bahsediyoruz. Bir de text dosyayi sikistirdigimizda farkin ne derece artacagini hesapla.
ahmet ustun
31/01/2003, 13:58
@acemi5 zaten bende her karakter için 8 nokta kullanıyorum.
Volkan Uzun
31/01/2003, 13:59
selamlar,
teşekkürler ahmet ustun ama delphi ile aram iyi değil. bu haftasonu fırsat bulup yazmayı düşünüyorum basit olarak text = bitmap çevirisini yapan programı.
ahmet ustun
31/01/2003, 14:08
ama acemi bir notayı unutuyorsun, bitmap bir resim tek renkli olarak kaydedilebiliyor buda textli bir dosyaya eşit hale getirebiliyor.
Her harf icin 8 nokta kullanman onemli degil, 8 bit kullanman onemli... 8 bit ile, kac pixel'i gosterebilirsin ki? Koordinati, dolu ya da bos oldugu gibi ozellikleri gostermen gerektigini unutma.
Aslinda lafa gerek yok. Bana bir gif dosyasi goster ki icindeki harf sayisindan daha az byte yer kaplasin. Ornegin gif dosya 10 harfi gosteriyorsa, boyu 10 byte'dan kucuk olsun.
ahmet ustun
31/01/2003, 14:34
mesela hex=FF olan bir resmi ben arka arkaya 8 tane siyah nokta koyuyorum. ama bunu sıkıştırma algoritmasını kullanarak mesela bir siyah nokta ve arkasından bir renkli nokta mesela siyahı sekizkere tekrarlattıracak kırmızı bir nokta kullansak iki pikselde 8 noktayı göstermiş oluruz. ama şuan ben bunu daha kullanmadım. acaba bunu kullansam nasıl olur!(denemeliyim:))
Bilgisayarda kirmizi nokta diye bir veri birimi yok. Kirmizi nokta dedigin zaten tek basina 3-4 byte tutan bir bilgi. Bir pixel, bir bitlik bilgi anlamina gelmiyor.
ahmet ustun
31/01/2003, 15:13
ama text formatlı bir dosya içeriği bitmapa çevirince veri boyutu değişmiyor!:confused: neden acaba benim burada anladığım bir pixel bir bit'e karşılık geliyor.
Yok, bu is lafla olmayacak :) En iyisi sen, dedigim gibi bir ornek bulmaya calis veya bu isi yapmaya calis.
Volkan Uzun
03/02/2003, 01:55
selamlar,
bugun programi yazdim arkadaslar. her text dosyasinda olmamakla birlikte bazi textleri once bitmap e cevirip sonra bir araci programla gif e cevirmek text gercekten sıkıstırabiliyor.
sectigim hicbir text dosyada maalesef zipi gecemedim.
83700 karakterli bir text dosyayi 84 k yer kapliyordu. bitmap e cevirdim hala 84 k. sonra gif yaptım ve sonuc 12 kb. ama aynı dosyayi zip 6 kya dusurdu :D
programın sourceunu buraya eklemek isterim ama nasıl yapacagimi bilmiyorum sorup ogrendigimde sourceuda eklerim.
ben sadece text i bitmap yapan bolumu yazdim.
bir arkadas acaba, bitmapten text e ceviren bolumu yazmak istermi ?
Volkan Uzun
03/02/2003, 03:37
bir türlü program ekleyemeyince dedimki sourceu buraya copy paste ediyim :) zaten cok basit bir kod.
-------------------
main.hpp
********
#include<assert.h>
//bazi sabitler
#define EKSIK_PARAMETRE 99
#define DOSYA_ACILAMADI 98
#define MAX_SATIR 640
#define MAX_SUTUN 480
//Argumanlari kontrol eden fonksiyon
// return = 1 ise ok
// return = 0 ise parametre hatasi
int ArgumanKontrol(int);
//programin nasil cagiralacagini gosteren fonksiyon
void Kullanimi_Goster()
{
printf("\n<program_adi> <text file path>\n");
return ;
}
DWORD Karakterleri_Say(FILE *fp)
{
assert(NULL != fp);
DWORD dwNum = 0;
while (!feof(fp))
{
fgetc(fp);
++dwNum;
}
return dwNum;
}
void FillBitmapStruct(BITMAPINFO *bp,BITMAPFILEHEADER *bmpHeader,DWORD dwCharLen)
{
//once header hazirlayalim
bmpHeader->bfType = 0x4D42; // ilk iki byte BM ve little endian dikkat.
bmpHeader->bfReserved1 = 0;
bmpHeader->bfReserved2 = 0;
DWORD dwColumns = MAX_SUTUN;
DWORD dwRows = dwCharLen / MAX_SUTUN + 1;
bmpHeader->bfSize = dwColumns*dwRows+sizeof(bmpHeader);
bmpHeader->bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOH EADER);
bp->bmiHeader .biBitCount = 1; // siyah beyaz
bp->bmiHeader .biClrImportant = 0;
bp->bmiHeader .biClrUsed = 0;
bp->bmiHeader .biCompression = BI_RGB ; // compression yok
bp->bmiHeader .biHeight = dwRows;
bp->bmiHeader .biWidth = dwColumns;
bp->bmiHeader .biPlanes = 1;
bp->bmiHeader .biSize = sizeof(BITMAPINFOHEADER);
bp->bmiHeader .biSizeImage = dwCharLen;
bp->bmiHeader.biXPelsPerMeter = 0;
bp->bmiHeader .biYPelsPerMeter = 0;
}
*****************
main.cpp
***********-******
// sanal_programci@yahoo.com
// 02.02.2003 23:50
// Program Adi : Text2Bitmap
// Program Aciklamasi : Parametre olarak verilen bir text dosyayi, bitmap resme cevirir.
// TESTED OS : W2k Prof Sp3.
//
// This program is copyleft.
#include<windows.h>
#include<stdio.h>
#include"main.hpp"
int main(int iNumParam,char **szParams)
{
int iReturn = ArgumanKontrol(iNumParam);
if (0 == iReturn )
{
Kullanimi_Goster();
return EKSIK_PARAMETRE;
}
FILE *fp = fopen(szParams[1],"r+");
if ( NULL == fp )
{
printf("%s dosyasini acarken hata olustu\n",szParams[1]);
printf("Dosyayi veya dosya pathini kontrol edin\n");
return DOSYA_ACILAMADI;
}
DWORD dwNumCharacter = Karakterleri_Say(fp);
fclose(fp);
// 640 x 480 lik resimi gecmeyelim
if ( (MAX_SATIR*MAX_SUTUN ) < dwNumCharacter )
{
printf("307000 karakterden daha büyük dosya girdiniz\n");
printf("Lütfen daha kucuk bir dosya girin\n");
}
//datayi dosyadan alalim
BYTE *dwData = new BYTE[dwNumCharacter];
DWORD i = 0;
fp = fopen(szParams[1],"r");
while(!feof(fp))
dwData[i++] = fgetc(fp);
fclose(fp);
BITMAPINFO bitmapInfo;
BITMAPFILEHEADER bitmapHeader;
FillBitmapStruct(&bitmapInfo,&bitmapHeader,dwNumCharacter);
fp = fopen("text.bmp","wb");
if ( NULL == fp)
{
printf("text.bmp dosyasi yaratilamadi\n");
return DOSYA_ACILAMADI;
}
fwrite(&bitmapHeader,sizeof(BITMAPFILEHEADER),1,fp);
fwrite(&bitmapInfo,sizeof(bitmapInfo),1,fp);
fwrite(dwData,dwNumCharacter,1,fp);
fclose(fp);
delete []dwData;
return 0;
}
int ArgumanKontrol(int iParam)
{
if ( iParam != 2 )
return 0;
return 1;
}
83700 karakterli bir text dosyayi 84 k yer kapliyordu. bitmap e cevirdim hala 84 k. sonra gif yaptım ve sonuc 12 kb. ama aynı dosyayi zip 6 kya dusurdu :D
Programi denemedim ama sikistirilmis hali 6 KB olan text dosyayi, 12 KB'lik gif dosyaya cevirebiliyorsa, gercekten buyuk basari. Tebrik ederim.
bir arkadas acaba, bitmapten text e ceviren bolumu yazmak istermi ?
Bunun icin hazir OCR yazilimlari kullanilabilir. Tabii senin olusturdugun gif'lere ozel bir ceviri programi daha etkili ve hizli olabilir.
ahmet ustun
03/02/2003, 11:13
tebrikler, sende text'i bitmap'a çevirme işlemleri nekadar zaman alıyor.
Volkan Uzun
03/02/2003, 11:45
selamlar,
programda hiz testini vsyi on planda tutmadim o yuzdende olcmedim.
ama numage true time i kullanırsan programda, programin %33 ü filedaki karakterleri sayan yerde geciyor. yani ordaki bir optimizasyon inanilmaz hiz saglar.
amacim hiz degildi sadece gormekti.
Forum Yazılımı : vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.