PDA

نسخه کامل مشاهده نسخه کامل : ذخیره محتوای تکست باکس در پیکچر باکس در #C



dizgah
17-03-2010, 17:24
با عرض سلام و خسته نباشید خدمت دوستان
راستش من یه مشکلی دارم تو سی شارپ
من میخوام محتوای یک تکست باکس بصورت عکس در یک پیکچر باکس ذخیره بشه (بصورت نقاط سیاه و سفید) و سپس اطلاعات پیکسلهای اون پیکچر باکس بصورت هگز در یه تکست باکس دیگه ذخیره بشه
مثال:
ما یه جمله فارسی رو تو یه تکست باکس نوشتیم
در فرم یه پیکچر باکس مثلا 300 در 50 پیکسل موجوده
متن تکست باکس در پیکچر باکس نمایش پیدا کنه
اطلاعات پیکسلهای روشن و خاموش ( پیکسلهایی که قسمتی از متن رو در بر گرفتند ) پیکچر باکس بصورت اعداد هگز 8 بیتی در یک تکست باکس دیگه ذخیره بشه( مثلا از یه سمت شروع به اسکن پیکچر باکس کنیم و اطلاعات پیکسلهاشو به ترتیب ذخیره کنیم )
دوستان ممنون میشم کمکم کنید به هر طریقی که میتونید
حتی اگه مطلب انگلیسی یا از msdn چیزی دارید که بدرد بخوره بنده رو شرمنده کردید
لینک یه برنامه نمونه رو پایین گذاشتم

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ممنون:11:

_H2_
18-03-2010, 12:56
سلام
سوال جدید دانشگاه ها است؟ :31:
(آخه همین چند ماه قبل مشابه همین سبک سوال را در جایی دیگر جواب دادم.)

برای تبدیل متن به تصویر و تشخیص رنگ نقاط باید از دستورات گرافیکی GDI استفاده کنید.
مثلاً با دستور زیر میتوان یک فایل bitmap تصویری خالی در RAM ایجاد کرد.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

و با این دستور هم با فونت پیشفرض رایانه متنی روی این تصویر رسم کنید

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حالا با متد bmp.GetPixel میتوانید رنگ هر نقطه را به دست آورید و در دو حلقه تودرتو (برای دو محور) کل نقاط تصویر را خوانده و عمل دلخواهتان را انجام دهید.

موفق باشید.

dizgah
18-03-2010, 14:24
سلام
سوال جدید دانشگاه ها است؟ :31:
(آخه همین چند ماه قبل مشابه همین سبک سوال را در جایی دیگر جواب دادم.)

برای تبدیل متن به تصویر و تشخیص رنگ نقاط باید از دستورات گرافیکی GDI استفاده کنید.
مثلاً با دستور زیر میتوان یک فایل bitmap تصویری خالی در RAM ایجاد کرد.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

و با این دستور هم با فونت پیشفرض رایانه متنی روی این تصویر رسم کنید

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حالا با متد bmp.GetPixel میتوانید رنگ هر نقطه را به دست آورید و در دو حلقه تودرتو (برای دو محور) کل نقاط تصویر را خوانده و عمل دلخواهتان را انجام دهید.

موفق باشید.
با سلام
واقعا ممنون
نه پروژه دانشگاهی نیست برا تابلو روان میخوامش
تشکر از راهنماییتون ولی اگه مطلب جامعتری یا مثال کاملتری دارید لطفا بنده رو بی نصیب نکنید آخه من #C خیلی خوب هم بلد نیستم
این عکس یه برنامه نمونه هست اگه چیز مشابهی به نظرتون میرسه ممنون میشم در اختیار من و سایرین قرار بدید
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])

