الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تحميل ملفات bmp يدويا!

مغلق
بدأه hasan_aljudy في 23 نوفمبر 2005 · 20 رد · 5,528 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مع وجود العديد من الأدوات الجاهزة و المكتبات اللتي توفر الكثير على المبرمج, قد ينظر البعض بغرابة الي عندما أقول انني اريد تحميل ملف bmp يدويا بدون استخدام اي من تلك الأدوات!

و بالتالي قد لا يعير احدا هذا الموضوع اهتماما, و و لكن لا تستهينوا بالموضوع, فهناك عدة فوائد لتعلم تحميل ملفات من هذا النوع.

فهذا يعطيك نموذج عن كيفية اختيار صيغة معينة لتخزين المعلومات في الملفات, و كيفية استخدام هذه الصيغة لتخزين و تحميل المعلومات من الملفات, و هذا مفيد جدا في برمجة الألعاب.

ألم تفكر يوما كيف تقوم بتخزين المراحل في ملفات و من ثم تحميلها؟ لعلك كنت تتصور دائما ان هذه مهمة مستحيلة او صعبة جدا على شخص مثلك و أنها للعباقرة فقط!

لا تقلق أبدا, فالعملية ليست صعبة لتلك الدرجة, و الإنسان عدو ما جهل, فما دمت لم تر مثالا من قبل عن تخزين و استرجاع المعلومات من الملفات, فسيصعب عليك تخيل كيف يمكنك ان تقوم بهذه الأشياء, و لكن عندما ترى مثالا حيا, و تقوم بنفسك بكتابة الكود اللازم لقراءة المعلومات من الملف, سيختلف الوضع كثيرا!

من المفيد دائما للمبرمج ان يطلع على ما يجري خلف الكواليس, فهو أمر يوسع المدارك و يجعل الشخص يشعر بأنه يعرف شيئا مهما!! ههههه, و يستطيع من خلالها ان يتفلسف على الناس :lol:

هذا الموضوع للمناقشة, لا تتوقعوا مني القيام بإلقاء محاضرات عن الموضوع! ما اريد القيام به هو اعطاء دفعات بسيطة لكي نناقش الموضوع, كل من له دلو فليدلي به دون أي خجل! أكرر دون أي خجل!

طبعا لازم اول شي نعرف ما اللذي نحن بصدده! و هنا الؤال هو, ما هي ملفات bmp و لماذا نريد تحميلها؟

طبعا اذا لم تكن تعرف ما هي ملفات bmp فلا أدري ما أقول لك!! سوى أنك في المكان الخطأ!

هو طبعا ملف لخزن الصور, يحتوي على صورة واحدة, غير مضغوطة (من الممكن ان تكون الصورة مضغوطة, و لكن خلونا ناخذهة حبة حبة.. سنركز فقط على الصور الغير مضغوطة).

كيف يضع الصورة داخل الملف؟

الاجابة باختصار هي عن طريق وضع لون كل النقاط في الصورة pixels بشكل متسلسل في الملف, و يقوم ايضا بوضع معلومات عن الصورة, مثل الطول و العرض و بعض التفاصيل الأخرى.

يمكن البحث في جووجل عن bmp file format من أجل الحصول على المزيد من التفاصيل.

و هذه بعض الوصلات اللتي تتحدث عن تفاصيل محتويات الملف, او صيغة الملف, يمكن الضغط على اي منها و قرائتها, فهي ليست سلسلة, بل كلها تقليد لبعض!

http://pages.cpsc.ucalgary.ca/~walpole/325...E_INFO/BMP.html

http://pages.cpsc.ucalgary.ca/~walpole/325...pfileformat.htm

http://pages.cpsc.ucalgary.ca/~walpole/325...O/bmpffrmt.html

مع ملاحظة انها كلها من موقع احد اساتذتي :P

كما قلت, نريد ان يكون هذا الموضوع نقاشا, و ليس مجرد محاضرات او دروس, فكل من له دلو فليدلي به!

نريد الخروج من المناقشة و كلنا قد فهمنا طريقة تخزين و تحميل ملفات الـ bmp, إن شاء الله

تم تعديل هذه المشاركة بواسطة hasan_aljudy في 26 نوفمبر 2005 في 10:15

