PDA

View Full Version : کار با تصاوير



shahnam sha
دوشنبه 23 اسفند 1389, 11:02 صبح
سلام دوستان عزيز و برنامه نويسان گرامي
من يه برنامه مي خوام بنويسم که تصوير و شطرنجي کنه و اين قابليت رو داشته باشه که فاصله دو نقطه رو که روي اون مشخص ميکنم به (سانتي متر و پيکسل) بده و مساحت رو مشخص کنه (يک شکل در تصوير) هر کدام از دوستان اگه قسمتي از برنامه رو هم دارن لطف کنن سورس بزارن.
خيلي واجبه دوستان بشتابيد. !!!!

exlord
دوشنبه 23 اسفند 1389, 11:21 صبح
اگه سورس میخواین برین sourceforge یا codeproject یا ...
اینجا محل یاد گیری .... یکمیشو خودتون بنویسین بعد بگین از اینجا به بعدشو باد نیستم شما یاد بدین ...

Hossenbor
دوشنبه 23 اسفند 1389, 12:18 عصر
اگه سورس میخواین برین sourceforge یا codeproject یا ...
اینجا محل یاد گیری .... یکمیشو خودتون بنویسین بعد بگین از اینجا به بعدشو باد نیستم شما یاد بدین ...

سلام دوست عزیز ما ابتدایی ها رو هم در نظر بگیرید اگر برای یکی کد اماده باشه برای ما جنبه اموزشی باشه چرا این سایت خودش مرجع کد نباشه تو سایت قسمت اوپن سورس هم داریم اگه سخنم تند بود به بزرگی خودتون ببخشید

shahnam sha
دوشنبه 23 اسفند 1389, 12:32 عصر
از دوستان عزيز exlord (http://barnamenevis.org/member.php?77199-exlord) و Hossenbor (http://barnamenevis.org/member.php?92473-Hossenbor)
متشکرم من هم با دوست عزيز hossenbor موافقم اگه بتونيد هر کدام يه قسمت از برنامه مورد نظر هم بگذاريد کمک بزرگي کرديد.

shahnam sha
دوشنبه 23 اسفند 1389, 17:19 عصر
يعني هيچکس نمي تونه راهنمايي کنه؟

unknown.unforgiven
دوشنبه 23 اسفند 1389, 17:40 عصر
سلام
فقط یه قسمت رو میخوای شطرنجی بکنی یا کل عکس رو؟ در مورد پیدا کردن فاصله بین دو نقطه (بر حسب پیکسل) میتونی تو هر سری کلیک (روی نقاط مورد نظرت) موقعیت اون نقاط رو بگیری و با استفاده از فرمول ریاضی فاصله بین دو نقطه با استفاده از x و y فاصله رو بر حسب پیکسل حساب بکنی. در مورد فاصله بر حسب سانتی متر فکر کنم به همین سادگی نشه فاصله رو پیدا کرد، چون به یه معیار هم احتیاج داری. اگه تونستم برات نمونه کد میذارم

پ.ن: این کد رو الآن تست کردم، فاصله بین دو نقطه از picturebox که روش کلیک کردی رو (به پیکسل) روی label نشون میده
int frst = 0;
int x1 = 0, x2 = 0, y1 = 0, y2 = 0;
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
if (frst == 0)
{
x1 = e.X;
y1 = e.Y;
frst++;
}
else
{
x2 = e.X;
y2 = e.Y;
frst = 0;
label1.Text = (Math.Sqrt(Math.Pow(x2 - x1, 2) + Math.Pow(y2 - y1, 2))).ToString();
x1 = x2 = y1 = y2 = 0;
}
}

shahnam sha
دوشنبه 23 اسفند 1389, 19:36 عصر
ممنونم از راهنمايي تون ميخوام کل تصوير شطرنجي بشه اگه باز هم نمونه کد بگذاري ممنون ميشم.

