PDA

View Full Version : وارد کردن یک تصویر در یک ماتریس



p30rex
چهارشنبه 17 فروردین 1390, 16:19 عصر
سلام
میخواستم بدونم تو vb چطور میشه یک تصویر رو وارد یک ماتریس کرد؟
یعنی یک ماتریس n*m که کد رنگ هر پیکسل تصویر یک درایه ماتریسه

پیشاپیش از راهنمایی هاتون ممنونم

quiet_programmer
پنج شنبه 18 فروردین 1390, 14:35 عصر
با سلام.

DoEvents
For i = 0 To Me.Picture1.Width
For j = 0 To Me.Picture1.Height
Array(i,j)=Me.Picture1.Point(i, j)
Next
Next

فقط حواست باشه برای اینکه سریعتر به نتیجه برسی Scale mode فرم و Picture1 رو برابر Pixel قرار بده.

p30rex
شنبه 20 فروردین 1390, 06:25 صبح
ممنون ولی النکه ماتریس نیست!
تواین خط هم ارور میده Array(i,j)=Me.Picture1.Point(i, j)
میدونید من میخوام چیکار کنم:
میخوام تصویر وارد یک ماتریس بشه بعد تمام درایه های ماتریس رو تغییر بدم تا رنگ تصویر عوض بشه مثلا سیاه سفید بشه
مثلا کد زیر برای کامپونت video ocx که از تصویر وبکم یه عکس میگیره بعد به اون یک افکت میده
حالا من میخوام این کاررو به همین طریق روی تصویر انجام بدم

Private Sub Capture_Click()
Dim matrix As Variant
Dim x As Integer
Dim y As Integer
Dim i As Integer

' Capture one image
VideoOCX1.Capture (m_Image)
' Get access to the image pixel matrix
matrix = VideoOCX1.GetMatrix(m_Image)

' Simple example : Invert the colors of our image
For y = 0 To VideoOCX1.GetHeight - 1
For x = 0 To VideoOCX1.GetWidth - 1
matrix(x, y, 0) = 255 - matrix(x, y, 0)
matrix(x, y, 1) = 255 - matrix(x, y, 1)
matrix(x, y, 2) = 255 - matrix(x, y, 2)
Next x
Next y

' Very important : Release the matrix and update the image handle
VideoOCX1.ReleaseMatrixToImageHandle m_Image
' Display the processing result in our own window
Image1 = VideoOCX1.ToPicture(m_Image)

End Sub

quiet_programmer
شنبه 20 فروردین 1390, 12:14 عصر
با سلام.


ممنون ولی النکه ماتریس نیست!میشه بگین ماتریس رو چی تعریف میکننین؟


تواین خط هم ارور میده خوب Array کلمه رزرو شده بوده. منم اطلاع نداشتم اگه اسمش رو تغییر بدی مشکل حل میشه.
مثلا:
اول تعریفش کن:
dim Arr(Width,Height) as Long
به جای Width عرض عکست رو بدست بیار و بجاش اون عددد رو قرار بده
به جای Height هم ارتفاع عکس رو بدست بیار و بجاش اون عدد رو قرار بده.
بعد خطی که Error داشت رو با خط زیر عوض کن:
Arr(i,j)=Me.Picture1.Point(i, j)

الان دقیقا یه ماتریس داری که رنگ pixel به pixel عکس تو اون ذخیره شده باور نداری؟ میتونی دوباره اطلاعات ماتریست رو داخل یه picture box دیگه با متد pset بنویسی تا باورت بشه.

DoEvents
For i = 0 To Me.Picture1.Width
For j = 0 To Me.Picture1.Height
Me.Picture2.PSet (i, j), arr(i, j)
Next
Next

فقط حواست باشه که متغیر arr رو بصورت سراسری تعریف کنی.

M.T.P
شنبه 20 فروردین 1390, 15:51 عصر
پست 466 از لینک زیر رو ببین.
شاید بتونه کمکتون کنه...
توسط GetDIBits میتونید تمامی پیکسل های تصویر رو تو یه آرایه بریزید.

http://barnamenevis.org/showthread.php?81542-%D8%A2%D8%B1%D8%B4%DB%8C%D9%88-%D8%B3%D9%88%D8%B1%D8%B3-%D9%87%D8%A7%DB%8C-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF%DB%8C-%D9%88-%D8%A8%D8%AF%D8%B1%D8%AF%D8%A8%D8%AE%D9%88%D8%B1&p=1243723#post1243723