PDA

View Full Version : کار با pixel



littledemon
چهارشنبه 08 اسفند 1386, 12:56 عصر
سلا به بزرگان :خجالت:
یه مشکلی دارم ...
من یه دونه picturebox دارم که کاربر خودش با استفاده از command dialog میتونه عکسی براش انتخاب کنه ....خوب تا اینجا درست...حالا میخوام یه دونه چک باکس هست وقتی چک خورد تمامی پیکسل ها با رنگ سیاه از داخل عکس حذف بشه. یا Transparent بشه...:لبخندساده:
با getpixel و ... رفتم ولی میگه شی حتما باید از نوع بیتمپ باشه که نشد ..:متفکر:

__H2__
چهارشنبه 08 اسفند 1386, 16:10 عصر
سلام
اگر تصویرتان وهله ای از System.Drawing.Bitmap باشد (یا نبود هم تبدیلش کنید)، متد MakeTransparent کلاسس مذکور که یک رنگ هم میگیرد، گمانم مشکلتان را حل کند.

littledemon
پنج شنبه 09 اسفند 1386, 15:48 عصر
درست نفهمیدم منظورتون رو ..میشه یکم توضیح بدید ..؟ بد شانسی من اینه که نتونستم ما یحتوی picture box رو تبدیل کنم.....
یعنی نمی دونم با کدوم دستور...ناشی ام یکم.

saeed_rezaei
پنج شنبه 09 اسفند 1386, 19:05 عصر
سلام
با تشکر از دوست عزیز جناب h2
توضیحات ایشون کدش می شه :



Dim ofd As New OpenFileDialog
ofd.ShowDialog()

Dim m As New Bitmap(ofd.FileName)
Dim c As Color = Color.Black
m.MakeTransparent(c)

littledemon
شنبه 11 اسفند 1386, 10:15 صبح
eeeeee
اشتباهی فکر کردم عمل کرد ه زدم حل شده ...

اقا ارور نداد ...ولی جواب هم نداد...اخه عکسی که توی Picture box لود میشه اصلا تغییر نمیکنه ... جریانش چیه ؟

__H2__
شنبه 11 اسفند 1386, 11:32 صبح
سلام

eeeeee
عکسی که توی Picture box لود میشه اصلا تغییر نمیکنه ... جریانش چیه ؟
اشتباه از کد شما است.

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

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


Public Function MakeTransparent(ByVal image As System.Drawing.Image, ByVal color As System.Drawing.Color) As System.Drawing.Image

If (image Is Nothing) Then Return Nothing

Dim bmp As System.Drawing.Bitmap = TryCast(image, System.Drawing.Bitmap)

If (bmp Is Nothing) Then
bmp = New System.Drawing.Bitmap(image)
End If

bmp.MakeTransparent(color)
Return bmp

End Function

استفاده
Me.PictureBox1.Image = Me.MakeTransparent(Me.PictureBox1.Image, System.Drawing.Color.Black)

استفاده بهتر-با آزاد سازی حافظه تصویر قبلی
Dim orgimg As System.Drawing.Image = Me.PictureBox1.Image
If (orgimg Is Not Nothing) Then
Me.PictureBox1.Image = Me.MakeTransparent(orgimg, System.Drawing.Color.Black)
If (orgimg IsNot Me.PictureBox1.Image) Then orgimg.Dispose()
End If


کد خاص کلاسس Bimap که اغلب مواقع جواب میدهد و کافیست و خیلی بهتر است!


Public Sub MakeTransparent(ByVal image As System.Drawing.Image, ByVal color As System.Drawing.Color)

Dim bmp As System.Drawing.Bitmap = TryCast(image, System.Drawing.Bitmap)

If (bmp IsNot Nothing) Then
bmp.MakeTransparent(color)
End If

End Sub

استفاده
Me.MakeTransparent(Me.PictureBox1.Image, System.Drawing.Color.Black)

گرچه این نمونه کد است و شما باید طرز کار را متوجه شوید و خودتان کد دلخواهتان را بنویسید،
ولی میشد در VB9 یعنی همان 2008 کمی به ظاهر کمتر کد نویسی کرد، ولی چیزی نوشتم که در 2005 و 2008 به راحتی کار کند.

littledemon
یک شنبه 12 اسفند 1386, 10:14 صبح
خیلی ممنون درسته یه چیزای کلی فهمیدم..یعنی سعی کردم بفهمم.. .

خوب حالا اگه من بخوام کاری مشابه انجام بدم چی ؟ منظورم:
بجای این که پیکسل های سیاه حذف بشن... همه به یه رنگ دیگه در بیان....فکر نمی کنم در حالت عادی دستوری برای اینکار باشه ولی با pixelformatt میشه ؟

saeed_rezaei
یک شنبه 12 اسفند 1386, 11:23 صبح
سلام. این لینک رو هم یه نگاهی بنداز. با تغییر اعداد ماتریس می تونید رنگها رو به صورت دلخواه تغییر بدید. http://barnamenevis.org/forum/showpost.php?p=407997&postcount=5