PDA

View Full Version : رنگ یک پیکسل !



VirGil
چهارشنبه 09 مرداد 1387, 17:47 عصر
سلام به همه ی دوستان

فرض کنید یکعکس رو فرم انداختیم.

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

داده بشه.

کسی میتونه راهنمایی کنه؟

DarkSoroush
چهارشنبه 09 مرداد 1387, 20:14 عصر
سلام به همه ی دوستان

فرض کنید یکعکس رو فرم انداختیم.

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

داده بشه.

کسی میتونه راهنمایی کنه؟
شما ابتدا یک ابجکت از کلاس BITMAP میسازی و در رویداد New اون ابجکت Image رو قرار میدی که همون form1.backgroundimage هست. و بعد میتونی با بدست اوردن مکان موس و تابع GetPixel که در کلاس bitmap وجود داره و مقداری از نوع کلاس color رو برمیگردونه و زیر مجموعه های اون یعنی r و g و b و a رنگ رو تشخیص بدی!! راحت تر از اون چیزی هست که بشه فکر کرد.

VirGil
چهارشنبه 09 مرداد 1387, 21:11 عصر
یه مثثال بزنید.

خواهش میکنم.چون من تازه به .net مهاجرت کردم و هیچ ازش بلد نیستم.

DarkSoroush
پنج شنبه 10 مرداد 1387, 01:54 صبح
یه مثثال بزنید.

خواهش میکنم.چون من تازه به .net مهاجرت کردم و هیچ ازش بلد نیستم.
یک فرم بسازید. یک تصویر را به عنوان بک گروند انتخاب و یک لیبل هم روی فرم قرار دهید. در انتها کد زیر رو بنویسید.


Dim b_Bitmap As Drawing.Bitmap
Private Sub form1_BackgroundImageChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.BackgroundImageChanged
If Not (Me.BackgroundImage Is Nothing) Then
b_Bitmap = New Drawing.Bitmap(Me.BackgroundImage)
End If
End Sub

Private Sub form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
If Not (b_Bitmap Is Nothing) Then
Label1.Text = b_Bitmap.GetPixel(e.X, e.Y).ToString
End If
End Sub

VirGil
دوشنبه 14 مرداد 1387, 12:12 عصر
حالا از خروجی که این کد توی label1 برمیگردونه چه جوری میشه استفاده کرد؟

یعنی مثلا چه جوری میشه فهمید R یا B یا G یه تقطه چه قدر هست؟

naeeme
دوشنبه 14 مرداد 1387, 13:47 عصر
شما این کد رو نوشتین و اجراش رو دیدین؟؟ حالا اگه واقعا RGB رو می خواین، کافیه یه متغیر از نوع COLOR تعریف کنین و حاصل GetPixel رو به جای نسبت دادن به lable به اون متغیر نسبت بدین.



Dim clr As New Drawing.Color()
Dim R As Byte, G As Byte, B As Byte

clr = bmp.GetPixel(x, y)
lbl.Text = clr.ToString()
R = clr.R
G = clr.G
B = clr.B

VirGil
سه شنبه 15 مرداد 1387, 14:45 عصر
سلام.دستتون درد نکنه.

تا حالا همه چی خوب پیش رفته.:دی.

اما اخرین و مهمترین سوال.

من با پینت ویندوز یه عکس کشیدم که 3 رنگ قرمز سبز و ابی رو داشت.(با فرمت Jpg)

بعد اون عکس رو به عنوان BackgrounImage فرم قرار دادم.

ولی مثلا وقتی موس رو روی رنگ سبز میبرم خیلی وقت ها R بیشتر از G میشه.یعنی قرمز .... .

یا وقتی روی سیاه میبرم R , G , B صفر نمیشه.

در کل نمیشه روی خروجی که این تابع میده و چیزی که چشم میبینه اعتماد کرد.

کسی میتونه این مشکل رو هم حل کنه؟

VirGil
چهارشنبه 16 مرداد 1387, 22:17 عصر
کسی جواب این سوال رو نمیدونست؟

DarkSoroush
پنج شنبه 17 مرداد 1387, 19:15 عصر
من با پینت ویندوز یه عکس کشیدم که 3 رنگ قرمز سبز و ابی رو داشت.(با فرمت Jpg)

بعد اون عکس رو به عنوان BackgrounImage فرم قرار دادم.

