PDA

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



XMEGAMAHDI
سه شنبه 29 بهمن 1387, 08:27 صبح
به نام خدا
سلام دوستان من میخواهم یک عکس رنگی 24 بیتی را به پیکسل هایش تجزیه کنم و ببینم هر پیکسل آن چه مقدار قرمز چه مقدار آبی چه مقدار سبز میباشد (از 0 تا 255 چون برای هر رنگ 8 بیت در نظر گرفته شده )من این اطلاعات را برای نمایش یک عکس به روی تابلو led میخواهم. اگر هم کامپوننتی در این مورد وجود دارد ممنون میشم اون به من معرفی کنید متشککرم.

mostafaaa
سه شنبه 29 بهمن 1387, 12:11 عصر
سلام دوست من
براي اين كار احتياجي به كامپوننت نداري :

Dim img As Bitmap = Bitmap.FromFile("FileName.jpg")
Dim Col As Color
Dim Red, Green, Blue As Integer
Col = img.GetPixel(13, 23)
Red = Col.R
Green = Col.G
Blue = Col.B
يا علي

arsalansalar
سه شنبه 29 بهمن 1387, 13:02 عصر
آیا می شود با کد نور یک عکس را کم کرد؟یعنی شفاف یا تیره کرد؟

XMEGAMAHDI
سه شنبه 29 بهمن 1387, 14:13 عصر
به نام خدا سلام از کمکتون متشکرم میخواستم بپرسم یک برنامه به عنوان مثال ندارید که در آن یک عکس رنگی را لود کند و مثل نرم افزار های آیکون پیکسل های عکس را به صورت جدا نمایش دهد با ز هم از کمک بزرگ شما دو.ست عزیز ممنونم

mostafaaa
سه شنبه 29 بهمن 1387, 19:39 عصر
سلام دوست من

آیا می شود با کد نور یک عکس را کم کرد؟یعنی شفاف یا تیره کرد؟
بله ميشه ، اتفاقا چند وقت پيش براي سرگرمي يه همچين كدي نوشتم و خروجيش هم قابل قبول بود ، به اين صورت كه هر پيكسل از عكس ميگرفتم و به خاصيتهاي R,G,B مقدار مشخصي اضافه يا كم ميكردم براي روشن و تاريك تر شدن تصوير و جايگزين پيكسل اصلي ميكردم .

به نام خدا سلام از کمکتون متشکرم میخواستم بپرسم یک برنامه به عنوان مثال ندارید که در آن یک عکس رنگی را لود کند و مثل نرم افزار های آیکون پیکسل های عکس را به صورت جدا نمایش دهد با ز هم از کمک بزرگ شما دو.ست عزیز ممنونم
والا من با نرم افزارهاي آيكن كار نكردم و نميدونم منظورتون از اينكه جدا نشون بده چيه!! در هر صورت اگه نمونه اي برات پيدا كردم حتما اينجا ميزارمش.
يا علي

shask00l
سه شنبه 29 بهمن 1387, 21:26 عصر
سلام دوست من

آیا می شود با کد نور یک عکس را کم کرد؟یعنی شفاف یا تیره کرد؟
بله ميشه ، اتفاقا چند وقت پيش براي سرگرمي يه همچين كدي نوشتم و خروجيش هم قابل قبول بود ، به اين صورت كه هر پيكسل از عكس ميگرفتم و به خاصيتهاي R,G,B مقدار مشخصي اضافه يا كم ميكردم براي روشن و تاريك تر شدن تصوير و جايگزين پيكسل اصلي ميكردم .


البته میتوانید از تابع argb هم استفاده کنید که علاوه بر سه پارامتر رنگ پارامتر چهارمی به نام alpha دارد .

mostafaaa
سه شنبه 29 بهمن 1387, 21:54 عصر
سلام دوست من

البته میتوانید از تابع argb هم استفاده کنید که علاوه بر سه پارامتر رنگ پارامتر چهارمی به نام alpha دارد .
http://barnamenevis.org/forum/images/statusicon/user_online.gif http://barnamenevis.org/forum/images/buttons/report.gif (http://barnamenevis.org/forum/report.php?p=681152) http://barnamenevis.org/forum/images/buttons/quote.gif (http://barnamenevis.org/forum/newreply.php?do=newreply&p=681152)
بله دوست من همين كلاس color هم كه در واقع تمامي مشخصات يه پيكسل رو داره يه پروپرتي به نام A داره كه مخفف همون alpha هست. وليكن به علت اينكه ايجاد كننده تاپيك يه تصوير 24 بيتي مد نظرشون بود من ديگه از اين 8 بيت حرفي نزدم!!
يا علي

