ساخت گام به گام برنامه Paint توسط زبان اسمبلی
با سلام
دوستان قراره تو این تاپیک ساخت یک برنامه شبیه paint ویندوز رو از ابتدا شروع کنیم. چون این برنامه, موضوع پروژه درس برنامه نویسی سیستم این ترم منه, لذا قراره بصورت پایه ای شروع به برنامه نویسی و ساخت paint کنیم. در ابتدا برنامه بصورت ساده و ابتدایی شروع به ساخت میشه و کم کم امکانات بسیاری به اون اضافه خواهد شد. فقط چون من توی اسمبلی professional نیستم به کمک تک تک شما دوستان نیاز دارم. مطمئنا در پایان این تاپیک, یک برنامه خوب و زیبایی از paint طراحی شده توسط خودمون خواهیم داشت.
سعی و تلاش من توی این زمینه بسیار زیاد خواهد بود و سعی می کنم که کدهای برنامه بصورت حرفه ای و همچنین ماکرو و تایع نوشته بشن تا در پایان یک مرجع مناسب برای رفع مشکلات کاربران دیگه باشه.
من یک برنامه که مربوط به پروژه ترم پیشمه با عنوان مربع جادویی توی این تاپیک گذاشتم که می تونیم برای ساخت این برنامه paint از اون ایده هایی بگیریم.
از پست بعد انشاءا... کار رو شروع می کنیم. در این راه به کمک و راهنمایی تمامی دوستان نیاز دارم.
امیدوارم که به نتیجه مطلوب برسیم.
موفق باشید. :چشمک:
برنامه گام اول آماده شد.
برنامه گام دوم آماده شد.
برنامه گام سوم آماده شد.
نقل قول: ساخت گام به گام برنامه Paint توسط زبان اسمبلی
سلام
خب توی گام اول قراره که برنامه ما توسط کلیدهای جهت دار, خطوطی رو رسم کنه. با این قابلیت که با زدن دکمه space بتونیم موقتا رسم خط رو متوقف کنیم تا توسط کلیدهای جهت دار به مکان مورد نظر بریم و کار رو ادامه بدیم.
یک سوالی از دوستان دارم اینکه من الان توسط کدهای زیر به مد گرافیک رفتم.
MOV AH,00H
MOV AL,12H
INT 10H
حالا می خوام که به مکان مورد نظرم توی صفحه پرش کنم. اما چون من توی مد تکست با این کار کردم, توی مد گرافیک نمی تونم جواب بگیرم.
دوستان در این مورد راهنمایی کنن که من ادامه کاراش رو خودم انجام بدم. روی همین گیر کردم.
راستی از برنامه ای که توی پست بالا گفتم می تونین کمک بگیرین.
ممنون
موفق باشید
نقل قول: ساخت گام به گام برنامه Paint توسط زبان اسمبلی
سلام
نقل قول:
حالا می خوام که به مکان مورد نظرم توی صفحه پرش کنم. اما چون من توی مد تکست با این کار کردم, توی مد گرافیک نمی تونم جواب بگیرم.
منظورتون رو نفهمیدم، اگر بیشتر توضیح بدید شاید بتونم کمکتون کنم. آیا میخواید یه پیکسل رو set کنید؟
نقل قول: ساخت گام به گام برنامه Paint توسط زبان اسمبلی
نقل قول:
نوشته شده توسط
unknown.unforgiven
سلام
منظورتون رو نفهمیدم، اگر بیشتر توضیح بدید شاید بتونم کمکتون کنم. آیا میخواید یه پیکسل رو set کنید؟
سلام
فرض کنید توی نقطه 0,0 هستم. می خوام به نقطه 100,50 پرش کنم. اما توی مد گرافیک.
ممنون
نقل قول: ساخت گام به گام برنامه Paint توسط زبان اسمبلی
منظورتون از پرش رو هنوزم متوجه نشدم. توی مد گرافیکی چیزی مثل cursor نداریم که بخوایم اون رو به جایی منتقل بکنیم، مگر اینکه منظورتون نقطه ای باشه که قراره توش یه رنگی رسم بشه. اگر منظورتون همینه فقط لازمه که مختصات رو توی دو تا متغیر قرار بدید و البته یه زیربرنامه برای رسم پیکسل داشته باشید. برای جا به جا کردن نقطه هم میتونید از مقداردهی به همون دو تا متغیر استفاده کنید
نقل قول: ساخت گام به گام برنامه Paint توسط زبان اسمبلی
ممنون. ببینید من توی مد تکست می تونستم از یک نقطه به نقطه دیگه صفحه پرش کنم و متن مورد نظرم رو اونجا چاپ کنم. اما حالا توی مد گرافیک مثل اینکه اوضاع فرق کرده. من هدفم اینه که با کلید جهت نما, مکان نما رو به یه جای دیگه منتقل کنم. برای این کار باید مقدار های x و y رو اضافه یا کم کنیم و بعد مکان نما رو به همون نقطه منتقلش کنیم. همین جوریه دیگه ؟ حالا اگه میشه راهنمایی کنید.
ممنون
نقل قول: ساخت گام به گام برنامه Paint توسط زبان اسمبلی
نقل قول:
حالا می خوام که به مکان مورد نظرم توی صفحه پرش کنم. اما چون من توی مد تکست با این کار کردم, توی مد گرافیک نمی تونم جواب بگیرم.
قبلا این برنامه رو توی تالار دیده بودم،جستجو کنید.
در این ارتباط شما درمد گرافیک با پیکسل ها سرو کار دارین که میتونیدبه گرافیک مستقیم دسترسی داشته باشین(سرعت بیشتر و سخت تر) یا با وقفه بایوس (آسون تر و کندتر)
int10
graphics mode and example src
Graphics with Direct Memory Access.
شما اول با پیکسل ها ظاهر برنامه رو درست کن،بعد یک پیکسل سیاه یا به رنگ زمینه(خنثی) در وسط صفحه رسم کنید و بعد در صورت فشرده شدن کلید خاص کار مورد نظر رو انجام بدین
فقط باید چک کنید از بازه مشخص خارج نشید و یا شدین چه کاری انجام بشه
صفحه هم 2 بعدی هست و بر اساس ایکس و ایگرگ مشخص میکنید در لینک هایی که گذاشتم نمونه هست کارتون راه میوفته
موفق باشی
نقل قول: ساخت گام به گام برنامه Paint توسط زبان اسمبلی
نقل قول: ساخت گام به گام برنامه Paint توسط زبان اسمبلی
سلام
دوستان من با این کدها تونستم به نقطه x,y برم. اما مشکل اینه که من حتما باید رنگ پیکسل رو مشخص کنم! یعنی اگر مثلا رنگ زمینه سفید باشه و من رنگ مشکی رو انتخاب کرده باشم, اینجوری اون پیکسل روشن میشه و برعکس, که من نمی خوام این اتفاق بیافته. لطفا راه حل ؟
mov ah,0ch
mov bh,0
mov al,02
mov cx,y
mov dx,x
int 10h
موفق باشید
نقل قول: ساخت گام به گام برنامه Paint توسط زبان اسمبلی
نقل قول:
با این کدها تونستم به نقطه x,y برم. اما مشکل اینه که من حتما باید رنگ پیکسل رو مشخص کنم! یعنی اگر مثلا رنگ زمینه سفید باشه و من رنگ مشکی رو انتخاب کرده باشم, اینجوری اون پیکسل روشن میشه و برعکس, که من نمی خوام این اتفاق بیافته. لطفا راه حل ؟
در پست قبل گفتم همه کارتون با با ارتباط مستقیم یا وقفه قابل انجام هست شما داری با وقفه کار میکنی پس از وقفه زیر برای گرفتن رنگ اون پیکسل استفاده کنید بعد al هرچی بود نسبتش بدین به پیکسل گذاری بعد(همون پیکسل خنثی که گفتم)
INT 10h / AH = 0Dh - get color of a single pixel.
input:
CX = column.
DX = row.
output:
AL = pixel color
1 ضمیمه
نقل قول: ساخت گام به گام برنامه Paint توسط زبان اسمبلی
سلام
برنامه مرحله اول آماده شد.
در این برنامه ساده توسط کلیدهای جهت دار می تونیم خطوطی رو روی صفحه رسم کنیم. توسط کلید space هم می تونیم تعیین کنیم که خط رسم شود یا خیر.
موفق باشید
1 ضمیمه
نقل قول: ساخت گام به گام برنامه Paint توسط زبان اسمبلی
سلام
برنامه مرحله دوم آماده شد.
در این برنامه علاوه بر قابلیت های برنامه مرحله اول, می تونیم رنگ خطوط رسم شده رو هم انتخاب کنیم. همچنین مشکلی که در رسم خطوط روی هم در مرحله قبل وجود داشت رفع گردید.
موفق باشید
نقل قول: ساخت گام به گام برنامه Paint توسط زبان اسمبلی
سلام
مثل اینکه کسی ازین تاپیک خوشش نیومده!!
بهرحال...
برنامه پینت ما فعلا تا اینجا زسیده که این امکانات به اون اضافه شده :
مد گرافیکی
نمایش ماوس
تنظیم محدوده رسم
جعبه رنگ
رسم مستطیل
و پاک کن.
تا اینجا فعلا دست و پا شکسته آماده شده! منتها دوتا مشکل دارم. یکی برای رسم خط و یکی هم برای قابلیت fill. برای رسم خط من از الگوریتم برزنهام می خواستم حل کنم که نشد. چون توی اسمبلی چیزی به نام اعشار نداریم به خاطر همین خط دقیق رسم نمیشه و با مشکلاتی مواجه است. در مورد قابلیت fill هم اینکه من هیچ چیزی در موردش نمی دونم!
اگه کسی در خصوص این دو مشکل می تونه راهنمایی کنه ممنون میشم.
موفق باشید
نقل قول: ساخت گام به گام برنامه Paint توسط زبان اسمبلی
نقل قول:
تا اینجا فعلا دست و پا شکسته آماده شده! منتها دوتا مشکل دارم. یکی برای رسم خط و یکی هم برای قابلیت fill. برای رسم خط من از الگوریتم برزنهام می خواستم حل کنم که نشد. چون توی اسمبلی چیزی به نام اعشار نداریم به خاطر همین خط دقیق رسم نمیشه و با مشکلاتی مواجه است. در مورد قابلیت fill هم اینکه من هیچ چیزی در موردش نمی دونم!
کتاب زیر و فصل مربوطه برای حل مشکل اول
Graphics Programming Black Book by Michael Abrash
Chapter 35: Bresenham Is Fast, and Fast Is Good
در اسمبلی اعشار نداریم؟ بخش fpu کارش چیه پس ؟ البته در سطح وقفه ها و کار با اعداد صحیح همون کتاب بالا مشکلتون رو حل میکنه
در ارتباط با fill کردن برنامه paint در ویندوز سون رو اجرا کنید چند نمونه ساده از این قابلیت رو اعمال کنید، متوجه میشین
نقل قول: ساخت گام به گام برنامه Paint توسط زبان اسمبلی
سلام
بعد از چند هفته کار کردن روی برنامه پینت, این امکانات رو بهش اضافه کردم:
مد گرافیکی
نمایش ماوس
تنظیم محدوده رسم
جعبه رنگ
رسم مستطیل
ابزار Fill
و پاک کن
فایل سورس برنامه رو ضمیمه پست کردم که دوستان استفاده کنن.
نقل قول: ساخت گام به گام برنامه Paint توسط زبان اسمبلی
سلام
برنامه مرحله سوم آماده شد.
بعد از چند هفته کار کردن روی برنامه پینت, این امکانات رو بهش اضافه کردم:
مد گرافیکی
نمایش ماوس
تنظیم محدوده رسم
جعبه رنگ
رسم مستطیل
ابزار Fill
و پاک کن
فایل سورس برنامه رو ضمیمه پست کردم که دوستان استفاده کنن.
موفق باشید.
نقل قول: ساخت گام به گام برنامه Paint توسط زبان اسمبلی
برنامه مرحله سوم رو برای دانلود گذاشتم, اما هنوز مشکل رسم خط توی اون حل نشده. کتابی که آقای xman_1365_x معرفی کردند رو در حد چند دقیقه مطالعه کردم دیدم راه حلش خیلی طولانیه بی خیال خط شدم!!
یه قابلیت دیگه استادمون گفته به این برنامه اضافه کنیم. قابلیت ذخیره تصویر رسم شده در فایل و بعد لود کردن اون. به نظر آسون میاد. اما دوستان اگه فکری به نظرشون میرسه و یا قطعه کد آماده ای دارن, اینجا بزارن تا کار برنامه زودتر تموم شه.
در ضمن اگه کسی هم نظری در مورد برنامه داره بده.
ممنون
موفق باشید
نقل قول: ساخت گام به گام برنامه Paint توسط زبان اسمبلی
نقل قول:
برنامه مرحله سوم رو برای دانلود گذاشتم, اما هنوز مشکل رسم خط توی اون حل نشده. کتابی که آقای xman_1365_x معرفی کردند رو در حد چند دقیقه مطالعه کردم دیدم راه حلش خیلی طولانیه بی خیال خط شدم!!
خوب دوست عزیز، اون کتاب برای کارهای گرافیکی واقعا خوب و و مرجعی کامل با 70 فصل هست که برای رسم خط ،دایره و اشکال دیگه الگوریتم های مختلف رو گفته،روش ساده تر که نیاز شما رو برطرف میکنه فصل 12 از کتاب سید رضی هست.
نقل قول:
یه قابلیت دیگه استادمون گفته به این برنامه اضافه کنیم. قابلیت ذخیره تصویر رسم شده در فایل و بعد لود کردن اون. به نظر آسون میاد. اما دوستان اگه فکری به نظرشون میرسه و یا قطعه کد آماده ای دارن, اینجا بزارن تا کار برنامه زودتر تموم شه.
باید یک ساختاری رو تعریف کنید که وضعیت هر پیکسل رو بخونید و به طریقی که بتونید بازیابی کنید در فایل ذخیره کنید.
نقل قول:
در ضمن اگه کسی هم نظری در مورد برنامه داره بده.
متاسفانه هنوز برنامتون رو ندیدم ، در اولین فرصت که دیدم نظر میدم
موفق باشی
نقل قول: ساخت گام به گام برنامه Paint توسط زبان اسمبلی
عزیز کجا ضمیمه کردین فقط تا قسمت دوم هست که باقیش نیست !! ؟
میشه لطفا کل پروژه رو بزارید
خیلی ممنون اولین سایت ایرانی بود که دیدم توش اینجوری توضیح داده ممنون
راستی داخل برنامه خط ها رو هم کنارش توضیح دادین ؟
نقل قول:
نوشته شده توسط
مرتضی تقدمی
سلام
بعد از چند هفته کار کردن روی برنامه پینت, این امکانات رو بهش اضافه کردم:
مد گرافیکی
نمایش ماوس
تنظیم محدوده رسم
جعبه رنگ
رسم مستطیل
ابزار Fill
و پاک کن
فایل سورس برنامه رو ضمیمه پست کردم که دوستان استفاده کنن.
نقل قول: ساخت گام به گام برنامه Paint توسط زبان اسمبلی
نقل قول:
نوشته شده توسط
مرتضی تقدمی
سلام
برنامه مرحله دوم آماده شد.
در این برنامه علاوه بر قابلیت های برنامه مرحله اول, می تونیم رنگ خطوط رسم شده رو هم انتخاب کنیم. همچنین مشکلی که در رسم خطوط روی هم در مرحله قبل وجود داشت رفع گردید.
موفق باشید
چجوری اجرا میشه دوست عزیز ؟
فایل exe ؤو باز میکنم اما اجرا نمیشه
نقل قول: ساخت گام به گام برنامه Paint توسط زبان اسمبلی
سلام
ببخشید گفتید که فایل مرحله سوم رو ضمیمه کردید اما نیست فقط دو فایل مرحله اول و دوم هستش میشه خواهشا یه بررسی کنید واقعا بهش احتیاج دارم
ممنون میشم
نقل قول: ساخت گام به گام برنامه Paint توسط زبان اسمبلی
منم قصد دارم همچین برنامه ای بنویسم لطفا آخرین کد هایی که نوشتید رو قرار بدید تا ببینم می تونم کمکی بکنم و شاید هم کد های شما کمکی به من بکنه
ممنون