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

سؤال عن boundary-fill algorithm

بدأه بنسيانا في 27 نوفمبر 2010 · 9 رد · 1,403 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله وبركاته

أبغى أسأل عن فتكشن boundary-fill للتعبئه

void boundaryFill4(int x, int y, int fill, int boundary)
{
   int current;

	current = getPixel (x,y);
	if ((current != boundary ) && (current != fill))
	{
		setColor (fill);
		setPixel (x,y);

 		boundaryFill4(x+1, y, fill, boundary);
   		boundaryFill4(x-1, y , fill, boundary);
   		boundaryFill4(x  , y+1 , fill, boundary);
   		boundaryFill4(x  , y-1 , fill, boundary);
	}
}

فنكشن getPixel ترجع لي لون البكسل

سؤالي كيف تعمل هذه الفنكشن (getPixel ) يعني كيف ترجع اللون

ياليت اللي يعرف البدي حق الفنكشن يعلمنـــي لاني مو فاهمه كيف ترجع لي لون البيكسل

#2

وعليكم السلام ورحمة الله وبركاته ،

لا أعرف ماهي الدالة أو الكود المستخدم ، فلا بد من عرض كامل البرنامج ، لكن هناك مثال وشرح يمكن الاستفادة منه :

موجود الكود هنا :

http://www.arabteam2...howtopic=209322

في المثال الموجود في الرابط ، الدالة getPixel ، لا تقرأ البكسل الموجود على النافذة بشكل صريح . الفكرة هي بقراءة قيمة من مصفوفة اسمها image :

int getPixel(int x , int y)
{
	return images[y][x];
}

حيث x و y هما إحداثيا المربع المراد الحصول على قيمته اللونية ( في الحقيقة هما مجرد index ، وليسا عبارة عن إحداثياث بشكل صريح )

int image[CELL_NUMBER][CELL_NUMBER]=
{
	{0,0,0,0,0,0,0,0,0,0},
	{0,1,1,1,1,1,1,1,1,0},
	{0,1,1,1,0,1,1,1,1,0},
	{0,1,1,1,1,1,1,1,1,0},
	{0,1,1,1,1,1,1,1,1,0},
	{0,1,1,1,1,1,1,1,1,0},
	{0,1,1,1,1,1,1,1,1,0},
	{0,1,1,1,1,1,1,1,1,0},
	{0,1,1,1,1,1,1,1,1,0},
	{0,0,0,0,0,0,0,0,0,0}
};

وهذه الدالة Boundary ،

void boundaryFill(int x,int y,int borderColor,int newColor)
{
	// Do not move outside image dimension ( our image is  array/vector )
	if(x<0 || x>= IMAGE_WIDTH || y<0 || y >= IMAGE_HEIGHT)
		return ;


	if(getPixel(x,y) != borderColor && getPixel(x,y)!= newColor)
	{
		setPixel(x,y,newColor);
		boundaryFill(x - 1 , y  , borderColor,newColor); // left pixel
		boundaryFill(x + 1 , y  , borderColor,newColor); // right pixel
		boundaryFill(x  , y + 1 , borderColor,newColor); // top pixel
		boundaryFill(x  , y - 1 , borderColor,newColor); // bottom pixel

	}
}

الخلاصة ، الدالة getPixel ، تعيد قيمة عنصر مخزن في مصفوفة بعد أن تعطيها index اللازم وهما x و y .ولا تستطيع بشكل مباشر قراءة لون موجود على النافذة . لتنفيذ دالة تقرأ من النافذة مباشرة ( من Buffer الذي يغذّي النافذة بالألوان ) ، فهناك طريقة في OpenGL لا أتذكرها الآن .

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

أنا أطلعت على هذا الموضوع قبل ,,

المشكله لو كنت أبغى أرسم أي شكل مثلا مربع أو مستطيل أو مكعب وليس عندي لا الطول ولا العرض ...

فكيف يمكني أنا أستخدم هذه الطريقه وأنا ما عندي أي معلومات عن الشكل ,,

أنــا ودي أعرف هل يوجد طريقه في open GL أعرف بها لون البيكسل الموجود على النافذه؟؟؟

وشكراااا على ردكـ

#4

دالة glreadpixel()

تقوم بالمهمة

1
#5

^^^^

يعطيكـ العافيييييييييييييه والله يجزاكـ خييير

بجربها وان شاء الله برجع أكتب وش يطلع معي

#6

ممكن سؤال

بحثت عن الداله هذي

ونتيجه البحث

void glReadPixels (GLint x,GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid * data

من هذا الرابط أتمنى إختيار format and type المناسب للهذه الفنكشن

glReadPixels

أنـــا أختـــرت

formate:GL_RGB

type:GL_UNSIGNED_BYTE

ووضعت

cout<<data[]

لكن لم يستخرج اللون الصحيح

تم تعديل هذه المشاركة بواسطة بنسيانا في 1 ديسمبر 2010 في 23:27

#7

أتمنى إيضـــــــاح ما هو الخطأ عندي

أستدعيت الفنكشن

glReadPixels(x,y,1,1,GL_RGBA , GL_FLOAT,(void *)current

x,y عباره عن احداثيات النقطه المراد ايجاد لونهــا

1و1 هي السايز

formate:GL_RGBA

type:GL_FLOAT

current معرفه على أنــها double array [3

لكن بعد الاستدعــاء اذا شيكت على القيم الموجوده بـ current ما تكون نفس قيم اللون الاساسي ,,

#8

هل استعملتي ال glpolygen في رسم المضلع

#9

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

أرجو ممن لديه علم أن ينفعنا .

#10

^^^

شكـــرا لكـ وعلى تفـــاعلكـ ,,,

وأتمنى من أحد المساعدهـ

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