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

عالم الصورة .... (للنقاش)

مغلق
بدأه Abdullah.Alshammeri في 23 ديسمبر 2005 · 11 رد · 2,404 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

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

/index.php?showtopic=81657

لكن اكتشفت أن هناك العديد من المفاهيم الاساسية التي يجب علينا معرفتها قبل ان نخوض في مسالة قراءة صور bmp .

لان هذه المفاهيم تفيدنا حتى عندما نريد قراءة صور اخرى مثل pcx او tga على سبيل المثال .

هذا الموضوع للمناقشة .. اتمنى ان نغطي جانب كبير من هذا الموضوع .

وسأحاول ان اطرح ما فهمته .... وليس كل ما اقوله متأكد من صحته ..

اولا :

الصورة قد تكون

1 بت

عندئذ الصورة مكونة من لونين .. اسود و ابيض .. يعني حتى الرمادي لايوجد ..

البكسل ذو الرقم واحد يعني لون ابيض ..

ذو الرقم صفر يعني لون اسود

يا اسود يا ابيض ,,

افتح اي صورة بالرسام ... احفظها على هيئة

monochrome bitmap

,,,

الصورة من نوع 8بت بتدرج رمادي ..

237a1619e0.jpg

كل بكسل يحتوي على 8بت .. يعني بايت واحد ..

4 بت

عندئذ تستخدم pallet او ما يسمى بجدول الالوان ..

يوجد لدينا 16 لون ... 2^4

تخزن على شكل جدول

صورة

e1c783501f.jpg

ايضا نفس الامر مع 8 بت .. لكن تصبح الالوان 2^8 = 256 لون

صورة

3dcde6da49.jpg

اما في الصورة ذات الـ 16 بت .. حينها يكون عدد الالوان ضخم .. 2^16 لون .. عندنا اربع قنوات .. RED, GREEN,BLUE كل قناة تمثل 5 بت (من0 الى 31 ) وقناة الفا A لها بت واحد ..

يصير المجموع 16 بت .. اي 2 بايت .

وفي 24 بت .. ينتج لدينا RGB .. حيث كل قناة تمثل بايت .. اذا المجموع ثلاث بايت لكل بكسل .

كل قناة من 0الى255 ..

اما 32 بت .. نفس 24 بت لكن تزيد عليها بـ 8بت .. تمثل قناة الفا ..

cbe5ffd0b7.jpg

هممم ..

لكن .. قد تكون الصورة مضغوطة .. او غير مضغوطة .. اذا كانت مضغوطة .. ماهي الخوارزمية التي تستخدمها ..

هل هي /

LZW

RLE

او كما في الصور التي من نوع JPEG .. حيث تتبع خوارزمية اخرى في الضغط .

اذا كانت غير مضغوطة .. تحفظ على الطريقة التقليدية و تسمى RAW

لايوجد خوارزمية للضغط .. نحفظ محتويات كل بايت في ملف ..

لايوجد لدي المزيد لاقوله ... لكن ..

من يعرف شيء عن بعض تلك الخوارزميات المستخدمة للضغط .

كيف نحصل على PALLET لكل صورة .. اذا كانت تحوي جدول للالوان .. دون دوال جاهزة ..

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

يعني مثلا

unsigned long data[200]={0xFFFF,0x0000,0xFFFF,0x0000,0xFFFF,0x0000,0xFFFF,0x0000,......};

ثم نخزن لون كل بكسل .. في اخر الملف ..

تم نعرض محتويات ذلك الملف .. كما نعرض محتوى اي ملف ..

ونضع امتداد الملف AR2 اختصار لـ ARAB TEAM 2000 :)

اعتقد الامر ممتع ...

المصدر الي استفدت منه ..

http://astronomy.swin.edu.au/~pbourke/dataformats/bitmaps/