shask00l
چهارشنبه 30 بهمن 1387, 01:20 صبح
........... وليكن به علت اينكه ايجاد كننده تاپيك يه تصوير 24 بيتي مد نظرشون بود من ديگه از اين 8 بيت حرفي نزدم!!
يا علي

:گیج: به اون نکته توجه نکرده بودم .:خجالت:

arsalansalar
چهارشنبه 30 بهمن 1387, 09:22 صبح
سلام دوست من

بله دوست من همين كلاس color هم كه در واقع تمامي مشخصات يه پيكسل رو داره يه پروپرتي به نام A داره كه مخفف همون alpha هست. وليكن به علت اينكه ايجاد كننده تاپيك يه تصوير 24 بيتي مد نظرشون بود من ديگه از اين 8 بيت حرفي نزدم!!
يا علي

میشه یک sample واسه من بگذارین؟

XMEGAMAHDI
چهارشنبه 30 بهمن 1387, 14:03 عصر
به نام خدا
منظور من این است میخواهم مانند نرم افزار PAINT پیکسل ها به صورت مربع های جدا نشان دهد (محدوده پیکسل ها مشخص باشد ) و البته میخواهم عکسی را که لود میکنم تعداد پیکسل های سطر وستون آن را نیز بدست آورم باز هم از کمکهای بی دریغ جنابعالی کمال تشکر را دارم

mostafaaa
چهارشنبه 30 بهمن 1387, 21:48 عصر
سلام دوست من
اگه منظورتون رو درست فهميده باشم اين كلاس كه براتون نوشتم بايد كارتون رو راه بندازه، : با استفاده از اين كلاس ميتونيد با كشيدن موس روي عكس مثل Paint يك قسمت از اون رو انتخاب و زوم كنيد .

Public Class ZoomInPictureBox
Private _PBX As PictureBox
Private OrgPic As Bitmap
Private _CanZoom As Boolean
Private X1, X2, Y1, Y2 As Integer
Sub New(ByVal PBX As PictureBox)
_PBX = PBX
End Sub
Public Function SelectPicture(ByVal SourcePoint As Point, ByVal Width As Integer, ByVal Height As Integer, ByVal Picture As Bitmap) As Bitmap
Try
Return Picture.Clone(New Rectangle(SourcePoint, New Size(Width, Height)), Imaging.PixelFormat.Format32bppRgb)
Catch ex As Exception
MsgBox(ex.Message)
Return Nothing
End Try
End Function
Private Sub MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs)
If OrgPic Is Nothing Then OrgPic = Me._PBX.Image
If e.Button = Windows.Forms.MouseButtons.Left Then
X1 = _PBX.PointToClient(Cursor.Position).X
Y1 = _PBX.PointToClient(Cursor.Position).Y
End If
End Sub
Private Sub MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)
If e.Button = Windows.Forms.MouseButtons.Left Then
X2 = (_PBX.PointToClient(Cursor.Position).X) - X1
Y2 = (_PBX.PointToClient(Cursor.Position).Y) - Y1
_PBX.Refresh()
_PBX.CreateGraphics.DrawRectangle(Pens.Black, X1, Y1, X2, Y2)
End If
End Sub
Private Sub MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs)
Dim Z As Single = Me._PBX.Image.Width / Me._PBX.Width
Dim J As Single = Me._PBX.Image.Height / Me._PBX.Height
Me._PBX.Image = SelectPicture(New Point(X1 * Z, Y1 * J), X2 * Z, Y2 * J, Me._PBX.Image)
End Sub
Public Sub Reset()
Me._PBX.Image = OrgPic
End Sub
Public Property CanZoom() As Boolean
Get
Return _CanZoom
End Get
Set(ByVal value As Boolean)
_CanZoom = value
If value Then
AddHandler Me._PBX.MouseDown, AddressOf MouseDown
AddHandler Me._PBX.MouseMove, AddressOf MouseMove
AddHandler Me._PBX.MouseUp, AddressOf MouseUp
Else
RemoveHandler Me._PBX.MouseDown, AddressOf MouseDown
RemoveHandler Me._PBX.MouseMove, AddressOf MouseMove
RemoveHandler Me._PBX.MouseUp, AddressOf MouseUp
End If
End Set
End Property
End Class

براي استفاده هم كافيه فقط از اين كد استفاده كنيد :

Me.PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
Me.PictureBox1.Image = Bitmap.FromFile("D:\ImageName.jpg")
Dim Zoom As New ZoomInPictureBox(Me.PictureBox1)
Zoom.CanZoom = True
يه متد هم به نام Reset براش گزاشتم تا عكس رو به حالت اول برگردونه!
اميدوارم بدردتون بخوره
يا علي