#2

يمكن الملاحظة من خلال الروابط السابقة او من خلال البحث في جووجل, ان ملفات bmp في نظام وندوز مقسمة الى ثلاثة أقسام: اول قسمين هما بمثابة مقدمة عن الملف, و القسم الثالث هو سسلسلة النقاط في الصورة نفسها. مع وجود قسم اختياري و هو الـ palette, فإذا كان كل بكسل في الصورة عبارة عن 8 بت, فسيكون هناك palette, و هي مثل الـ indexed mode في الـ photoshop لمن لا يعرف.

يرجى ملاحظة ان هذا ليس درس, بل مجرد محاولة لتحريك النقاش .. كيف يكون درس و انا لم اكتب كود تحميل ملفات bmp الا اليوم!!! و لأول مرة!! :lol: مش ناقص غير اني اعطي فيها درس!!

اعتقد انه يمكننا اعتبار الملف مقسم الى قسمين, المقدمة و الصورة.

المقدمة بالنسبة لنا هي عبارة عن سلسلة من الـ bytes, نقوم بقرائتها بالتسلسل لكي نحصل على المعلومات المطلوبة عن هذه الصورة!

أول بايت هو دائما 'B' و ثاني بايت هو دائما 'M', يلي ذلك اربعة بايتات (تمثل int) تعطينا حجم الملف بالبايتات .. يليها سلسلة أخرى من المعلومات, يمكن النظر اليها في الجداول الموجودة في بعض الروابط اللتي وضعتها أعلاه.

اريد منكم الان قرائة الجداول و من ثم كتابة كود جزئي, يقوم بفتح ملف bmp و استخراج المعلومات اللتي تراها مهمة فقط. و اريد من كل شخص مناقشة الصعوبات اللتي واجهته او تواجهه في كتابة مثل هذا الكود.

ارجو من الجميع استخدام عقولهم و عدم البحث في الانترنت عن أكواد جاهزة!! في الحقيقة احد الروابط يقدم كود جاهز .. ارجو محاولة عدم استخدامه, فنحن نريد تشغيل عقولنا هنا قليلا.

طبعا هنالك عدة طريق لقرائة المقدمة الموجودة في ملفات الـ bmp, و هي مسألة مثل كل مسائل البرمجة, لا يوجد لها حل صحيح واحد, بل يوجد لها عدة حلول, و لا احد يخجل ان يضع حله!!

انا شخصيا حلي قد يكون من أسوأ الحلول .. و لكني لن اضعه هنا قبل ان يقوم شخصان على الأقل بوضع محاولاتهما .. لا أريد ان أكون واقفا هنا مثل الأهبل .. أكلم نفسي!! :rolleyes:

تم تعديل هذه المشاركة بواسطة hasan_aljudy في 26 نوفمبر 2005 في 10:17

#3
اريد منكم الان قرائة الجداول و من ثم كتابة كود جزئي, يقوم بفتح ملف bmp و استخراج المعلومات اللتي تراها مهمة فقط

بأي لغة ؟ ام C/C++ فقط :D

d4baa0.gif
#5

باللي انت عايزه :P انا شخصيا اكتب بالسي, و لكن لو كل واحد يكتب بلغته يبقى احسن برضوا, حتى لا يكون الموضوع محدد للغة بعينها.

#6

شو؟ صعبة؟

انا حتى لم اقل اظهروا الصورة على الشاشة .. فقط قراءة المعلومات من الملف عن الصورة!!

عموما هذا كود مكتوب في الأصل بالسي .. يقوم بفتح ملف و اخذ المعلومات منه, مع افتراض ان الصورة تستخدم indexed color

typedef unsigned int uint;
typedef unsigned char byte;

typedef struct
{
    byte red;
    byte green;
    byte blue;
} PalleteEntry;

typedef struct 
{
    char * fileName;
    byte * imageData;
    uint fileSizeInBytes;
    uint imageWidth;
    uint imageHeight;
    uint imageDataOffset;
    uint numberOfColours;
    PalleteEntry * palleteTableArray;
} BmpInfo;