ننتظر معلومات اكثر .. :(

تم تعديل هذه المشاركة بواسطة الشمري في 23 ديسمبر 2005 في 00:08

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#2

ممكن عمل امتداد الفريق العربي و نضع له خصائص و لكن الاهم يجب توافر برنامج يقوم بالرسم و حفظ هذه الصيغه او علي الاقل يحول من ملفات BMP إلي الصيغة التي لدينا .

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#3

الفكرة من كل هذه الهيئات هي في النهاية تخزين buffer الصورة في ملف ..

ممكن تعمل ملف لا يحتوي على شي سوى الـ buffer نفسه كما هو اضافة الى مثلا 8 بايتات في البداية لتخزين رقمين هما طول و عرض الصورة.

#4

هناك مايسمى بالطبقات ..

روح الى اي صورة عندك خاصة bmp .. انقر عليها بالزر الايمن .. خصائص .. ملخص .. تجد " حقل اسمه " عدد الاطارات " ..

ماذا يقصد بعدد اطارات الصورة ... هل يعني الانيمشن .مثل الموجود في gif ,, او طبقة layer مثلا ..

شاهدت ذلك في DevIL .. ايضا هذا المصطلح

نسيت ايضا حاجة ..

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

تم تعديل هذه المشاركة بواسطة الشمري في 24 ديسمبر 2005 في 14:24

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#5

همممم .. لكي تحصل على لون رمادي, لازم قيم RBG تكون متساوية .. مثلا RGB=40,40,40 او 53,53,35 او اي شي ..

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

مثلا 100,90,80 تاخذ المعادل و هو 90 و تحولها الى 90,90,90

#7

لتنشيط الموضوع قليلاً :lol:

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

ثم يمكن أن يتحول من صيغتنا إلى أي نوع من الصور (Gif, Bmp, Jpg, Tiff,...)

المشروع مبني بالكامل باستخدام تقنيات الـ .NET

لذلك أعتقد أنني يمكن أن أساعد :D

كل عام و أنتم بخير

#8

السلام عليكم

موضوع متميز أرجو أن يثبت نظراً لإحتوائه علي أغلب دروس التعامل مع الصور و المكتبات والصيغ المستخدمة للتعامل مع نظم الألوان .

بصراحة موضوع شامل يستحق التثبيت و الشكر والدعاء الصالح لكل من شارك فيه .

أخيكم في الله

NubiaPrince

' و على الله فليتوكل المؤمنون '

* فريق الجرافيك الحاسوبي العربي الإسلامي * the Arabic-Islamic Computer Graphics - A I C G

イスラム教は平和を意味する

이슬람교는 평화를 의미한다

Ислам означает мир

#10
اقتباس
اما في الصورة ذات الـ 16 بت .. حينها يكون عدد الالوان ضخم .. 2^16 لون .. عندنا اربع قنوات .. RED, GREEN,BLUE كل قناة تمثل 5 بت (من0 الى 31 ) وقناة الفا A لها بت واحد ..

يصير المجموع 16 بت .. اي 2 بايت

هذا الكلام كتبته بناء على معلومات سابقة ..

لكن قرأت في الرابط الذي قدمه الاخ سلامه ...

ان التقسيم هكذا

الاحمر والازرق 5 بت والاخضر 6بت ... اين قناة الفا ؟؟؟ .. ولماذا الاخضر 6 بت ... وماذا عن الكلام المقتبس فوق ^ .. هل هو صحيح ؟

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#12
اقتباس
عندي صورة واريد تحويلها الى تدرج رمادي .. بدون دوال مساعدة ..,,, ممكن الفكرة فقط : ) ,,

لدي هذه الطريقة , ولكني اعتمدت على تحديد قيم تدرج رمادي معرفة سابقا لكل لون :

طبعا بدلفي :

procedure TForm1.Button1Click(Sender: TObject);

Var

X, Y: Integer;
  P   : TColor;
  r,g,b: byte;
  RP,GP,BP:single;
  Red,Green,Blue:integer;
begin
   Red:=299;
   Green:=587;
   Blue:=114;
   x:=Red+Green+Blue;
   RP:=Red/x;
   GP:=Green/x;
   BP:=Blue/x;
   For X := 0 to Img1.Width do begin
    Img2.Repaint;
      For y := 0 to Img1.Height do begin
        P := Img1.Canvas.Pixels[X, Y];
        r := (P and $0000FF);
        g := (P and $00FF00) shr 8;
        b := (P and $FF0000) shr 16;
        Img2.Canvas.Pixels[X, Y] :=  round (
        r * RP + g * GP + b*BP) * $010101;
      end;
  end;
end;

الملف المرفق يحوي البرنامج والتنفيذي ..

gryascale.zip

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

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