XMEGAMAHDI
پنج شنبه 01 اسفند 1387, 13:57 عصر
به نام خدا
سلام خیلی متشکرم برنامه شما واقعا مفید بود ولی منظور من این است که میخواهم یک picturebox داشته باشم که در آن عکسی با اندازه 128 در 64 لود کنم که هنگام نمایش این عکس پیکسل های عکس به صورت مربع های کنار هم قابل تشخیص باشد مثل نرم افزار های آیکون سازی که پیکسل ها با مربع های جدا جدا در کنار هم نمایش پیدا میکنند در ضمن میخواستم بپرسم شما لینک کاملی از سورس برنامهpaint.net که یک دانشجوی امریکایی به صورت مجانی در اینترنت قرار داده را ندارید چون من فقط توانستم فایل ستاپ و فایل های form که کد نویسی ها در آن قرار دارد را بدست بیاورم form disigner اون موجود نبود و من همه پروژه رو به طور کامل احتیاج دارم باز هم از کمکهای بی دریغ جنابعالی کمال تشکر را دارم

arsalansalar
شنبه 03 اسفند 1387, 09:52 صبح
دوست عزیز لطف میکنی این sample و برای من بگذاری؟

XMEGAMAHDI
شنبه 03 اسفند 1387, 10:20 صبح
به نام خدا
سلام دوستان من هنوز منتظر کمکهای شما دوستان عزیزم هستم متشکرم

mostafaaa
شنبه 03 اسفند 1387, 17:25 عصر
سلام دوست من

دوست عزیز لطف میکنی این sample و برای من بگذاری؟

mohammad-gh
دوشنبه 04 آبان 1388, 19:06 عصر
با سلام
دوستان عزيز و مخصوصا اقا مصطفي
من مشخصات يك پيكسل از تصوير را درآورده و مي خوام بهد از اضافه كردن مقاديري به آن همون پيكسل رو در يك تصوير ديگه وارد كنم، يعني پيكسلهي تصوير فعلي رو + يك مقدار ثابت كنم و يك عكس جديد درست كنم ولي اينكه چطور پيكسلهاي عكس جديد رو ست كنم نمي دونم؟
البته از دستور setpixel استفاده كردم ولي خطا ميگيره
به اين صورت

dim img as bitmap=picuerbox2.img
img.setpixel(0,0,fromargb(255,100,100,100))

تو خطا هم ميگه
setpixel is not suport for imge with indexed pixel formates

mohammad-gh
سه شنبه 05 آبان 1388, 13:02 عصر
آقا يعني كسي تا حالا پيكسل يك عكس رو تغيير نداده
فكر كنيد مي خوايد يه پيكسل رو تماما سياه كنيد

shask00l
چهارشنبه 06 آبان 1388, 17:14 عصر
سلام دوست عزيز
فكر نكنم به همين سادگي بشه روي picbox بصورت مستقيم چيزي كشيد . به شما پيشنهاد ميكنم يك شئ از نوع بيتمپ بسازيد .

objBitmap As New Bitmap(Width, Height)

تغييرات مورد نظر رو روي اين اعمال كنيد . بعد اينو روي picbox لود كنيد .موفق باشيد

armanikurd
سه شنبه 12 آبان 1388, 01:59 صبح
به نام خدا

سلام خیلی متشکرم برنامه شما واقعا مفید بود ولی منظور من این است که میخواهم یک picturebox داشته باشم که در آن عکسی با اندازه 128 در 64 لود کنم که هنگام نمایش این عکس پیکسل های عکس به صورت مربع های کنار هم قابل تشخیص باشد مثل نرم افزار های آیکون سازی که پیکسل ها با مربع های جدا جدا در کنار هم نمایش پیدا میکنند در ضمن میخواستم بپرسم شما لینک کاملی از سورس برنامهpaint.net که یک دانشجوی امریکایی به صورت مجانی در اینترنت قرار داده را ندارید چون من فقط توانستم فایل ستاپ و فایل های form که کد نویسی ها در آن قرار دارد را بدست بیاورم form disigner اون موجود نبود و من همه پروژه رو به طور کامل احتیاج دارم باز هم از کمکهای بی دریغ جنابعالی کمال تشکر را دارم



فکر کنم شما بتونید این کار رو انجا بدید . البته شاید خیلی فنی نباشه اما یه روشی واسه خودش :خجالت:
با یه حلقه For و دستور getPixcel می تونی رنگ هر کدوم از پیکسلهای عکس رو به دست بیاری و بعد هم توی سلول های گرید بذاری (برای این کار بهتره که سطر و ستون نخست رید رو که به صورت ثابت هست، غیرفعال کنی و همچنین بعد از پایان یافتن هر خط از عکس که پیمایش شد؛ یه سر جدید به گریدویو Add کن)