BmpInfo * loadImage( char * fileName )
{
    int i = 0;
    int rasterSize;
    int currentPosition;
    byte readBuffer[128];
    int skip; //dummy used to read unused data;
    FILE * file = fopen( fileName, "rb" ); //read binary?
    BmpInfo * bmp = new BmpInfo;
    bmp->fileName = fileName;

    fread( readBuffer, 1, 2, file); //read the first two bytes, should be 'BM'
    if( readBuffer[0] != 'B' && readBuffer[1] != 'M' )
    {
        printf("wrong bmp signature");
        return 0;
    }

    fread( &(bmp->fileSizeInBytes), 4, 1, file ); //read file size in bytes and store it in the bmp structure
    fread( &skip, 4, 1, file ); //skip next 4 bytes (they are unused)
    fread( &(bmp->imageDataOffset), 4, 1, file ); //the next 4 bytes in the file are the 4-byte-integer value for the offset
    fread( &skip, 4, 1, file ); //this should read 40 into skip, indicating the size of the BITMAPINFOHEADER block
    if( skip != 40 ) 
    {
        printf(" BITMAPINFOHEADER size wrong ");
        return 0;
    }
    fread( &(bmp->imageWidth), 4, 1, file ); //next 4 bytes indicate the width of the bitmap
    fread( &(bmp->imageHeight), 4, 1, file ); //next 4 bytes indicate the height of the bitmap
    skip = 0;
    fread( &skip, 2, 1, file ); //next two  bytes indicate number of planes, should be 1 always
    if( skip != 1 )
    {
        printf(" wrong number of planes " );
        return 0;
    }
    skip = 0;
    fread( &skip, 2, 1, file ); //next two bytes indicate color mode, this code assumes it must be 8
    if( skip != 8 )
    {
        printf("This is not a palettized bmp .... no can do!!");
        return 0;
    }
    fread( &skip, 4, 1, file ); //next 4 bytes are an integer indicating type of compression, for the purpose of this code, it must be 0 for no compression
    if( skip != 0 )
    {
        printf("Can't open compressed bmp");
        return 0;
    }
    fread( &skip, 4, 1, file ); //next 4 bytes indicate size of compressed image, seems unimportant to me!! 
                                // from one of the docs: (compressed) Size of Image. It is valid to set this =0 if Compression = 0
    fread( &skip, 4, 1, file ); // horizontal resolution, i.e. pixels per meter, seems unimportant to me!
    fread( &skip, 4, 1, file ); //vertical resolution, see above line.
    fread( &skip, 4, 1, file ); //next 4 bytes indicate the number of colors used, I don't think that we need this for the palllete, because the pallete size is always 256
    fread( &skip, 4, 1, file ); // number of important colors, I'm thinking this is not important for our purposes    
    
    //create pallete table
    bmp->palleteTableArray = new PalleteEntry[256]; 
    //read the pallete
    for( i = 0; i < 256; i++ )
    {
        //is it stored as r,g,b or b,g,r? it seems to work only if I read it as b,g,r??!
        fread( &(bmp->palleteTableArray.blue), 1, 1, file );        //read B byte
        fread( &(bmp->palleteTableArray.green), 1, 1, file );    //read G byte
        fread( &(bmp->palleteTableArray.red), 1, 1, file );        //read R byte
        fread( &skip, 1, 1, file );                                    //ignore 4th byte
    }

    currentPosition = fgetc( file );
    //create a buffer for image data
    rasterSize = bmp->imageHeight * bmp->imageWidth;
    bmp->imageData = new byte[rasterSize];
    //read the raster data
    fread( bmp->imageData, rasterSize, 1, file );

    return bmp;
}

طبعا هنا الكود مأخوذ خارج السياق .. و لكني في الحقيقة استخدمته لتحميل صورة و عرضها على الشاشة عن طريق glDrawPixels و اللتي تحدثنا عنها في الموضوع السابق ..

اذا لم يحاول احد ان يطبق فلا داعي للاستمرار في هذه المناقشة, انا لا اطلب من احد ان ينجح في التطبيق, انا اريد من كل شخص ان يحاول, و بعد ذلك يأتي و يخبرنا بالنتيجة .. هل نجح؟ هل فشل؟ ما هي العقبات اللتي واجهته؟ لو كان قد ابتكر حلولا معينة فما هي؟ الخ .. يعني مناقشة جماعية.

