PDA

View Full Version : تبدیل یک تصویر به پیکسل



sara_t
دوشنبه 16 اسفند 1389, 16:32 عصر
سلام دوستان عزیز
من میخام یه تصویر سیاه و سفید رو بصورت پیکسل در بیارم یعنی مثلا یه گل داریم این گل بصورت پیکسل به پیکسل نمایش داده بشه.
میشه لطف کنید بگید چطور میتونم اینکار رو انجام بدم؟

jooker
دوشنبه 16 اسفند 1389, 20:27 عصر
با سلام. خوب خود عکس از مجموعه ای ایز پیکسل که کنار هم قرار گرفتن تشکیل شده دیگه. ولی اگه منظورت اینه که چه جوری میتونی به اطلاعات یه پیکسل دسترسی پیدا کنی باید بگم که:

با استفاده از متد Point(x,y)l میتونین رنگ پیکسل در مختصات x و y رو بخوننین. حالا میتونین این رنگ رو با متد Pset(x,y),color تو مختصات x و y توی کنترل picture box کپی کنی.

به عنوان مثال که بهتر بگیری دوتا کنترل Picture box بیار رو فرم عکس مورد نظرت رو لود کن تو کنترل عکس یک و کنترل عکس دو خالی باشه. بعد خاصیت ScaleMode فرم، کنترل عکس یک و کنترل عکس دو رو برابر pixel قرار بده.

بعد یه کنترل Button هم قرار بده و داخل ایونت کلیک کد زیر رو بنویس:
For i = 0 To Me.Picture1.Width
For j = 0 To Me.Picture1.Height
DoEvents
Me.Picture2.PSet (i, j), Me.Picture1.Point(i, j)
Next
Next

بیشتر بدانیم:
اگه جای i و j رو تو کنترل عکس دو یا یک عوض کنیم عکس برعکس میشه. و خیلی کارای دیگه که میشه از این طریق انجام داد. مثلا بزرگ کردن کوچیک کردن و ...

sara_t
سه شنبه 17 اسفند 1389, 06:39 صبح
بسیار ممنون
میشه لطفا یه منبع بدید که نکته بیشتر بدانیم رو بیشتر بخونم. خیلی برام جالب بود.ممنون

jooker
سه شنبه 17 اسفند 1389, 20:43 عصر
با سلام.

والا منبع مشخصی ندارم ولی با یکم خلاقیت میتوننین اینکارها رو انجام بدین مثلا برای کوچیک کردن عکس(1/2 عکس) میتونین از کد زیر استفاده کنید:

Private Sub Command1_Click()
Dim i2 As Integer
Dim j2 As Integer
i2 = 0
j2 = 0
Me.Picture2.Height = Me.Picture1.Height / 2
Me.Picture2.Width = Me.Picture1.Width / 2
For i = 0 To Me.Picture1.Width
j2 = 0
If i Mod 2 = 0 Then
For j = 0 To Me.Picture1.Height
If j Mod 2 = 0 Then
Me.Picture2.PSet (i2, j2), Me.Picture1.Point(i, j)
j2 = j2 + 1
End If
Next
i2 = i2 + 1
End If
Next
End Sub

یا برای بزرگ کردن عکس (دو برابر کردن) میتونی از کد زیر استفاده کنی:

Private Sub Command2_Click()
Dim i2 As Integer
Dim j2 As Integer

i2 = 0
j2 = 0
For i = 0 To Me.Picture1.Width
j2 = 0
For j = 0 To Me.Picture1.Height
Dim Color As Long
Color = Me.Picture1.Point(i, j)
Me.Picture2.PSet (i2, j2), Color
Me.Picture2.PSet (i2 + 1, j2), Color
Me.Picture2.PSet (i2, j2 + 1), Color
Me.Picture2.PSet (i2 + 1, j2 + 1), Color
j2 = j2 + 2
Next
i2 = i2 + 2
Next
End Sub


برنامش رو هم براتون آماده کردم دانلود کنید.

البته این کارا رو میشه با Image Box انجام داد(به راحتی) ولی حسن انجام اینکار به صورت دستی اینه که باعث میشه ما به راحتی بتونیم روی پیکسلها مانور بدیم. ایناهایی که من گفتم خیلی کار برد نداره ولی برای شروع کار با پیکسله خوبه.
مثلا یکی از کاربردهای کار با پیکسل تشخیص لبه تصویره. نمیدونم تا حالا اون اسکرین سیور رو دیدین که وقتی فعال میشه صفحه دسکتاپ میاد و برف شروع به باریدن میکنه. تا اینجاش راحته ولی نکته ای که داره اینه که برف دقیقا لبه عکس پس زمینه دسکتاپ رو تشخیص میده و برف اون قسمت نسبت به جای دیگه بیشتر میسینه. مثلا اگه عکس پس زمینه ما یه سیب باشه روی سیب بیشتر برف داره تا کناره های سیب.

با یکم خلاقیت حتی میتونین فلترهای فتوشاپ رو شبیه سازی کنین(میدونم سخته ولی قابل انجامه مثلا من خودم تشخیص لبه تصویر رو نوشتم که یکی از فیلترهای فتوشاپ محسوب میشه اگه خواستین بگین تا الگوریتمش رو توضیح بدم)
67261