ولی مثلا وقتی موس رو روی رنگ سبز میبرم خیلی وقت ها R بیشتر از G میشه.یعنی قرمز .... .

یا وقتی روی سیاه میبرم R , G , B صفر نمیشه.
من همین کاری که شما کردی رو انجام دادم. همه چی درسته. چند بار تست کنید. مشکل از این نیست. البته امیدوارم Alpha را اشتباه نگیرید چون Alpha معمولا همیشه 255 است مگر تصویر transparent باشد

VB.NET2005
جمعه 18 مرداد 1387, 22:34 عصر
با سلام :
چه طور میشه با دادن مختصات یک نقطه رنگ اونو پیدا کرد ؟ ؟ ؟

DarkSoroush
شنبه 19 مرداد 1387, 02:53 صبح
با سلام :
چه طور میشه با دادن مختصات یک نقطه رنگ اونو پیدا کرد ؟ ؟ ؟
شما کدی که بالاتر نوشتم رو یک مرور بکنید!! در یک خط نوشتم:

b_Bitmap.GetPixel(e.X, e.Y)

من اینجا از مختصات موس استفاده کردم چون سازنده تاپیک اینو میخواست ولی شما میتونی مستقیما مقدار بدی!!

VirGil
یک شنبه 20 مرداد 1387, 18:21 عصر
من همین کاری که شما کردی رو انجام دادم. همه چی درسته. چند بار تست کنید. مشکل از این نیست. البته امیدوارم Alpha را اشتباه نگیرید چون Alpha معمولا همیشه 255 است مگر تصویر transparent باشد

نه الفا که همون 255 است.

ولی مثلا وقتی موس از روی رنگ سفید به سیاه میره هیچ تغییری تو رنگ ها ایجاد نمیشه.

بعضی وقت ها هم وقتی موس فقط توی رنگ سفید جابه جا میشه یهو RGB عوض میشه.

ما که نفهمیدیم چی شد.

DarkSoroush
سه شنبه 22 مرداد 1387, 03:57 صبح
نه الفا که همون 255 است.

ولی مثلا وقتی موس از روی رنگ سفید به سیاه میره هیچ تغییری تو رنگ ها ایجاد نمیشه.

بعضی وقت ها هم وقتی موس فقط توی رنگ سفید جابه جا میشه یهو RGB عوض میشه.

ما که نفهمیدیم چی شد.
!! عجیبه!! اگه میتونید سورس برنامتون رو بدید بهم. در ضمن یک نگاهی به سورسی که پایین گذاشتم هم بکنید. همین کارو انجام میده و مشکلی که شما گفتید رو هم نداره.
-------------
الان که داشتم این نمونه برنامه را برای شما مینوشتم به یک نکته برخورد کردم. اینکه شما نباید تصاویر را Stretch کنید چون مقیاس بهم میریزه. ممکنه فرم بزرگتر از تصویری واقعی باشه. در این صورت شما اگر حالت تصویر بک گروند را Zoom یا Stretch گذاشته باشید در اصل دارید پیکسل اشتباهی را درخواست میکنید چون کدی که نوشتم مختصات موس بر حسب فرم رو میگیره و اگر حالت تصویر بکگروند چیزی غیر از None باشه مقیاس بهم میریزه. احتمال میدم مشکل شما این باشه. در هر حال کد زیر رو هم نگاه کنید. (میتونید از منوی Select تصویر را عوض هم بکنید.)

Zippo.Master
سه شنبه 22 مرداد 1387, 08:36 صبح
احتمال زیاد اون رنگی که شما فکر می کنی سیاه ، کاملا سیاه نیست!!!
برای اینکه مطمئن شی ، اون عکس را ببر داخل فوتوشاپ با ابزار قطره چکون رنگ اون پیکسل را بگیر!!

همین برنامه که دوست عزیر گذاشته بود را من دیدم!!
اون مربع سیاه فقط وسط تصیر سیاه کامل هستش بالاهای عکس گوشه ها ناخالصی داره!!
اما چشم ما اینقدر دقیق نیست که تشخیص بده!!!:لبخندساده:

VirGil
سه شنبه 22 مرداد 1387, 21:07 عصر
اقایون همگی دستتون ددر نکنه ولقعا.

بله.

یکی مشکل از sretch بود و یکی هم از ناخالصی رنگ ها