اما اني اكلم نفسي -- انسوها! في الحقيقة و الواقع اغلب الناس لن يستخدم الطرق اليدوية في تحميل الملفات, بل سيقوم بذلك عن طريق مكتبات جاهزة, لذلك فالهدف من هذا الموضوع هو تثقيفي و تعليمي ... و ليس شرح!! و لا يمكن للشخص ان يخرج بشئ مفيد من الموضوع دون ان يحاول بنفسه ان يطبق ما يقرأ.

تم تعديل هذه المشاركة بواسطة hasan_aljudy في 29 نوفمبر 2005 في 04:55

#8

سلامتك يا حسن :)

موضوعك مهم ... وبودي لو اشارك .. لكن بعد كم اسبوع ... الحين تورطنا بالاختبارات ..

لكن ..

الصبر جميل :)

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#9

لا تتحسر أخي hasan_aljudy

عدم المشاركة لقلة الوقت كما قال أخي الشمري

وليس لأسباب أخرى...

d4baa0.gif
#11

UP .

الموضوع مهم .. وممتع ايضا .. لايحتاج اكثر من اتقان للغة الانجليزية ... وبالتالي القراءة .

حاولت قبل كم يوم .. لكن فيه بعض الامور مش فاهمها مظبوط .

سأضيف اللي فهمته .. لكن اتمنى ان يومجد من يحيي هذا الموضوع .

BMP من الانساق الصعبة نوعا ما . . فلو قارنت صورة من نوع SGI او PCX .. ستلاحظ الفرق .

كيف شخص يسأل عن تحميل ملفات 3DS .. وهو لايعرف قراءة صورة .... مجرد قراءة فقط .

اخيرا عندي نقطة صغيرة .. احب استفسر عنها .. قبل ما اضيف اللي توصلت اليه ..

اذا كانت الصورة غير ملونة .. هل يوجد في ماف BMP بيانات عن الالوان ... يعني هل يلزم وضع تركيب RGB لحمل تلك القيم .؟؟

مرة ثانية ... UP .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#12

بالحقيقة صيغة bmp هي تقريبا مجرد تخزين مباشر للـ buffer اللذي يمثل الصورة .. المشكلة فقط هي وجود مجموعة بيتات قبل الـ buffer تحتوي على معلومات عن الصورة, مثل ابعادها, النمط المستخدم لتمثيل الألوان, الخ.

يمكنك كتابة الكود لكي يحمل فقط نوعا محددا من الملفات, يعني ملف bmp غير مضغوط, يستخدم نمط RGBA للألوان.

في هذه الحالة اول ما تقرأ الملف, تقرأ المعلومات المتعلقة بالصورة حتى تتأكد انها من نفس النمط, فإذا كانت مختلفة طلع رسالة خطأ و اخرج من البرنامج :P و اذا كانت نفس النمط قم بتحميل البايتات في buffer و قم برسهما في OpenGL مثلا باستخدام glDrawPixels

اقتباس
اذا كانت الصورة غير ملونة .. هل يوجد في ماف BMP بيانات عن الالوان ... يعني هل يلزم وضع تركيب RGB لحمل تلك القيم .؟؟

كيف غير ملونة؟

#14

هو هناك اربع احتمالات حسب ما اتصور: إما ان يكون اسود و ابيض, او يكون indexed, او يكون 16 bit او يكون RGBA يعني 32 بت

اذا كان ابيض و اسود فسيكون فعلا bitmap حسب ما اتصور .. يعني كل بت يمثل بكسل و ليس كل بايت يمثل بكسل .. يعني البايت الواحد فيه ثمان بتات يعني ثمان بكسلات!! و في تلك الحالة لا اتصور انه يحمل معلومات عن الألوان.

إذا كان indexed فهذا يعني وجود pallete و اتصور انه عليك ان تقوم بتحويل هيئة الـ buffer الى RGBA عن طريق تحويل كل لون من index الى قيتمه الحقيقية على شكل RGBA, و هذا ما قمت به. لا ادري اذا كانت هناك طريقة أخرى ام لا.

#15
اقتباس
هو هناك اربع احتمالات حسب ما اتصور: إما ان يكون اسود و ابيض, او يكون indexed, او يكون 16 bit او يكون RGBA يعني 32 بت

