ورود

View Full Version : سوال: نمایش عکس+ نمایش دایره روی تصویر و پاک کردن کردن قسمت هایی که تداخلی با هم ندارند



seyed saeed
یک شنبه 16 تیر 1398, 18:02 عصر
سلام
می خواستم یک عکس رو نمایش بدم و بعد تعدادی دایره یا Arc روی تصویر بندازم و بعد قسمت هایی از تصویر که با این دایره ها اشتراک پیدا کرده اند رو در
پنجره دیگه ای نمایش بدهم بحث فقط نمایش نیست باید بتونم روی پیکسل های انتخابی فرمولی اجرا کنم
در واقع یه کار پردازش تصویر ساده است که نیازی به opencv نداره اگر سی شارپ بتونه به تنهایی این کار رو برام انجام بده

آیا این کار شدنی است ؟؟ چه طور ؟؟

seyed saeed
دوشنبه 17 تیر 1398, 11:12 صبح
فکر می کنم باید ابتدا یه اسکرین شات بتونم از صفحه خودم بگیرم تو پیج های خارجی دیدم ولی اون ها یه کلاس به نام graphisc دارند که من ندارم
بعید هم می دونم که این کلاس رو خودشون نوشته باشن چون خیلی جاها از این کلاس استفاده شده

seyed saeed
دوشنبه 17 تیر 1398, 15:33 عصر
بلاخره تونستم تصویر رو پخش کنم البته خیلی اصولی نیست

string path = "E:\\SAEED\\amuzesh\\C#‎‎‎\\WPF PROJECT\\SetPixel\\SetPixel\\SetPixel\\bin\\Debug\ \1.bmp";
BitmapImage image = new BitmapImage();

image.BeginInit();
image.UriSource = new Uri(path);
image.EndInit();
MainImage.Source = image;
البته دقیقا نمی دونم چه طور این اتفاق می افته مثلا اون uri چی هست
بعد یه چیز دیگه اینکه تو windows form یا مثلا C++‎‎‎ وقتی یه فایل رو نامش می دادیم به عنوان path تو فولدر خود برنامه اجراش می کرد ولی این جا من مجبور شدم آدرس کامل بدم
چرا ؟؟؟؟
مشکل دیگه اینه که خودش تصویر رو می کشه و بزرگ می کنه فقط نسبت طول و عرض رو رعایت می کنه
نمی دونم چه طور این رو کنترل کنم و اینکه موقعیت تصویر رو چه طور جابه جا کنم

seyed saeed
دوشنبه 17 تیر 1398, 16:02 عصر
MainImage.Width = image.Width/10;
MainImage.Height = image.Height/10;
MainImage.HorizontalAlignment = HorizontalAlignment.Left;
با اضافه کردن این خطوط هم ابعاد و هم موقعیت مکانی رو میشه جابه جا کرد
البته نمیشه به اندازه دلخواه تغییر ابعاد داد مثلا طول رو خیلی بزرگ کنی ولی عرض رو نه
در واقع باید نسبت ها رعایت شود
و همین طور موقعیت مکانی هم در این حالت فقط بالا و پایین و چپ و ....
این هاست شاید بشه با margin این کار رو بهتر انجام داد

seyed saeed
دوشنبه 17 تیر 1398, 16:47 عصر
private void SetTimer()
{

timer.Interval = TimeSpan.FromMilliseconds(10);
timer.Tick += timer_tick;
timer.Start();

}

private void timer_tick(object sender,EventArgs e)
{
MainImage.Margin = new Thickness(i++, 100, 0, i);

if (i > 100) i = 0;
}
با اضافه کردن این بخش تصویر هر 10 میلی ثانیه تغییر ابعاد میده
حالا از این ها بگذریم نمی دونم چه طور مسئله اولم رو حل کنم

barnamenevisjavan
دوشنبه 17 تیر 1398, 20:15 عصر
بلاخره تونستم تصویر رو پخش کنم البته خیلی اصولی نیست

