PDA

View Full Version : سوال: گرفتن و تسخیر کردن (Capture) تصویر صفحه نمایش



babak1
پنج شنبه 14 بهمن 1389, 15:32 عصر
سلام :
اگه ممکنه یکی از دوستان این برنامه رو خط به خط واسم توضیح بده.
خیلی ممنون از لطف شما




//=====================

Image captureImage()
{
Bitmap bmpObj = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
using(Graphics objG = Graphics.FromImage(bmpObj))
{
objG.CopyFromScreen(0,0,0,0,bmpObj.Size);

}
return bmpObj;
}


//=====================

private void Form1_Load(object sender, EventArgs e)

{

this.BackgroundImage = captureImage();
}

mahfeh
پنج شنبه 14 بهمن 1389, 16:04 عصر
سلام
این برنامه ابتدا یک متغییر از نوع عکس (bitmap) ایجاد میکنه سپس با استفاده از حالت گرافیکی عکس صفحه نمایش رو از مختصات خاص گرفته و در متغییر عکس ذخیره میکنه !
و در انتها پس زمینه فرم جاری رو اون عکس قرار میده
موفق باشی

میلاد قاضی پور
پنج شنبه 14 بهمن 1389, 16:38 عصر
سلام :
اگه ممکنه یکی از دوستان این برنامه رو خط به خط واسم توضیح بده.
خیلی ممنون از لطف شما




//=====================

Image captureImage()
{
Bitmap bmpObj = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
using(Graphics objG = Graphics.FromImage(bmpObj))
{
objG.CopyFromScreen(0,0,0,0,bmpObj.Size);

}
return bmpObj;
}


//=====================

private void Form1_Load(object sender, EventArgs e)

{

this.BackgroundImage = captureImage();
}




یک تابع وجود داره که شی ای از نوع بیت مپ برمیگردونه.
درون این تابع متغیری از نوع بیت مپ ایجاد شده که طول و عرض صفحه ی نمایش رو میگیره .
درون بلاک یوزینگ (دلیل استفاده از بلاک یوزینگ به مباحث کنترل حافظه مربوط میشه تا برنامه سربار زیادی ایجاد نکنه) متغیری از نوع گرافیک هست که خصایص متغیر بیت مپ رو میگیره و بعد تصویر در حال نمایش رو کپچر میکنه.با پارامترهایی که داره محل دقیق کپچر و اندازه اش رو مشخص میکنه.مثه اینکه متغیر بیتمپ محدوده ی باغمون باشه و و بعدش با شی گرافیک مشخص کنیم از کجای این باغ میخوایم عکس بگیریم.
بقیش هم مشخصه.

babak1
پنج شنبه 14 بهمن 1389, 20:12 عصر
میلاد جان مرسی از توضیحات خوبت . 2تا سوال داشتم :
1- objG.CopyFromScreen(0,0,0,0,bmpObj.Size); در مورد تک تک ها رو خوب متوجه نمی شم.
2- من یک چیزی در ذهنم هست !! اونم اینه که این تابع بالا باید یک خروجی داشته باشه و خروجی return بشه . ولی این طور نیست!! (چرا خود باغ برگردانده می شود؟)

babak1
جمعه 15 بهمن 1389, 17:45 عصر
کسی کمک نمیکنه ؟

shuriken
شنبه 16 بهمن 1389, 08:55 صبح
سلام
سوال اولت یکم نامفهوم بود
ولی در مورد سوال دومی اگه به اسم تابع دقت کنی متوجه میشه که این تابع
از روی صفحه یک عکس از موقعیتی که شما بهش میدی و با اندازه ای که داده میشه (bmpobj.Size) تهیه میکنه
و در شی عکسی که این تابع رو فراخونی کرده ذخیره میکنه (که در ایجا همون bmpobj هست)

babak1
شنبه 16 بهمن 1389, 16:20 عصر
سلام
سوال اولت یکم نامفهوم بود
ولی در مورد سوال دومی اگه به اسم تابع دقت کنی متوجه میشه که این تابع
از روی صفحه یک عکس از موقعیتی که شما بهش میدی و با اندازه ای که داده میشه (bmpobj.Size) تهیه میکنه
و در شی عکسی که این تابع رو فراخونی کرده ذخیره میکنه (که در ایجا همون bmpobj هست)

1-شی که این تابع رو فراخونی کرده objG هستش نه bmpObj !!! هنوزم نمی فهمم که خروجی این فایل از لحاظ منطقی کجا می ره آخه ؟؟ چرا توی bmpobj ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

babak1
شنبه 16 بهمن 1389, 16:30 عصر
یه سوال کلی هم داشتم. وقتی که این خط تعریف رو می نویسم برنامه error زیر رو میده :



Graphics bb = new Graphics();

the type system.drawing.graphics has no constructor defined
اخه من که هیچ پارمتری برای constructor نفرستادم در پرانتز!!! من فقط یک نمونه سا ختم !!!

میلاد قاضی پور
شنبه 16 بهمن 1389, 17:17 عصر
سازنده ی اینستنس ایجاد شده از کلاسهای استاتیک نیاز به نیو شدن نداره . بعد از bb سمیکالن بذارید مسأله حل میشه .

shuriken
یک شنبه 17 بهمن 1389, 08:37 صبح
1-شی که این تابع رو فراخونی کرده objG هستش نه bmpObj !!! هنوزم نمی فهمم که خروجی این فایل از لحاظ منطقی کجا می ره آخه ؟؟ چرا توی bmpobj ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

ببخشید اون قسمت رو اشتباه کردم.
علت اینکه در bmpobj ذخیره میشه اینه که شما در کد بالا objG رو با استفاده از تابع Fromimage و
از شی bmpobj ساختی که این به شئ گرافیکیتون (objG) میگه که هر چیزی که میخوای ترسیم کنی
توی این ایمیج (bmpobj) ترسیم کن.