تحریک برنامه vb6 به وسیله #c

m_mx2009

Member
سلام به همگی و عرض خسته نباشید....
من مدتی دنبال این بودم که بتونم یه تک پیکسل رو (فقط و فقط یه تک پیکسل...نه دایره و اشکال دیگه)رو تو یه picturebox تو #C رسم کنم بدون اینکه بخوام به شئ گرایی متوسل بشم(چون که تعداد دیتاها خیلی زیاده مثلا 100000 تا ....که اینجوری برای رسم هرنقطه جدید تو باید تمام نقاط از اول رسم میشدند که خودش بار پردازشی زیادی به سیستم تحمیل می کنه) که متاسفانه به هیچ نتیجه ای نرسیدم....:-?:-?

حالا تونستم با VB6 این کار رو انجام بدم با دستور:pset(x,y) چون که دیگه دستو پامون با این ویژگی شیئ گرایی #C بسته نشده،به راحتی این مارا رو میشه انجام داد....
میخوام بدونم میشه کاری کرد که ورودی برنامه ای که با VB6 نوشته شده رو از طریق #C وارد کنیم؟؟؟؟
یعنی فایل اجرایی خروجی VB6 رو از طریق #C فید کنیم....(و خود فایل اجرایی VB6 جزئی از برنامه #C بشه)
نمیدونم تونستم منظورم رو برسونم یا نه....
با تشکر فراوان از همه دوستان...:rose:
 

the_king

مدیرکل انجمن
سلام به همگی و عرض خسته نباشید....
من مدتی دنبال این بودم که بتونم یه تک پیکسل رو (فقط و فقط یه تک پیکسل...نه دایره و اشکال دیگه)رو تو یه picturebox تو #C رسم کنم بدون اینکه بخوام به شئ گرایی متوسل بشم(چون که تعداد دیتاها خیلی زیاده مثلا 100000 تا ....که اینجوری برای رسم هرنقطه جدید تو باید تمام نقاط از اول رسم میشدند که خودش بار پردازشی زیادی به سیستم تحمیل می کنه) که متاسفانه به هیچ نتیجه ای نرسیدم....:-?:-?

حالا تونستم با VB6 این کار رو انجام بدم با دستور:pset(x,y) چون که دیگه دستو پامون با این ویژگی شیئ گرایی #C بسته نشده،به راحتی این مارا رو میشه انجام داد....
میخوام بدونم میشه کاری کرد که ورودی برنامه ای که با VB6 نوشته شده رو از طریق #C وارد کنیم؟؟؟؟
یعنی فایل اجرایی خروجی VB6 رو از طریق #C فید کنیم....(و خود فایل اجرایی VB6 جزئی از برنامه #C بشه)
نمیدونم تونستم منظورم رو برسونم یا نه....
با تشکر فراوان از همه دوستان...:rose:
زبان #C یک زبان مطلقا شی گرا است، هیچ کدی توش نوشته نمیشه که شیء گرایی نداشته باشه،
ویژوال بیسیک که همینطوری کند هست، زبان های Net. هم که از اون هم بدتر، زبان های Net. رسما کند اند،
برای طراحی کردن نرم افزار هایی مثل فتوشاپ مناسب نیستند.

اما با این وجود امکانات گرافیکی ویژوال بیسیک 6 چی هست که کوری عصا کش کور دگر بشه، کل کد رو در #C
بنویسید سریعتر از اینه که بخواهید یک مرحله اضافی هم برای کپی کردن حافظه از VB6 به #C داشته باشید.
برای رسم کردن تعداد زیادی نقطه دونه دونه رسم اش نمی کنند، اول در حافظه تصویر
نقاط رو رنگ می کنند و بعد یکجا از داخل اون حافظه روی صفحه نمایش نشون اش می دهند.

وقتی تعداد نقاط متوسطه، اول توی یک شیء از کلاس Bitmap نقاط رو با SetPixel داخلش رنگ می کنید.
از نظر قابلیت مشابه همون Pset ویژوال بیسیک 6 ئه. مثالش رو هم که قبلا براتون نوشته بودم.

