SDL_Color* Pallet_reader(const char* pal_name )
{
FILE* ptr_PaletteFile = NULL ;
ptr_PaletteFile = fopen(pal_name,"rb");
if ( ptr_PaletteFile == NULL) printf("error can't open the paltte file\n");
}
الان نحتاج الى متغيرات لتخزين المعلومات.و كما ذكرن سابقا، فان الالواح اللونية تحتوي على 256 لون و كل لون مخزن في 3بايتات، اي اننا سنحتاج الى 768 بايت. struct Color {
unsigned char r // 1byte
, g // 1byte
, b;// 1byte
};//3byte!!
//هذا النوع متوفر في مكتبة الـ SDL
// باسم SDL_Color
حسنا بما انني اعمل بمكتبة الـ SDL، فساستعمل النوع : SDL_Color و هو نفس النوع المذكور اعلاه.SDL_Color* Pallet_reader(const char* pal_name )
{
FILE* ptr_PaletteFile = NULL ;
ptr_PaletteFile = fopen(pal_name,"rb");// فتح الملف
SDL_Color *pal= (SDL_Color*)malloc( 256*sizeof(SDL_Color)) ;//انشاء مصفوفة بالحجم المطلوب لتخزين الالوان
unsigned char PaletteFileInfo[768] ;//لحفظ معلومات الملف
if ( ptr_PaletteFile == NULL) printf("error can't open the paltte file\n");
fread( &PaletteFileInfo,768 , 1 , ptr_PaletteFile);// تخزين كامل الملف في PaletteFileInfo
}
الان كل شيئ جاهز و كل شيئ في ذاكرة الحاسوب لنراجع ماذا لدينا :pal[0].r = PaletteFileInfo[0]
pal[0].g = PaletteFileInfo[1]
pal[0].b = PaletteFileInfo[2]
pal[1].r = PaletteFileInfo[3]
pal[1].g = PaletteFileInfo[4]
pal[1].b = PaletteFileInfo[5]
....
pal[255].r = PaletteFileInfo[765]
pal[255].g = PaletteFileInfo[766]
pal[255].b = PaletteFileInfo[767]
انطلاقا من هذا المفهوم نقوم بتحميل الالوان في مصفوفة الالوان : pal انطلاقا من مصفوفة المعلومات :PaletteFileInfoSDL_Color* Pallet_reader(const char* pal_name )
{
FILE* ptr_PaletteFile = NULL ;
SDL_Color *pal= (SDL_Color*)malloc( 256*sizeof(SDL_Color)) ;
Uint8 PaletteFileInfo[768] ;
int i = 0;
int j = 767;
ptr_PaletteFile = fopen(pal_name,"rb");
if ( ptr_PaletteFile == NULL) printf("erreur lecture de pallet\n");
fread( &PaletteFileInfo ,768 , 1 , ptr_PaletteFile);
fclose(ptr_PaletteFile) ;// غلق الملف
for ( i = 0 ; i < 256 ; i++)
{
pal[i].b = PaletteFileInfo[j--] ;
pal[i].g = PaletteFileInfo[j--] ;
pal[i].r = PaletteFileInfo[j--] ;
}
return pal ;
}
ستلاحظون انني قمت بوضع اخر خانة في مصفوفة المعلومات في اول خانة في مصفوفة الالوان،عكس ما اشرته له سابقا، السبب في ذلك هو نوعية تخزين الالوان في صيغة الـ Act اذ ان اللون الاخير هو الذي له الترتيب الاول و ما قبل الاخير لديه الترتيب الثاني...الخ static int pallet_index = 0 ;
static int first_time = 0 ;
int j,i ;
static SDL_Color *color[5];
color[0] = Pallet_reader( "Robert_01.act" ) ;
color[1] = Pallet_reader( "Robert_02.act" ) ;
color[2] = Pallet_reader( "Robert_02.act" ) ;
color[3] = Pallet_reader( "Robert_03.act" ) ;
color[4] = Pallet_reader( "Robert_04.act" ) ;
....
if ( sff_file->spr[i].img != NULL)
SDL_SetColors(sff_file->spr[i].img, color[pallet_index] , 0, 256);
الدالة : SDL_SetColors تقوم بتطبيق الوح على الصورة الموجودة في : sff_file->spr[i].imgبتاريخ 30 اغسطس 2010 06:04 م، قطب algeria حاجبيه بشدة وهو يقول:
1- عندما تقول ترتيب اللون ,, من أين تبدأوفي 30 اغسطس 2010 06:04 م، أعرب algeria عن رأيه بالموقف كالآتي:
2- هل يوجد برنامج صغير الحجم تضع له الصورة ويعطيك اللوح اللوني وتتحكم بهبالنسبة لـ photoshop فحجمه كبير ويبطئ الجهاز كثيرا وأصلا جهازي ممتلئفي 30 اغسطس 2010 06:04 م، قال algeria بهدوء وتؤدة:
3- أنت وضعت مباشرة أكواد sdlلكن لم تذكر كيف نصل لتلك المرحلةيعني هل نستدعي المكتبة في vc++ثم نفتح مشروع وملف جديد ونستدعي مكتبة معينةثم نضع الدالة main ونضع داخلها تلك الأكوادفي 30 اغسطس 2010 06:04 م، عقد algeria حاجبيه بتفكير وقال:
وآسف إن كان هذا قد يتعبك أو يأخركوفي 30 اغسطس 2010 06:14 م، قال algeria متحمساً:
أخي أتمنى تضع ملخص للمراحل , مثلا :