لملفات الـ Bmp حسب معلوماتي المتواضعة تنسيق بحيث تكون 24 بت أيضاً , أي كل بيكسل عبارة عن 3 بايت :lol:

بحيث يكون كل بيكسل ممثل ببايت واحد للون الأحمر و ببايت واحد للون الأزرق و ببايت واحد للون الأخضر

شكراً

#18

السلام عليكم ..

بصراحة موضوع الصور جميل .. بس شوي معقد ..

اهم شيء عند فتح الصور هو معرفة هل الصورة مضغوطة ام لا (compression)

الصورة الغير مضغوطة يكون فتحها سهل

مثلا و كما قال الاخ حسن ، الصورة نوع BMP

تتكون كما ذكر من 3 اجزاء اساسية مع جزء رابع ربما موجود وربما لا ، و الاجزاء هي

1-	BMP file header

و يكون حجمه 14 بايت
و هي كالأتي :


1-2	“B,M”   // signature 
3-6	size of file
7-10	   0
11-14	   offset of image data

و الذي يحوي معلومات عن الفايل بصورة عامة .

كيفية قراءة هذه الجزء من الصورة ؟؟؟

بسيطة ..

عمل struct لهذه القيم ثم يتم قرءتها مرة واحدة بجملة fread() ..

struct betmapheader			// BMP file info
  { unsigned int bftype;
	unsigned long bfsize;
	unsigned int bfr1;
	unsigned int bfr2;
	unsigned long bfoff;
  }bmfh;

2- Bitmap Information Header (40 byte)

و تكون مقسمة الى

1-4		   number of byte in a header 
5-8			 width of BMP in pixel
9-12	height of BMP in pixel
13-14.1	0
15-16.1	number of bits per pixel

و ايضا لقراءة هذا الجزء ، نفس الطريقة السابقة ،

struct bitmapinfo			 // BMP image info
  {
	unsigned long bisize;
	unsigned long biwidth;
	unsigned long bihigh;
	unsigned int  biplan;
	unsigned int  bibitcount;
	unsigned long bicomp;
	unsigned long bisizeimage;
	unsigned long bixpel;
	unsigned long biypel;
	unsigned long biclrused;
	unsigned long biclrimp;
  }bmih;

3- Palette (optional)

هذا الجزء موجود فقط في 16 و 256 لون

سيحوي قيم للألوان الاساسية R,G,B (بايت لكل لون اضافة الى بايت فارغ ، المجموع 4 بايتات ، لذا سيكون حجم هذا ال palette في الصورة التي تحوي على 16 لون هو 4*16=64 ، اما في 256 لون هو 256*4=1024)

لقراءة هذا الجزء ..

struct rgbquad				//BMP Palette
   {
	 unsigned char rgbblue;
	 unsigned char rgbgreen;
	 unsigned char rgbred;
	 unsigned char res;
	} rgb[256];

4- Image Data

و الذي يحوي على بيانات الصورة .

(لمعرفة المزيد من التفاصيل عن كل قسم بأجزاءه ، يمكن مراجعة المصادر)

** للعلم .. الصورة من نوع BMP عند فتحها ، يبدأ عرضها من الأسفل .. أي انها تفتح من الاسفل الى الاعلى

المهم ..

هذه اساسيات ثابتة ، و ستكون هناك اختلافات حسب اللغة المستخدمة وحسب البيئة التي نتعامل معها ..

** بعض المشاكل **

مثلا لو اردنا فتح صورة 16 color بأستخدام Turbo C (بيئة دوس) ,,,

ال pixel سيكون ممثل ب 4 بت ،و نحن عندما نقرأ من فايل ، اقل ما يمكن أن نقرءه هو بايت ،، مثلا

unsigned char c;
c=fgetc(f);

في هذه الحالة يجب تجزئة البايت الذي قرأناه الى جزئين كل جزء يتكون من 4 بت (يتم ذلك بأستخدام عمليات Bitwise )

طيب لو اردنا قراءة صورة 256 لون ، هنا سيكون ال pixel عبارة عن بايت كامل لذا لن نحتاج الى تجزئة ، لكن المشكلة ستظهر لو اردنا فتح هكذا صورة بأستخدام Turbo C (بيئة دوس) لأن هذه لا تدعم سوى 16 لون !! و ما الحل ؟؟؟