اما وقتی تعداد نقاط خیلی زیاد باشه، سرعت اجرا نقطه ای کافی نیست، حافظه اون Bitmap رو به کمک LockBits
داخل یک آرایه کپی می کنید و خونه های اون آرایه رو با مقادیر رنگ دلخواه پر می کنید. وقتی کار تموم شد، اون
Bitmap رو نمایش می دهید، در یک مرحله و یکجا همه نقاط رسم می شوند.

مثال عملی اش هم که قبلا نوشتم . رجوع شود به :
پیاده سازی فیلتر های گرافیکی در #c
 

m_mx2009

Member
زبان #C یک زبان مطلقا شی گرا است، هیچ کدی توش نوشته نمیشه که شیء گرایی نداشته باشه،
ویژوال بیسیک که همینطوری کند هست، زبان های Net. هم که از اون هم بدتر، زبان های Net. رسما کند اند،
برای طراحی کردن نرم افزار هایی مثل فتوشاپ مناسب نیستند.

اما با این وجود امکانات گرافیکی ویژوال بیسیک 6 چی هست که کوری عصا کش کور دگر بشه، کل کد رو در #C
بنویسید سریعتر از اینه که بخواهید یک مرحله اضافی هم برای کپی کردن حافظه از VB6 به #C داشته باشید.
برای رسم کردن تعداد زیادی نقطه دونه دونه رسم اش نمی کنند، اول در حافظه تصویر
نقاط رو رنگ می کنند و بعد یکجا از داخل اون حافظه روی صفحه نمایش نشون اش می دهند.

وقتی تعداد نقاط متوسطه، اول توی یک شیء از کلاس Bitmap نقاط رو با SetPixel داخلش رنگ می کنید.
از نظر قابلیت مشابه همون Pset ویژوال بیسیک 6 ئه. مثالش رو هم که قبلا براتون نوشته بودم.

اما وقتی تعداد نقاط خیلی زیاد باشه، سرعت اجرا نقطه ای کافی نیست، حافظه اون Bitmap رو به کمک LockBits
داخل یک آرایه کپی می کنید و خونه های اون آرایه رو با مقادیر رنگ دلخواه پر می کنید. وقتی کار تموم شد، اون
Bitmap رو نمایش می دهید، در یک مرحله و یکجا همه نقاط رسم می شوند.

مثال عملی اش هم که قبلا نوشتم . رجوع شود به :
پیاده سازی فیلتر های گرافیکی در #c

سلام دوباره
فک کنم نتونستم منظورم رو خوب بیان کنم.....
ببینید قراره که از یک پدیده فیزیکی از طریق یه سنسور دیتا گرفته بشه.....حالا وقتی این دیتاها وارد برنامه میشن از یه قانون ،مثلا یه فرمول(y=x^2) پیروی میکنه.....یعنی مثلا اولین دیتای ورودی مقدارش 3 هست و وقتی وارد فرمول میشه خروجی 9 میشه......
حالا قراره برنامه نقطه (3,9) رو رسم کنه.....
حالا ما از این نقاط یه تعداد خیلی زیاد مثلا 1000000 تا داریم....
تو همین فروم از دوستان پرسیدم ولی درنهایت به جای روشن شدن یه پیکسل یه دایره رسم میشد که هم پردازش رو بالا میبرد و هم کیفیت پایینی داشت....
حالا اگه میشه شما یه لطفی بکنین و طریقه رسم این نقاط بدون نیاز به دوباره رسم کردن نقاط قبلی رو به من توضیح بدین...
یه دنیا ممنون از شما...:rose::rose:
 

the_king

