PDA

View Full Version : تفاوت Bitmap با Bitmapdata



pixel59
دوشنبه 29 مرداد 1386, 08:14 صبح
سلام به دوستان برنامه نویس.
در مورد دو کلاس گرافیکی تو سی شارپ سوال داشتم . می خواستم بدونم که تفاوت Bitmap با BitmapData چیه ؟ و همچنین متدهای Stride و Scan0 چه کاری انجام می دن و حاوی چه مقادیری هستند ؟
مثلا به کد زیر توجه کنید:
BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0;
همچنین اگر ممکنه کار دو کد زیر رو هم برام بگید خیلی خیلی ممنون می شم:
byte * p = (byte *)(void *)Scan0;
و
m_Bitmap= new Bitmap(2, 2);

پیشاپیش از دوستان تشکر می کنم!

PC2st
دوشنبه 29 مرداد 1386, 08:31 صبح
نمیدونم خاصیت Stride چیکار میکنه...؟!
BitmapData از اسمش معلومه که مربوط میشه به داده های Bitmap که این داده ها در حافظه قرار داره.
خاصیت Scan0 آدرس اولین داده های پیکسل از Bitmap رو میده (در حافظه).
در کدی که نوشتید، آدرس اولین پیکسل در اشاره گر p قرار میگیره.
همانطور که میدونید، کلاس Bitmap جای ثابتی در حافظه نداره پس آدرس ثابتی هم نداره، یعنی آدرسی که در اشاره گر p قرار میگیره، میتونه نامعتبر بشه، سپس به کمک متد LockBits کاری میکنیم که آدرس داده های Bitmap در حافظه ثابت نگهداشته بشه تا بتونیم از آدرسش در حافظه استفاده کنیم.

pixel59
سه شنبه 30 مرداد 1386, 09:45 صبح
با تشکر از جوابتون در این دستور هم نمی دونم منظور از (2و2) چیه؟ اگه ممکنه راهنمایی کنید.

m_Bitmap= new Bitmap(2,2);

PC2st
سه شنبه 30 مرداد 1386, 11:31 صبح
اون دستور، یک Bitmap خالی به طول 2 و عرض 2 پیکسل ایجاد میکنه (مثل وقتی که در برنامه MS Paint روی گزینه New کلیک میکنیم)