ورود

View Full Version : get & set پیکسل در مانیتور



rostamkhani
جمعه 11 مرداد 1387, 20:02 عصر
سلام
دوستان چگونه میشه رنگ یک پیکسل از مانیتور رو گرفت و رنگ دلخواه رو در همون مکان
قرار داد .
اگر یه نمونه کدی دارین ممنون میشم

بنده قصد دارم برنامه ای بنویسم که مانیتور رو سیاه و سفید کنه و علت اصلی آن کمتر شدن کار چشم در هنگام برنامه نویسی است که خیلی تاثیر گزاره ممنون میشم کمک کنید با هم این برنامه رو بنویسیم

Delphi Skyline
جمعه 11 مرداد 1387, 20:38 عصر
دقیقا مشخص کنید که پلت فرمتون چیه ؟؟
تحت ویندوز می خواید این کار رو کنید و یا ...

rostamkhani
جمعه 11 مرداد 1387, 23:48 عصر
بله تحت ویندوز میخوام باشه و میخوام برنامه به شکلی عمل کنه که پس از اجرا ، مانیتور به شکل سیاه
سفید دیده بشه و بتوان به راحتی با سیستم کار کرد .
بنده جستجو ها مختلف رو انجام دادم تا ببنیم همچین برنامه ای برای این کار هست یا نه به نتیجه نرسیدم
تنها یک بار دیدم در یکی از laptop های دوستان همون اول که خریده بود روش نمیدونم driver یا نرمافزری نصب بود که احتمالا از طریق control panel میتونست مانیتور رو سیاه و سفید کنه . و بنده خودم این موضوع رو دیدم ولی بعدا که windows عوض کرده بود نتونستیم بفهمیم این خصوصیت از کجا آمده بود .
چند باریم خواستم با vb یا c# برنویسم نشد خلاصه به این نتیجه رسیدم که با assembly احتمالا میشه ممنون میشم در صورت امکان راهنمایی کنید یا اگر راه بهتری برای این حل این موضوع میشناسید بگین
متشکر

rostamkhani
جمعه 18 مرداد 1387, 17:26 عصر
سلام
دوستان بنده این برنامه رو با #c نوشتم http://barnamenevis.org/forum/showthread.php?p=569386#post569386 ولی همانطور که حدس میزدم سرعت برنامه خوب نیست
بنده فکر میکنم با اسمبلی مشکل سرعت نداشته باشیم از دوستان اسمبلی دان اگه این Get و Set
پیکسلها رو میدونن یا روش دیگه ممنون میشم راهنمایی کنن .
با تشکر

Delphi Skyline
جمعه 18 مرداد 1387, 22:32 عصر
چون می خواهید تو ویندوز این کار رو انجام بدید پس باید API های مربوطه رو بدونید و این ای پی آی ها در دلفی و یا سی و یا اسمبلی فرقی نمی کنن و اگه از یه تکنیک استفاده کنید حتی سرعتشون هم میشه گفت یکسانه . شما اول باید با ای پی آی GetDC هندل دی سی دسکتاپ رو بگیرید که دی سی ۰ هست . بعد اونا رو تغییر رنگ بدید . من الان این ای پی آی ها رو یادم نیست . شما در MSDN بگرد راحت پیدا میشه . بعد برنامه رو با دلفی و یا سی و یا هر برنامه نویسی دیگه ای تحت وین ۳۲ می تونی بنویسی .

rostamkhani
شنبه 19 مرداد 1387, 09:26 صبح
دوست عزیز بنده این کار رو کردم و در پست قبلی لینک رو گزاشتم ولی اینجا تاپیک زدم چون تا جایی که یادم میاد یکی دو سال پیش با اسمبلی برنامه ای نوشتم که مستقیم رو حافظه خروجی کارت گرافیکی باعث تغییر رنگ پیکسلها میشد ولی الان هرچی دنبالش گشتم پیدا نکردم .
خیلی ممنون و موفق باشید

Delphi Skyline
شنبه 19 مرداد 1387, 12:49 عصر
عزیز من این کار در ویندوز فقط با نوشتن درایور میسر هست که بعید میدونم شما تونسته باشی درایور بنویسی و الان هم یادت نباشه . پش اون کاری که کردی با API های سطح کاربر ویندوز بوده که استفاده کردن این توابع چه در اسمبلی و چه در وی بی یک خروجی و تقریبا یک سرعت داره . شما این برنامه رو با سی شارپ نوشتی که قدری سرعتش پایین تر از برنامه نویسی مستقیم با وین ۳۲ هست .
موفق باشی .

rostamkhani
شنبه 19 مرداد 1387, 14:59 عصر
با نظر شما موافقم احتملا همین طوره که شما میگین بوده
حالا درایور نویسی که فکر میکنم پوست بکنه ،
راه ساده تری برای این کار نیست که مشکل سرعت نداشته باشه
و یک سوال دیگه اگه همین برنامه ای که با C# نوشته شده که با پیکسلها کار میکنه با اسمبلی نوشته شه به نظر شما سرعت خیلی متفاوت خواهد بود یا خیر ؟
متشکر

Delphi Skyline
شنبه 19 مرداد 1387, 21:50 عصر
خیر . سرعت در دو جا پایینه . چون حتما شما از این روش استفاده کردید که به تعداد پیکسل های صفحه نمایش دستور for گذاشتید و در هر دستور آمدید رنگ اون پیکسل رو عوض کردید . راه بهتر استفاده از تکنیک های اسکن کردن خطی به جای اسکن کردن نقطه ای است .
موفق باشید .

rostamkhani
یک شنبه 20 مرداد 1387, 00:58 صبح
با تشکر اگر میتونین این تکنیک اسکن کردن خطی رو توضیح بدین