منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : المعالجةالصورية (الدرس الثالث)
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
[COLOR="#800080"]بسم الله الرحمن الرحيم
((رب اشرح لي صدري ويسر لي امري واحلل عقدة من لساني يفقه قولي))
صدق الله العلي العظيم
[/COLOR]


بسم الله الرحمن الرحيم

[COLOR="#800000"]السلام عليكم اخواني الاعزاء هذا الدرس سيكون حول تحويل الصورة الملونة الى صورة رمادية (Gray Scale image) حيث سنستخدم طريقتين في عمل ذلك.

الطريقة الاولى:

وذلك بإستخراج معدل الالوان الثلاثة واستبدالها بالالوان الاصلية للصورة, أي اسناد القيمة الناتجة الى الالوان الثلاثة للصورة, اليك الطريقة:[/COLOR]

PHP كود :
bmpdata bmp.LockBits(new Rectangle(00bmp.Widthbmp.Height), ImageLockMode.ReadWritePixelFormat.Format24bppRgb); 
            
IntPtr scan0 bmpdata.Scan0
            try 
            { 

                
unsafe 
                

                    
stride bmpdata.Stride
                    
remain stride bmp.Width 3
                    
byte= (byte*)(void*)scan0
                    for (
0bmp.Heighti++) 
                    { 
                        for (
0bmp.Widthj++) 
                        { 
                            
byte avg =(byteMath.Min((c[ji].c[ji].c[ji].B) / 3255); 
                            
p[2] = p[1] = p[0] = avg
                            
+= 3
                        } 
                        
+= remain
                    } 
                    
bmp.UnlockBits(bmpdata); 
                } 
                
pictureBox1.Image bmp
            } 
            catch (
Exception ex
            { 
                
MessageBox.Show(ex.Message); 
            } 

ا[COLOR="#800000"]لطريقة الثانية:

وذلك باستخدام المعادلة التالة:[/COLOR]


PHP كود :
.299 + ..587 .114 


اليك الكود:

PHP كود :
bmpdata bmp.LockBits(new Rectangle(00bmp.Widthbmp.Height), ImageLockMode.ReadWritePixelFormat.Format24bppRgb); 
            
IntPtr scan0 bmpdata.Scan0
            try 
            { 

                
unsafe 
                

                    
stride bmpdata.Stride
                    
remain stride bmp.Width 3
                    
byte= (byte*)(void*)scan0
                    for (
0bmp.Heighti++) 
                    { 
                        for (
0bmp.Widthj++) 
                        { 
                            
byte avg = (byte)Math.Min(c[j,i]..299 c[j,i]..587 c[j,i]..114255); 
                            
p[2] = p[1] = p[0] = avg
                            
+= 3
                        } 
                        
+= remain
                    } 
                    
bmp.UnlockBits(bmpdata); 
                } 
                
pictureBox1.Image bmp
            } 
            catch (
Exception ex
            { 
                
MessageBox.Show(ex.Message); 
            } 

[COLOR="#800000"]ملاحظة: الطريقة الثانية افضل من الطريقة الاولى.


والحمد لله انتهينا من هذا الدرس والى ان القاكم في درس جديد ان شاءالله انا بانتظار تعليقاتكم واسئلتكم.
[/COLOR]
[COLOR="#A52A2A"]--------------------------------------------------------
اخوكم سجاد محمد من العراق الجريح
[/COLOR]
مشكوور اخى

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






بارك الله فيك أخي الاستاذ سجـّــــاد

لو مثلت الكود بمثال يكون أفضل، لآن البعض لا يعرف كيف يستخدمه.





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

تفضل اخي ابو رائد

الرابط

بالتوفيق ان شاءالله