dizgah
19-03-2010, 20:44
از دوستان کسی نمیتونه کمکی کنه؟:37:
[

_H2_
20-03-2010, 14:04
سلام
هیچ کاری ندارد همان مطالب پست دوم را پیگیری کنید...
کافی است دو حلقه تو در تو بنویسید که رنگ تک تک نقاط را بخواند ...
شما شروع کنید، هر جایش را مشکل داشتید در خدمتتان هستم.

شبیه این کد که argb_color عدد رنگ تک تک پیکسل ها (x,y) خواهد بود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
(متاسفانه الان فرصت کمی دارم ولی واقعاً فکر نمیکنم کار سختی باشد)
میبخشید و انشاا... سال پربرکتی داشته باشید. :11:

dizgah
21-03-2010, 18:10
سلام
هیچ کاری ندارد همان مطالب پست دوم را پیگیری کنید...
کافی است دو حلقه تو در تو بنویسید که رنگ تک تک نقاط را بخواند ...
شما شروع کنید، هر جایش را مشکل داشتید در خدمتتان هستم.

شبیه این کد که argb_color عدد رنگ تک تک پیکسل ها (x,y) خواهد بود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
(متاسفانه الان فرصت کمی دارم ولی واقعاً فکر نمیکنم کار سختی باشد)
میبخشید و انشاا... سال پربرکتی داشته باشید. :11:

با سلام
خب بنا بر توصیه شما بنده شروع میکنم به کار با کدهاتون :
فقط 2 سوال و در خواست:
1- برای شروع کار با دستوری که فرمودین اون کدها ازفضای نام System.Drawing استفاده می کنند دیگه نه؟
( معذرت میخوام اگه سوالاتم ابتدایی هستن :11: و اگه فضای نام دیگری باید اضافه شه یا تنظیم دیگری مورد نیاز است لطف بفرمایین)
2- به نظرتون برنامه ای که قبلا تصویرشو قرار دادم مناسبتره یا برنامه زیر( برای نمایش فونت روی نقطه های رنگی توضیح : هر نقطه در واقع برابر یک led هست ) در واقع کار کردن با کدوم راحتتره و قابلیتهای بهتر و بیشتری داره؟
؟ و برنامه زیر هم از Picture box استفاده کرده؟
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
با اجازتون سوالاتم رو هم تو همین تاپیک قرار میدم
موفق و سبز باشید :10::11:

_H2_
22-03-2010, 22:23
سلام
1)
بله ولی این اسمبلی به صورت خودکار به پروزه اضافه میشود، ضمن اینکه در کدهای من در پست قبلی نام کلاسهای کامل تایپ شده و با کدهای قبلی نیازی به using هم نیست.

2)
مگر قرار است کاربر بتواند با کلیک روی پیکسلها انها را دستی خاموش و روشن کند؟؟؟

؟ و برنامه زیر هم از Picture box استفاده کرده؟
از لحاظ شکلی شبیه یک آرایه Button ها است!!!
فقط میتوانم بگویم که اگر آرایه Button باشد، برنامه نویسش خیلی بیسواد بوده!!!! :31:

=====

به فرض من وقتی کنم و کد کمی بنویسم (خیلی کم و مختصر و سریع! :31:)
آیا اینکه عکس را بگیرید و متنی شبیه آن که در آخر عکس قبلیتان امده بدهد (همان کدهای C)، کافی است؟ مشکل شما با این حل و تمام میشود؟

dizgah
31-03-2010, 17:18
با تشکر
ویه سوال دیگه من به طور مثال یک تصویر 64 در 16 پیکسل رو باز یا ایجاد میکنم
خب همونطور که میدونید این اندازه خیلی کوچیکه و نمیشه باهاش راحت کار کرد برای اینکه هر پیکسل جایی بزرگتر از حد معمولش رو اشغال کنه باید چه کنم ؟( یه جورایی زوم کردن )

.................................................. ................
بله کاربر هم باید بتونه به صورت دستی مقادیر پیکسلها رو تغییر بده( البته فک کنم براش باید اینطوری عمل کرد که هرگاه کاربر روی نقطه مورد نظر پیکچر باکس کلیک کرد اطلاعات x و y موس رو برنامه بخونه و براساس اون اطلاعات به کمک set pixel اطلاعات اون نقطه را تغیرر بده درسته ؟)
.................................................. ................
با تشکر از راهنمایی هاتون رفتم یکم net و msdn رو گشتم
العان میتونم متن رو روی فرم چاپ کنم و چند تا مثال هم گرفتم که متن رو روی عکس چاپ میکنند اما فکر کنم فقط متن رو چاپ میکنه و اطلاعات رو نمایش نمیده فکر کنم مثال شما هم همینطور باشهمانند زیر:

