المحتوى

29‏/09‏/2008

تحويل صورة إلى ملف نصي والعكس -الجزء الأول-

السلام عليكم

منذ أكثر من سنتين كنت قد كتبت هذا البرنامج وظل حبيس الذاكرة , حتى كشفت النور عنه الآن , وللعلم فإن أهمية هذا البرنامج كبيرة بالنسبة لي لأنه جزء مهم جدا من عدة مشاريع وبرامج قمت بتنفيذها سابقا , وقد صممته لكي يحول الصور من نوع 16 لون (بيئة دوس) إلى ملف نصي , حيث كل بكسل في الصورة يتم تحويلها إلى رقمها المقابل حيث الأرقام مرتبة من 1 إلى 16 لذا راعيت أن يكون الترقيم هو (hex) من 1 إلى F

فمثلا لنأخذ صورة الدراجة:

يمكنك اقتطاع أي جزء من الصورة كالتالي:
ومن ثم يتم تحويلها إلى:
يتوجب عليك أولا نسخ المكتبة bitmap.h المرفقة مع البرنامج إلى المسار الجديد c:\tc\include\bitmap.h ثم قم بتحديد مسار الصورة المستهدفة.

لمعرفة المزيد يمكنك الاطلاع على كتابي: سلسلة البرمجة المفتوحة بلغة ++C باستخدام (Turbo C++ 3.0) في كتيب "عرض الصور" , أما الآن فأترككم مع النص المصدري:

#include //stdio.h
#include //conio.h
#include //graphics.h
//كتبت الاستدعاء بهذا الشكل لأن المدونة لاتسمح بعرض الاسهم المعكوفة , لذا قم بتصحيح ذلك
/////////////////////////////////////////
#include //bitmap.h external header
/////////////////////////////////////////
void ini_g()
{
int gd= DETECT,gm;
initgraph(&gd,&gm,"c:\\tc\\BGI");
}
/////////////////////////////////////////
char e(int c)
{
char r='x';
switch(c)
{
case 10:r='A';break;
case 11:r='B';break;
case 12:r='C';break;
case 13:r='D';break;
case 14:r='E';break;
case 15:r='F';break;
}
return r;
}
/////////////////////////////////////////
int save_2d_file(char path[60],int start_x,int start_y,int end_x,int end_y)
{
FILE *f;
int r=0,i,j,d=0;
int c[10000];
setcolor(4);
rectangle(start_x,start_y,end_x,end_y);
if ((f = fopen(path,"w")) == NULL)
{
printf("\nCannot open output file.\n");
r=0;
}
else r=1;
for(j=start_y;j< end_y;j++)
{
for(i=start_x;i< end_x;i++)
{
c[d]=getpixel(i,j);
putpixel(i,j,c[d]);
if(c[d]<=9)
fprintf(f, "%d", c[d]);
else fprintf(f, "%c", e(c[d]));
d++;
}
fprintf(f, "\n");
}
fclose(f);
return r;
}
/////////////////////////////////////////
void main()
{
ini_g();
displaybitmap(0,0,"c:\\tc\\box\\1.bmp");
save_2d_file("c:\\tc\\box\\image.txt",0,0,50,50);
getch();
}

ليست هناك تعليقات:

إرسال تعليق