PDA

View Full Version : کمک برای یک برنامه استخراج کد



iman-63
یک شنبه 21 مهر 1387, 17:22 عصر
با سلام خدمت دوستان

من یه تابلو روان ساختم که برای در آوردن کدها پدرم در اومد!!

می خوام با C# یه برنامه بنویسم تا بتونم کدهای متن یا تصویر مورد نظرم رو به صورت سطر به سطر استخراج کنم.

خواهشاً اگه برنامه یا کامپوننتی در این مورد دارین اینجا بذاری که خیلی گیرم. البته کمی هم توضیح بدین چون من یه مبتدیم!!!!!!!!

__H2__
دوشنبه 22 مهر 1387, 01:19 صبح
سلام
درست متوجه مشکلتان نشدم...
ولی فکر کنم مشکل شما در تبدیل یک متن به رنگ پیکسل های مورد نیاز و یا روشن بودن و خاموش بودن پیکسل است.

اگر چنین است مثلاً به عنوان نمونه شما میتوانید متن مورد نظر را به یک تصویر bmp با ابعاد مورد نیاز تبدیل و احتمالاً ذخیره کنید و بعد رنگ پیکسل های تصویر را بخوانید و اگر سیاه باشد نتیجتاً پیکسل نظیر در تابلو هم باید روشن باشد و....

فقط به عنوان نمونه به کد زیر دقت کنید:


System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(100, 1000);

using (System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(bmp))
{
graph.DrawString("Hello", System.Drawing.SystemFonts.DefaultFont, System.Drawing.Brushes.Black, 0, 0);
}

//bmp.Save("C:\\file.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
//System.Drawing.Bitmap bmp = new System.Drawing.Bitmap("C:\\file.bmp");

bool turnonpixel;

for (int x = 0; x < bmp.Width; x++)
{
for (int y = 0; y < bmp.Height; y++)
{
turnonpixel = (bmp.GetPixel(x, y) == System.Drawing.Color.Black);
//...
//...
}
}

iman-63
دوشنبه 22 مهر 1387, 10:27 صبح
با سلام.

ممنون از پاسخ شما دوست عزیز.
تقریباً همینی هست که گفتین!!

فقط تصویر من سیاه و سفید هست نه رنگی که بخوام پیکسل های سیاه و سفید رو جدا کنم.

اگه ممکنه در مورد فونت هم مثالی بزنید.

یه نگاهی به این تصویر بندازین متوجه می شین من چی میخوام

__H2__
دوشنبه 22 مهر 1387, 22:11 عصر
سلام

فقط تصویر من سیاه و سفید هست نه رنگی که بخوام پیکسل های سیاه و سفید رو جدا کنم
من نگفتم رنگی...
کدی که من گذاشتم یک متن سیاه را روی یک فایل bmp سفید مینویسد و بعد تک تک پیسکل های bmp را میخواند و هر پیکسلی که سیاه باشد متغییر turnonpixel را true میکند و در غیر این صورت متغییر turnonpixel را false میکند، یعنی یک معیار مناسب برای روشن و خاموش کردن دیودها.(دقیقاً مثل همان شکل A شما.)



اگه ممکنه در مورد فونت هم مثالی بزنید.

در همان کد فوق از فونت پیش فرض ویندوز استفاده شده.
System.Drawing.SystemFonts.DefaultFont

شما میتوانید به دلخواه از یک System.Drawing.Font را با نام فونت موجود و دلخواه new کنید.

ولی مسئله مهمی وجود دارد...
اصولاً برای تابلوهای بزرگ از یک رایانه ارزان قیمت استفاده میکنند و در این موارد میتوان با C#.Net و تحت ویندوز کد نویسی کرد و روی فونت دلخواه و کدی مثل نمونه ای که گذاشتم مانور داد.

ولی اگر تابلو نمایشی شما کوچک و با ابعاد چند LED باشد معمولاً از C#.Net استفاده نمیکنند و با مدارات میکروکنترلرها کار را تمام میکنند و در هر صورت در این تابلوهای کوچک کدی که من گذاشتم بازده و خروجی خوب و مناسبی ندارد، در این موارد با ابعاد کوچک خودتان باید کاراکتر و شمای پیکسلی آن را تعریف کنید تا بتوانید به بهترین شکل علایم و حروف را در کمترین فضای ممکن پیاده سازی کنید.
مثل همان نمونه A که خودتان گذاشتید.

اصلاً تابلویی وجود دارد یا بحث یک آزمایش روی مانیتور است؟
ابعاد و تعداد LED های تابلو چندتا است؟
(هر چه بزرگتر باشد دستتان برای کد نویسی و استفاده از روش های متنوع و ساده در C#.Net باز تر است !)

iman-63
سه شنبه 23 مهر 1387, 10:23 صبح
lممنون از شما دوست عزیز.

ابعاد تابلوی من 16*96 است یعی 1536 led که 1536 بیت کد برای هر فریم مورد نیاز است.
تابلوی من با میکرو کنترلر بسته شده و روند کار به این صورت است که کد متن یا تصویر مورد نیازم رو به صورت سطری بیرون میارم (در اندازه 16*96) بعد این کد رو با استفاده از پورت سریال (RS232) به میکرو منتقل می کنم و .....

حالا من می خوام یه برنامه بنویسم تا بتونم کدها رو راحت تر بیرون بیارم.
این برنامه باید یه ماتریس 16*96 یا 16*..... باشه که هم بتونه تصویر رو بگیره و هم فونت هارو.

این کل ماجرا.

__H2__
سه شنبه 23 مهر 1387, 22:56 عصر
سلام

ابعاد تابلوی من 16*96 است ...
ارتفاع شما یک جورهایی در وسط مرز انتخاب دو روشی که گفتم قرار دارد ولی آنقدر هم کم نیست که نتوان از کدهای +GDI و رسم روی bmp استفاده کرد.

برای ابعاد فونت به pixel اصلاً نباید از اعداد بالای 16 استفاده کنید، تازه 16 هم تضمین درستی ندارد که ارتفاعش در صفحه نمایش شما جا شود.

اگر در جایی از این کدها مشکلی دارید بپرسید...


System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(16, 960);
System.Drawing.Font font = new System.Drawing.Font("Tahoma", 16, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);

using (System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(bmp))
{
graph.DrawString("Hello", font, System.Drawing.Brushes.Black, 0, 0);
}

//bmp.Save("C:\\file.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
//System.Drawing.Bitmap bmp = new System.Drawing.Bitmap("C:\\file.bmp");

bool turnonpixel;

for (int x = 0; x < bmp.Width; x++)
{
for (int y = 0; y < bmp.Height; y++)
{
turnonpixel = (bmp.GetPixel(x, y) == System.Drawing.Color.Black);
//...
SendToComPort(x ,y, turnonpixel);
//...
}
}