shahnam sha
سه شنبه 24 اسفند 1389, 07:54 صبح
دوست عزيز unknown.unforgiven (http://barnamenevis.org/member.php?155918-unknown.unforgiven)
من هنوز منتظر هستم.

unknown.unforgiven
سه شنبه 24 اسفند 1389, 09:21 صبح
دارم روش کار میکنم (تیکه ی شطرنجی)، هنوز به نتیجه نرسیدم. یه سولام واسم مطرح شد اینه که چه جوری میخوای شطرنجی بکنی؟ عین اون تیکه از فیلما که صورت طرف رو pixelate میکنن یا شطرنجی سیاه سفید؟ اگه شطرنجی سیاه سفید میخوای، میتونی با 2 تا for کل تصویر رو شطرنجی سیاه سفید بکنی اما اگه بخوای تصویر رو pixelate بکنی باید رزولوشن عکس رو بیاری پایین و با عکس اورجینال جایگزینش بکنی (منظورم یه چیز تو مایه های بزرگنمایی در حد زیاده که نمیذاره کیفیت تصویر باقی بمونه و به حالت pixelated در میاد). این الگوریتمشه، من دارم رو این موضوع pixelate کردن کار میکنم. حالا اگه خودت تونستی زودتر بنویسیش اینجا هم بذار که من و امثال من هم بتونن ازش استفاده بکنن

shahnam sha
سه شنبه 24 اسفند 1389, 09:56 صبح
خيلي ممنون که پيگير هستيد من ميخوام خط هايي به رنگ مشکي به صورت افقي و عمودي که همديگر رو قطع ميکنن روي تصوير بيوفته(به صورت مربع ، مربع) که تصوير سر جاي خودش هست فقط خط هاي مزبور روي آنها افتاده.

unknown.unforgiven
سه شنبه 24 اسفند 1389, 14:23 عصر
واسه تیکه ی pixelate کردن این کد رو نوشتم. ببین به کارت میاد یا نه. فقط به 2 تا نکته توجه کن
1. فرض کردم یه picturebox داری و توش اون عکسی که میخوای pixelate بکنیش load شده باشه
2. با تغییر مقدار step مقدار pixelate شدن عکس فرق میکنه
کد:
int step = 10;
Bitmap myImage = (Bitmap)pictureBox1.Image;
for (int i = step; i < myImage.Width; i += (2 * step))
{
for (int j = step; j < myImage.Height; j += (2 * step))
{
for (int x = i - step; ((x <= (i + step)) && x < myImage.Width); x++)
{
for (int y = j - step; ((y <= (j + step)) && y < myImage.Height); y++)
{
myImage.SetPixel(x, y, myImage.GetPixel(i, j));
}
}
}
}
pictureBox1.Image = myImage;

shahnam sha
سه شنبه 24 اسفند 1389, 14:58 عصر
خيلي ممنون همانطور که گفتيد کد بالا به درستي و خيلي خوب تصوير رو pixelate ميکنه ولي من همانطور که در قسمت 10 گفتم مي خوام به صورت خطوط افقي و عمودي خطوط روي تصوير بياد و تصوير به همان صورت که هست باقي بمونه اگه اين کد رو هم بتونيد بنويسيد ممنون ميشم.

shahnam sha
سه شنبه 24 اسفند 1389, 15:11 عصر
خيلي ممنون همانطور که گفتيد کد بالا به درستي و خيلي خوب تصوير رو pixelate ميکنه ولي من همانطور که در قسمت 10 گفتم مي خوام به صورت خطوط افقي و عمودي خطوط روي تصوير بياد و تصوير به همان صورت که هست باقي بمونه اگه اين کد رو هم بتونيد بنويسيد ممنون ميشم.

unknown.unforgiven
سه شنبه 24 اسفند 1389, 15:26 عصر
دیگه اون تیکه رو خودت بنویس، واسه این کار دیگه احتیاج نیست از bitmap استفاده بکنی. از نمونه کد زیر میتونی واسه کارت کمک بگیری
Graphics graphic = pictureBox1.CreateGraphics();
SolidBrush blackBrush = new SolidBrush(Color.Black);
int x = 0;
int y = 0;
int width = 200;
int height = 200;
graphic.FillRectangle(blackBrush, x, y, width, height);

shahnam sha
چهارشنبه 25 اسفند 1389, 08:55 صبح
متشکر که سورس گذاشتيد ولي من اين کد رو تو ایونت کليک یک باتن گذاشتم ولي کار نکرد کار خاصي بايد انجام بدم حتي تو ایونت paint ,picturebox هم گذاشتم باز هم کار نکرد لطفا بگيد براي اينکه تو picturebox نمايش داده بشه بايد چيکار کرد.

shahnam sha
چهارشنبه 25 اسفند 1389, 09:16 صبح
باز هم متشکر کد کار کرد ولي يک مستطيل رسم ميشه من مي خوام خط هاي افقي و عمودي رسم شه البته فکر کنم فهميدم چيکار کنم درست که شد در همين تاپيک ميزارم.

shahnam sha
چهارشنبه 25 اسفند 1389, 10:24 صبح
سلام من کد شطرنجي کردن با خطوط افقي و عمودي رو نوشتم که در زير ملاحظه ميکنيد :


int NumWidth = 0, NumHeight = 0,CountHor=0,CountVer=0;
int SetLine = 0;
NumHeight = pictureBox1.Size.Height;
NumWidth = pictureBox1.Size.Width;

CountHor = NumHeight / 20;
CountVer = NumWidth / 20;

Graphics graphic = pictureBox1.CreateGraphics();
Pen aPen = new Pen(Brushes.Black, 2);

for (int i = 0; i <= CountHor + 1; i++)
{
graphic.DrawLine(aPen, SetLine, 0, SetLine, NumHeight);
SetLine = SetLine + 20;
}
SetLine = 0;
for (int i = 0; i <= CountVer + 1; i++)
{
graphic.DrawLine(aPen, 0, SetLine, NumWidth, SetLine);
SetLine = SetLine + 20;
}