delphi4arab منتديات دلفي للعرب
[تمرين] : عمل محاكاة للدالة rgb - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : تمارين دلفي وحلول (https://delphi4arab.net/forum/forumdisplay.php?fid=16)
+--- الموضوع : [تمرين] : عمل محاكاة للدالة rgb (/showthread.php?tid=5172)

الصفحات: 1 2 3 4 5


[تمرين] : عمل محاكاة للدالة rgb - ALmuhhnad - 02-05-2013

إقتباس :هل اتضحت الصورة ؟
نعم هذه الفكرة ... اعرفها من كثر ما اتعامل مع الألعاب p: ... شكرا على التنبيه


[تمرين] : عمل محاكاة للدالة rgb - SMP3 - 02-05-2013

ALmuhhnad كتب :
PHP كود :
function GetBValueX(RGB : Cardinal):Byte;
asm
  PUSH EAX
  PUSH ECX
  MOV CL
,BYTE PTR DS:[ESP+6]
  
MOV BYTE PTR DS:[ESP+4],CL
  POP ECX
  POP EAX
end
; 

أووووه ... فعلا عمل رائع و نظيف Clean Smile
أرى أنك أحببت الأسمبلي .. و مستواك فعلا في تطور !!
-------------------------------
الدالة يمكن تطويرها أكثر و أكثر (أسرع ) Smile

[COLOR="DarkOrange"]هذه هدية مني :
[/COLOR]
PHP كود :
function GetBValueX(RGB : Cardinal):Byte;
asm
  PUSH EAX
  POP EAX
  MOV AL
,BYTE PTR DS:[ESP-2]
end; 
و على فكرة يمكن كتابة الدالة GetBValueX باستخدام تعليمتين أو حتى باستخدام تعليمة واحدة !!!
لا أريــــد أن أحرق الفكرة .. سأقوم بوضعها عند انتهاء مدة التمرين Smile



[تمرين] : عمل محاكاة للدالة rgb - ALmuhhnad - 02-05-2013

فعلاً ... انا احببت الاسمبلي ... عندما تعرفت على عالم الهندسة العكسية الشيق والمثير Smile

إقتباس :و على فكرة يمكن كتابة الدالة getbvaluex باستخدام تعليمتين أو حتى باستخدام تعليمة واحدة !!!
لا أريــــد أن أحرق الفكرة .. سأقوم بوضعها عند انتهاء مدة التمرين Smile

حمستني @@ ... تعليمه واحده ... همممم ساحاول


[تمرين] : عمل محاكاة للدالة rgb - ALmuhhnad - 03-05-2013

اخيراً حصلت عليها ... هههه
PHP كود :
function GetBValueX(RGB : Cardinal):Byte;
asm
  SAR EAX
,$10
end
; 

هل هي ما لديك ؟ ... ام لديك شيء آخر


[تمرين] : عمل محاكاة للدالة rgb - SMP3 - 03-05-2013

ههههه ... لقد تحايلت !!! (sar=shr)
إقتباس :- يمنع استخدام التعليمات التالية : Xor , or,shl,shr,ror,rol
حل رائع و مقبول Smile
هناك طريقة أخرى Smile باستخدام تعليمة واحدة !!

لقد قمت بالتلميح للطريقة في أحد مشاركاتي في هذا الموضوع


[تمرين] : عمل محاكاة للدالة rgb - ALmuhhnad - 03-05-2013

إقتباس :هههههههههههه ... لقد تحايلت !!! (sar=shr)
هههههه ... لم اجد هذه التعليم من ضمن التعليمات الممنوع استخدامها Smile
ساكمل التجربة بعد ان اصحو من نومي .. فمنذ الامس وانا لم انم p:


[تمرين] : عمل محاكاة للدالة rgb - محمد عبد العزيز - 05-05-2013

حل سريع اخر...
كود :
type TCoulor = record case Integer of 0:(color: Dword); 1:(r,g,b,nop: byte); end; Var Coulor : TCoulor; function MakeRGB(r, g, b: Byte): COLORREF; begin Coulor.r:=r; Coulor.g:=g; Coulor.b:=b; result:=Coulor.color; end; function GetBValueX(RGB:Cardinal):Byte; begin result:=Coulor.b; end; function GetGValueX(RGB:Cardinal):Byte; begin result:=Coulor.g; end; function GetRValueX(RGB:Cardinal):Byte; begin result:=Coulor.r; end;



[تمرين] : عمل محاكاة للدالة rgb - SMP3 - 05-05-2013

b.m.abdelaziz كتب :حل سريع اخر...

إقتباس :- استخدام ؟؟؟؟؟؟؟؟ (لن أذكره حتى لا أحرق الفكرة Smile )
هذا ما كنت أقصده Smile
حل صحيح و أفضل من الحل السابق Smile


[تمرين] : عمل محاكاة للدالة rgb - SMP3 - 05-05-2013

انتهت مدة التمرين الحل بأول الموضوع.


[تمرين] : عمل محاكاة للدالة rgb - SMP3 - 05-05-2013

على فكرة أخي B.M.AbdelAziZ
ماذا لو أن المبرمج استخدم RGB بدل MakeRGB ؟؟؟
PHP كود :
result:=Coulor.X; 
أو قام بوضع الكود التالي :
PHP كود :
Var C:TColor ;
r:Byte; 
begin
c
:=$00503C32 ;
r:=GetRValueX(c); 
end;