Bitmap myBitmap = new Bitmap("C:\\myImage.jpg");
Graphics g = Graphics.FromImage(myBitmap);
g.DrawString("My\nText", new Font("Tahoma", 40), Brushes.White, new PointF(0, 0));
حالا برای اینکه تغییرات صورت گرفته در تصویر ( منظورم متن اضافه شده به اونه ) رو در یک پیکچر باکس نمایش بدم باید چه کنم؟
2 تصویر از 2 نرم افزار مشابه دیگه هم براتون میزارم
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
البته سورس دومی رو هم دارم که از یک panel به جای پیکچر باکس استفاده کرده
اما اولی رو نمیدونم
به نظر خودم دومی مناسبتر باشه برای منظور من
راستش بعدا کدهای استخراجی توسط پورت USB به میکرو کنترلر منتقل میشند که از این لحاظ مشکلی ندارم و خودم میتونم برنامه نویسی سمت PC و میکروش رو بنویسم فقط تو همین تبدیل متن به تصویر و استخراج کدهای تصویر مشکل دارم
باز هم تشکر و سال نو و پر از Code ای را براتون آرزومندم

_H2_
04-04-2010, 22:57
سلام

خب همونطور که میدونید این اندازه خیلی کوچیکه و نمیشه باهاش راحت کار کرد برای اینکه هر پیکسل جایی بزرگتر از حد معمولش رو اشغال کنه باید چه کنم ؟( یه جورایی زوم کردن )

عملیات Zoom در دات نت بسیار ساده است ولی همینطوری گمان نکنم زیاد مشکل شما را رفع کند.
چون تغییر سایز تصویر با الگوریتم های پیشرفته ضد لبه صورت میگیرید تا تصویر با کیفیت مطلوب تغییر سایز پیدا کند و این یعنی تصویر بزگ شده متفاوت از ساختار پیکسلی تصویر اصلی است.


بله کاربر هم باید بتونه به صورت دستی مقادیر پیکسلها رو تغییر بده( البته فک کنم براش باید اینطوری عمل کرد که هرگاه کاربر روی نقطه مورد نظر پیکچر باکس کلیک کرد اطلاعات x و y موس رو برنامه بخونه و براساس اون اطلاعات به کمک set pixel اطلاعات اون نقطه را تغیرر بده درسته ؟)


پیشنهاد میکنم خودتان کنترلر یک PictureBox را کامل به دست بگیرید و با دستورات خوب و قوی +GDI تصویر مورد نظر را بزرگ تر نمایش دهید و همانطور که اشاره کردید با هندلر موقعیت ماوس پیکسل کلیک شده را شناسایی و تغییر دهید.

=====

اوایل این هفته شروع عملی هفته کاری بود و کمی گرفتار بودم...
کمی فرصت و اجازه دهید سعی میکنم نمونه کد حدودی و کمکی برایتان بگذارم.

موفق باشید

dizgah
06-04-2010, 22:58
سلام

عملیات Zoom در دات نت بسیار ساده است ولی همینطوری گمان نکنم زیاد مشکل شما را رفع کند.
چون تغییر سایز تصویر با الگوریتم های پیشرفته ضد لبه صورت میگیرید تا تصویر با کیفیت مطلوب تغییر سایز پیدا کند و این یعنی تصویر بزگ شده متفاوت از ساختار پیکسلی تصویر اصلی است.



پیشنهاد میکنم خودتان کنترلر یک PictureBox را کامل به دست بگیرید و با دستورات خوب و قوی +GDI تصویر مورد نظر را بزرگ تر نمایش دهید و همانطور که اشاره کردید با هندلر موقعیت ماوس پیکسل کلیک شده را شناسایی و تغییر دهید.

=====

اوایل این هفته شروع عملی هفته کاری بود و کمی گرفتار بودم...
کمی فرصت و اجازه دهید سعی میکنم نمونه کد حدودی و کمکی برایتان بگذارم.

موفق باشید
با سلام
1.در واقع من نیازی به حفظ کیفیت ندارم یا حتی میخوام کیفیت پایین بیاد
ببینید مثلا من میخوام هر پیکسل به اندازه 2میل در میل رو اشغال کنه که هر پیکسل اطلاعات قبلی خودش رو حفظ کنه نه برای افزایش کیفیت خودش به پیکسلهای کوچکتری تقسیم بشه
من راستش آشنایی زیادی با کترل پیکچر باکس ندارم اما همچنان مشغول زیر و رو کردن msdn ام اما همچنان چیز دندون گیری گیرم نیومده اگر مقاله ای چیزی هم به انگلیسی یا فارسی داشتید بنده رو شرمنده میفرمایید
========
واقعا ممنون
شرمنده که مسبب زحمت میشم
پاینده و سبز باشید