انا بالنسبة الي فتحتها بأستخدام driver معين مكنني من استخدام 256 لون في لغة سي ، كما يمكن عمل ذلك بأستخدام المقاطعات .. هذا كله بالنسبة ابيئة دوس ..

طيب .. شي اخير ..

يجب معرفة مفهوم ال palette وكيف يتم التعامل معه وتغيير الوانه سواءا عن طريق الدوال الجاهزة او ممكن عن طريق البوردات ..

و بالنسبة للبرنامج .. داخل ال main سيكون هناك لوب بعدد الالوان لتغيير محتويات ال palette ، ثم سيكون هناك 2 loop متداخلة لقراءة بيانات الصورة … ( و الباقي عليكم )

اخيرا ..

اتمنى من اصحاب الخبرة و من الاخ حسن (صاحب الموضوع) ان يوضحوا ولو قليلا عن كيفية فتح او التعامل مع صورة تحوي على كبس !!!!

و من ثم نتكلم عن شوية امور متقدمة .. مثلا كيفية اخفاء نصوص في الصورة (نوع من security)

و السلام عليكم …

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#19

أيضا انا معجبني الموضوع ... موضوع مسلي ..

الان انا مواصل ما نمت .. لكن قبل ما انام احب اقول .. .

انه من الممكن أن نستفيد من التراكيب الموجودة في Win API

typedef struct tagBITMAPINFO { // bmi  
   BITMAPINFOHEADER bmiHeader; 
   RGBQUAD		  bmiColors[1]; 
} BITMAPINFO;

typedef struct tagBITMAPINFOHEADER{ // bmih  
   DWORD  biSize; 
   LONG   biWidth; 
   LONG   biHeight; 
   WORD   biPlanes; 
   WORD   biBitCount 
   DWORD  biCompression; 
   DWORD  biSizeImage; 
   LONG   biXPelsPerMeter; 
   LONG   biYPelsPerMeter; 
   DWORD  biClrUsed; 
   DWORD  biClrImportant; 
} BITMAPINFOHEADER;

typedef struct tagRGBQUAD { // rgbq  
	BYTE	rgbBlue; 
	BYTE	rgbGreen; 
	BYTE	rgbRed; 
	BYTE	rgbReserved; 
} RGBQUAD;

typedef struct tagBITMAPFILEHEADER { // bmfh  
		WORD	bfType; 
		DWORD   bfSize; 
		WORD	bfReserved1; 
		WORD	bfReserved2; 
		DWORD   bfOffBits; 
} BITMAPFILEHEADER;

وغيرها من التراكيب فهي ممتازة وتختصر الوقت ..

كلها موجودة ضمن windows.h

على فكرة .. عرفت كيف نغير .. او يعني نضيف قناع لوني ..

نحن عندما نحمل الصورة وما فيها من الوان .. نقوم بتغيير احد القنوات R - G- B

وبالتالي تصبح الصورة مائلة للون معين ..

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#20

انا عندي رأيي .. لا اعلم هل سبق ان قلته ..

وهو ان صيغة BMP من الصيغ الصعبة قليلا ..

يعني يوجد اسهل مثلا عندك pcx ...

ايضا يوجد صيغة اخرى باسم rgb .. سأبحث عن وثائق لنشرشحها ..

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#21

السلام عليكم ..

اقتباس
وهو ان صيغة BMP من الصيغ الصعبة قليلا ..

لماذا اخي الكريم ؟؟

انا بصراحة لم اطلع على بيقية انواع الصور .. لكن الي اعرفه ان ال BMP هي اسهل الانواع لأنها لا تحوي على كبس .. و بقية الصور مثل ال PCX تكون معقدة لأنها تحوي على كبس (ضغط) للبيانات ..

سأطلع على بقية انواع الصور ان شاء ربي .. و لنا عودة ..

اقتباس
ايضا يوجد صيغة اخرى باسم rgb .. سأبحث عن وثائق لنشرشحها ..

الله ويدك :lol:

و نحن في الانتظار

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

هذا الموضوع مغلق.

مواضيع مشابهة