string path = "E:\\SAEED\\amuzesh\\C#‎‎‎‎\\WPF PROJECT\\SetPixel\\SetPixel\\SetPixel\\bin\\Debug\ \1.bmp";
BitmapImage image = new BitmapImage();

image.BeginInit();
image.UriSource = new Uri(path);
image.EndInit();
MainImage.Source = image;
البته دقیقا نمی دونم چه طور این اتفاق می افته مثلا اون uri چی هست
بعد یه چیز دیگه اینکه تو windows form یا مثلا C++‎‎‎‎ وقتی یه فایل رو نامش می دادیم به عنوان path تو فولدر خود برنامه اجراش می کرد ولی این جا من مجبور شدم آدرس کامل بدم
چرا ؟؟؟؟
مشکل دیگه اینه که خودش تصویر رو می کشه و بزرگ می کنه فقط نسبت طول و عرض رو رعایت می کنه
نمی دونم چه طور این رو کنترل کنم و اینکه موقعیت تصویر رو چه طور جابه جا کنم
نظری در مورد کاری که داری انجام میدی ندارم ولی برای مسیر دهی اگه فایل در کنار exe هستش میتونی به این شکل عمل کنی از کد زیر استفاده کنی که به محلی که exe اجرا شده اشاره میکنه

string path = Environment.CurrentDirectory + @"\1.bmp;"
uri تو wpf سیستم جدید برای مسیردهی فایل ها هستش
https://docs.microsoft.com/en-us/dotnet/framework/wpf/app-development/pack-uris-in-wpf
برای فیت شدن عکس هم باید Stretch استفاده کنید
MainImage.Stretch = Stretch.Fill;

seyed saeed
سه شنبه 18 تیر 1398, 08:18 صبح
نظری در مورد کاری که داری انجام میدی ندارم ولی برای مسیر دهی اگه فایل در کنار exe هستش میتونی به این شکل عمل کنی از کد زیر استفاده کنی که به محلی که exe اجرا شده اشاره میکنه

string path = Environment.CurrentDirectory + @"\1.bmp;"
uri تو wpf سیستم جدید برای مسیردهی فایل ها هستش
https://docs.microsoft.com/en-us/dotnet/framework/wpf/app-development/pack-uris-in-wpf
برای فیت شدن عکس هم باید Stretch استفاده کنید
MainImage.Stretch = Stretch.Fill;

ممنون
یعنی به نظرتون نمیشه پیکسل به پیکسل صفحه رو رنگش رو بخونیم و تو آرایه ای بریزیم
یه سوال دیگه اگر فرض کنیم که چند تا فایل عکس را مثلا با نوت پد به هم متصل کنیم به صورت کپی پیست اطلاعات
اونوقت روشی هست که بشه اطلاعات رو از این فایل بیرون کشید آیا از همچین فایلی قابلیت شناسایی عکس وجود داره برای wpf
به طور مثال با توجه به اینکه حوزه تخصصیم الکترونیک هست گاهی چند تصویر bmp را در یک فایل می گذارم و برنامه رو طوری می نویسم که خودش متوجه بشه که داخل فایل هر جا
به هدر رسید عکس جدید هست
این کار در زبان سی خیلی راحت هست و به سادگی انجام میشه
در برنامه های کامپیوتری هم حتما فایل هایی وجود داره که توسط برنامه نویس تعریف شده و ممکنه حاوی صدا و عکس و غیره باشه درسته ؟؟
می خوام از هم چین فایلی ببینم چه طور میشه اطلاعات تصویر رو نمایش داد مطمئنا دیگه از Uri نمیشه استفاده کرد
بر می گردم سر سوال اولم
آیا ممکن است که پیکسل به پیکسل نمایشگر رو دریافت کنیم و بعد به عنوان یه عکس bmp ذخیره کنیم مثل اسکرین شات البته با قابلیت دستکاری در اطلاعات