_H2_
12-04-2010, 23:37
سلام
خیلی بابت تاخیر عضر خواهی میکنم...
چند تایی پ.خ و تاپیک قدیمی تر (در سایت دیگری) بود که کمی کار داشت ...
بحرحال میبخشید.

یک نمونه بسیار بسیار بسیار ساده برایتان حاضر کردم، انشاا... که کمکتان کند.
- تصویر کوچک را میتوانید در خصیصه Bitmap بدهید یا بگیرید.
- دو فایل تصویر خیلی کوچک برای نماد پیکسل روشن و خاموش میتوانید تخصیص دهید.
- امکان ویرایش هم وجود دارد ولی دیگر وقت نشد کدی برای ذخیره بنوشتم.
- برنامه به طور پیش فرض یک !HELLO با ابعاد 64 در 128 پیکسل را باز میکند.

دانلود: support.h02.ir/fwlink/?LinkId=1007258127

لینک کامل:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

میبخشید و شب بخیر.

dizgah
18-04-2010, 13:33
سلام
خیلی بابت تاخیر عضر خواهی میکنم...
چند تایی پ.خ و تاپیک قدیمی تر (در سایت دیگری) بود که کمی کار داشت ...
بحرحال میبخشید.

یک نمونه بسیار بسیار بسیار ساده برایتان حاضر کردم، انشاا... که کمکتان کند.
- تصویر کوچک را میتوانید در خصیصه Bitmap بدهید یا بگیرید.
- دو فایل تصویر خیلی کوچک برای نماد پیکسل روشن و خاموش میتوانید تخصیص دهید.
- امکان ویرایش هم وجود دارد ولی دیگر وقت نشد کدی برای ذخیره بنوشتم.
- برنامه به طور پیش فرض یک !HELLO با ابعاد 64 در 128 پیکسل را باز میکند.

دانلود: support.h02.ir/fwlink/?LinkId=1007258127

لینک کامل:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

میبخشید و شب بخیر.
سلام العان برنامه رو میگیرم
و با اجزتون اشکالاتم رو مطرح میکنم
بسیار بسیار ممنون:11:

dizgah
20-04-2010, 20:51
سلام العان برنامه رو میگیرم
و با اجزتون اشکالاتم رو مطرح میکنم
بسیار بسیار ممنون:11:
دوباره سلام
خیلی خیلی ممنون بابت زحمتی که کشیدین
فقط امیدوارم بتونم جبران کنم دقیقا همونی هستش که میخوام
اما به هر حال فکر کنم باید بی خیالش شم چون هر چی فکر کردم ببینم چه کردین تعداد کثیری از علامات تعجب رو سرم سبز شد ( باید بزارم سر یه فرصت که ازلاعاتم بیشتر شد برم سراغش )
به هر حال همچنان ممنون
همیشه موفق و سبز باشید :11:

عــــلی
20-04-2010, 22:25
سلام.
فکر نکنم چیز زیاد بخصوصی داشته که شما متوجه نشده باشی دوست من:

کد زیر زمانی اجرا میشه که فرم در حال طراحی و ساخت کنترل هاست:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدکه خط آخر به متغیر Bitmap مقدار میده که عکسimgSample داخل Resource رو داخل متغیر می ریزه البته اینجا منظورم از متغیر همون کلاس System.Drawing.Bitmap.

خط زیر هم رویداد کلیک روی کنترل pictureBox1 هستش یعنی وقتی روی pictureBox1 کلیک کنی کد زیر اجرا میشه و X و Y ماوس رو یعنی جایی که ماوس روی pictureBox1 کلیکح کرده رو به رویداد Not می فرسته:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