مدیرکل انجمن
سلام دوباره
فک کنم نتونستم منظورم رو خوب بیان کنم.....
ببینید قراره که از یک پدیده فیزیکی از طریق یه سنسور دیتا گرفته بشه.....حالا وقتی این دیتاها وارد برنامه میشن از یه قانون ،مثلا یه فرمول(y=x^2) پیروی میکنه.....یعنی مثلا اولین دیتای ورودی مقدارش 3 هست و وقتی وارد فرمول میشه خروجی 9 میشه......
حالا قراره برنامه نقطه (3,9) رو رسم کنه.....
حالا ما از این نقاط یه تعداد خیلی زیاد مثلا 1000000 تا داریم....
تو همین فروم از دوستان پرسیدم ولی درنهایت به جای روشن شدن یه پیکسل یه دایره رسم میشد که هم پردازش رو بالا میبرد و هم کیفیت پایینی داشت....
حالا اگه میشه شما یه لطفی بکنین و طریقه رسم این نقاط بدون نیاز به دوباره رسم کردن نقاط قبلی رو به من توضیح بدین...
یه دنیا ممنون از شما...:rose::rose:

یک میلیون نقطه رنگ و وارنگ در نقاط تصادفی رسم میشه که طبیعتا روش دوم سریعتره.

DrawPoints.zip
 

پیوست ها

  • DrawPoints.zip
    38.3 کیلوبایت · بازدیدها: 9

bitaroos

Member
سلام دوباره
فک کنم نتونستم منظورم رو خوب بیان کنم.....
ببینید قراره که از یک پدیده فیزیکی از طریق یه سنسور دیتا گرفته بشه.....حالا وقتی این دیتاها وارد برنامه میشن از یه قانون ،مثلا یه فرمول(y=x^2) پیروی میکنه.....یعنی مثلا اولین دیتای ورودی مقدارش 3 هست و وقتی وارد فرمول میشه خروجی 9 میشه......
حالا قراره برنامه نقطه (3,9) رو رسم کنه.....
حالا ما از این نقاط یه تعداد خیلی زیاد مثلا 1000000 تا داریم....
تو همین فروم از دوستان پرسیدم ولی درنهایت به جای روشن شدن یه پیکسل یه دایره رسم میشد که هم پردازش رو بالا میبرد و هم کیفیت پایینی داشت....
حالا اگه میشه شما یه لطفی بکنین و طریقه رسم این نقاط بدون نیاز به دوباره رسم کردن نقاط قبلی رو به من توضیح بدین...
یه دنیا ممنون از شما...:rose::rose:
سلام دوست من
خوبی؟
برای اینکار بهتره بری از نرم افزار LabVIEW استفاده کنی، که یه آزمایشگاه مجازی و یکی از کارهای مهمی که انجام میده همین کاریه که شما می خوای انجام بدی.
یه پروژه با مکروکنترل AVR و این نرم افزار توی کتاب 10 پروژه AVR (شاید هم 11 پروژه AVR) از سری کتاب های موج آبی انتشارات آفرنگ هست.
...............................................................................................................

ولی اگر اسرار داری که با C#.net این کار رو انجام بدی، می شه اینکار رو با دستور SetPixel انجام داد به فایل پیوستی دقت کن

:tavajoh:: به اسم فایل توجه نکن، یه پروژه جدید شروع کرده بودم که همون اول بسم الله این پست تو رو دیدم و تو همون پروژه اینو نوشتم.
ابتدا یه صفحه ی 150 در200 پیکسلی ایجاد کردم و سپس، کاری کردم که با فشردن دگمه، یه سری پیکسل رنگشون سیاه بشه.
با فشردن دگمه، یه خط عمودی کوچیک، سمت چپ دگمه ایجاد میشه

درضمن سرم یکمی شلوغه اگر نا مفهومه، شرمنده، بیش از وقت نشد که کامل تر توضیح بدم.
راستی نمیدونم با چه سرعتی این داده ها از سنسور فرستاده میشه، اگر سرعت خیلی خیلی بالاست، ممکنه تو این روش با مشکل مواجه بشی.
 

پیوست ها

  • SetPixel.rar
    40.2 کیلوبایت · بازدیدها: 1

جدیدترین ارسال ها

بالا