اون خونه هایی که توی اجرای فرم میبینی همش عکسه که توی کنترل pictureBox1 نمایش داده شده پس به کد زیر نگاه کن:
اگه دقت کرده باشی توی Resource دوتا عکس هست که یکی روشن بودنو نشون میده یکی خاموش بودن.
حالا در کد زیر با یک عمل تقسیم ردیف و رکورد خونه ها رو که هر کدوم 12 در 12 پیکسل هست در متغیر x و y میریزه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدحالا اینجا رو دقت کنید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدهمونطور که میدونی متغیر one یک خاصیت از نوع True و False میگیره پس من کد بالا رو به صورت زیر خوانا میکنم:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدخط زیر یک رنگ پیکسل از عکس رو میخونه و در متغیر ColorM میریزه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدخط زیر میزان روشنایی رنگ رو مشخص میکنه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدخط زیر هم گفتیم اگه روشناییش کم بود one = true و در غیر این صورت one = false مثل این میمونه که توی عکس اون پیکسل هایی که روش متن کشیده شده روشناییش کمه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدکلاس m_ImgSmall یک کلاس عکسه که توی اون رنگ های مشکی و سفید جدا میشن مثلاً اونجایی که نوشته مشکی میشه و جاهای دیگه سفید.البته پیکسل به پیکسل.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدو اما رویداد LargeRefresh که همونطور که از اسمش پیداست برای بزرگ کردن عکسه:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدشرط میگه در صورتی کلاس m_ImgLarge خالی از هر نوع محتوای بود.
بعد خط اول داخل شرط میاد اونو از حالت خالی در میاره(ساده تر از این نمیشه توضیح داد!!) یعنی یک new از اون کلاس توی برنامه میساره که عرض و طولش رو مشخص شده.
که کلاس m_Size عرض و طولش 12 در 12 پیکسله و m_ImgSmall هم همون عکسیه که پیکس به پیکس سفید و سیاهش کردیم تا متن مشخص بشه.
خط اخرش هم که عکس رو داخل pictureBox1 میریزه و شما میبینی.
کد زیر یه خورده پیچیدست و شما باید با کلاس Graphics اشنا باشین اگه هم نیستین ایشالله میشین!! که توی پست بعدی توضیح میدم ان شالله:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدخط زیر هم عکس رو در کنترل بار گزاری میکنه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدتا اینجا سوالی بود در خدمتم.

dizgah
28-09-2010, 17:17
سلام
پس از این همه مدت سرم خلوت شد و اومدم دوباره سر این پروژه
در ابتدا دوباره از جناب« h2 و همیشه بهار تشکر » میکنم به خاطر کمکهاشون
خب من کمی انتظارات از برنامه مورد نظرم رو تغییر دادم یعنی قسمتهای ورود متن و نمایش اون روی یک تصویر رو حذف کردم
حالا من میخوام یک فایل تصویری متحرک با پسوند .GIF رو وارد برنامه بکنم و برنامه بتونه تعداد فریمها و اطلاعات هر فریم (نقاط سیاه و سفید ) رو برام استخراج کنه
همچنان تصاویر یا کاملا سیاه هستند و یا سفید یعنی تنها دو رنگ وجود داره و ابعاد تصویر هم پایینه
میدونم تصاویر با پسوند گیف با الگوریتم lzw کد شده اند ولی متاسفانه مطلب فارسی مناسبی برای توضیح این الگوریتم پیدا نکردم
در مرحله ی اول میخوام دوستان در باره ی این الگوریتم راهنماییم کنن تا بعدا به ترتیب برسیم به استخراج محتویات فایل تصویری
ممنون

dizgah
30-09-2010, 13:06
سلام
کسی نبود؟

_H2_
04-10-2010, 18:21
سلام
مشکلی در این ضمینه وجود ندارد ولی باید ببخشید، فرصت کافی برای گذاشتن سمپل ندارم. ...

کافی است تصویر gifمورد نظر را دخل یک System.Drawing.Image بارگذاری کنید.
سپس میتوانید اطلاعات فریم های متعدد را با کمک متدهای FrameDimensionsList و GetFrameCount استخراج کنید.
و با کمک متد SelectActiveFrame شی Image را روی یکی از فریم های خاص قفل کنید (به ان فرمی حرکت کنید)

بقیه کدها هم مثل حالت عادی نوشته میشود و فرقی ندارد.
خیلی ساده است.
سعی کنید، حتماً میتوانید.
موفق باشید.