PDA

View Full Version : برداشتن pixel های یک عکس



ehsanocx
یک شنبه 02 خرداد 1389, 16:52 عصر
با سلام
دوستان چطوری می تونم پیکسل های موجود در یک عکس رو بردارم بریزم توی یک ظرفی ؟
کسی شبه کدی داره؟ کدش چیه ؟ با تشکر

aryasoft2872
یک شنبه 02 خرداد 1389, 17:59 عصر
تابع Getpixel


Public Declare Function GetPixel Lib "gdi32" Alias "GetPixel" (ByVal hdc As Long, ByVal x As Long, ByVal y
As Long) As Long

ehsanocx
یک شنبه 02 خرداد 1389, 19:14 عصر
تابع Getpixel


Public Declare Function GetPixel Lib "gdi32" Alias "GetPixel" (ByVal hdc As Long, ByVal x As Long, ByVal y
As Long) As Long



دوست من این کد رو کجا Paste کنم؟ توی صفحه کد Paste کردم قرمز شد چرا ؟
میشه این تیکه سورس رو به صورت برنامه بگذاری که بدونم چطوری کار می کنه یا راهنماییم کنی ؟ با تشکر

REZADG
یک شنبه 02 خرداد 1389, 19:22 عصر
دوست من این کد رو کجا Paste کنم؟ توی صفحه کد Paste کردم قرمز شد چرا ؟
میشه این تیکه سورس رو به صورت برنامه بگذاری که بدونم چطوری کار می کنه یا راهنماییم کنی ؟ با تشکر
برای این که کر دو تیکه شدی این تیکه ی پایینی رو به آخر سطر اول ببر و یه فاصله بده و در ضمن در قسمت جنرال برنامه پیست کن

ehsanocx
یک شنبه 02 خرداد 1389, 20:23 عصر
چطوری از این تابع استفاده کنم دوست من؟ مقدار RGB اون پیکسل رو چطوری نمایش بدم توی Text ?

ehsanocx
یک شنبه 02 خرداد 1389, 20:28 عصر
Copile Error
Constants, Fixed -length, arrays .user -defined types and declare statements not allowes as public members of object modules
این Error رو میده برای چیه؟ میشه استفاده از این ماژول رو توی یه نمونه سورس توضیح بدین با تشکر

aryasoft2872
دوشنبه 03 خرداد 1389, 16:48 عصر
برای رفع ارور بالا Public رو تبدیل به Private کنید این هم مثالی از کارکرد این API:

ehsanocx
دوشنبه 03 خرداد 1389, 17:41 عصر
دوست من می خوام پیکسل های عکسی که درون یک Picture box دارم رو بدست بیارم چطوری می تونم چنین کاری کنم؟ کد RGB رو چطوری می تونم برای هر پیکسل بدست بیارم؟

ehsanocx
دوشنبه 03 خرداد 1389, 17:55 عصر
دوست من من کد هر پیکسل رو بدست آوردم کد پیکسل عکسی که داخل pictuer box هست رو.

حالا چطوری می تونم بوسیله دو تا حلقه for . همه ی پکسل های سطر و ستون رو بدست بیارم ؟

aryasoft2872
دوشنبه 03 خرداد 1389, 19:25 عصر
خودتون جواب خودتون رو دادید،به کمک دو تا حلقه For...

ehsanocx
دوشنبه 03 خرداد 1389, 23:44 عصر
دوست من
من نمی دونم کجا باید این حلقه ها رو قرار بدم و به چه صورتی باید قرار بدم میشه کدم رو اصلاح کنید ؟ 49647

ehsanocx
چهارشنبه 05 خرداد 1389, 18:06 عصر
دوستان کسی کمک نمی تونه کنه؟

xxxxx_xxxxx
چهارشنبه 05 خرداد 1389, 23:47 عصر
حلقه های For یک چیزی تو این مابه ها میشه:


Dim i, j, x, y As Long
Dim Row As String
For i = 0 To picSource.Height
For j = 0 To picSource.Width
Row = Row & GetPixel(picSource.hDC, i, j) & " "
Next j
txtCodeBinery.Text = txtCodeBinery.Text & Row & vbCrLf
Row = ""
Next i


فقط باید خروجی تابع GetPixel رو به معادل RGB تبدیل کنید بعد توی متغیر Row قرار بدید.

ehsanocx
جمعه 07 خرداد 1389, 00:06 صبح
حلقه های For یک چیزی تو این مابه ها میشه:


Dim i, j, x, y As Long
Dim Row As String
For i = 0 To picSource.Height
For j = 0 To picSource.Width
Row = Row & GetPixel(picSource.hDC, i, j) & " "
Next j
txtCodeBinery.Text = txtCodeBinery.Text & Row & vbCrLf
Row = ""
Next i


فقط باید خروجی تابع GetPixel رو به معادل RGB تبدیل کنید بعد توی متغیر Row قرار بدید.



این کد ها رو توی یک دکمه می گذارم برنامه رو اجرا می کنم روی دکمه کلیک می کنم. برنامه هنگ می کنه؟

من منظورتون رو از این جمله اتون نفهمیدم

فقط باید خروجی تابع GetPixel رو به معادل RGB تبدیل کنید بعد توی متغیر Row قرار بدید

؟

ehsanocx
جمعه 07 خرداد 1389, 00:36 صبح
Private Sub CmdShowConvertBinery_Click()
Dim Red As Integer, Green As Integer, Blue As Integer
Dim i, j, x, y, ColorValue As Long
Dim Row As String
For i = 0 To picSource.Height
For j = 0 To picSource.Width
ColorValue = GetPixel(picSource.hDC, x, y)

'Extract red, green, blue color components.
Call ExtractRGBFromColor(ColorValue, Red, Green, Blue)

Row = Row & ColorValue

Next j
txtCodeBinery.Text = txtCodeBinery.Text & Row & vbCrLf
Row = ""
Next i

End Sub


همش اجرا می کنم تا دکمه رو می زنم هنگ می کنه؟

xxxxx_xxxxx
جمعه 07 خرداد 1389, 02:08 صبح
به این خاطر که حلقه ها طولانی هستند. شما به جای Height و Width مقادیر تقریبی کوچکتری قرار بدید و کمی صبور باشید.

همچنین می تونید توی بدنه حلقه خارجی از DoEvents استفاده کنید.

ehsanocx
جمعه 07 خرداد 1389, 20:44 عصر
اقا تا 100x100 پیکسل رو راحت نشون میده اما برای height و width عکس رو میدم به حلقه for . هنگ می کنه . چون خیلی فرایتد محاسبه اش زیاد میشه باید چیکار کنم که این فرایند رو کاهش بدیم؟ تا برنامه هنگ نکنه و بتونه نمام پیکسل ها و نمایش بده ؟

xxxxx_xxxxx
جمعه 07 خرداد 1389, 20:56 عصر
توی بدنه حلقه خارجی بنویسید DoEvents. جایی که متغیر Row داره خالی میشه.

ehsanocx
جمعه 07 خرداد 1389, 21:55 عصر
49918

آقا اینو نگاه کن. من نمی دونم این DoEvent رو کجا قرار بدم. یه نگاه به کد بنداز. ببین پیشرفتم خوب بوده ؟

ehsanocx
جمعه 07 خرداد 1389, 22:00 عصر
chi. DoEvent
DoEvent. مینویسم error میده ؟ قبلش نیاید متغییری بنویسم؟ مثلا Rom.DoEvent

ehsanocx
جمعه 07 خرداد 1389, 22:19 عصر
Doevent رو هم میزارم کمی سرعت نمایش پیکسل ها بهتر میشه اما در کل بازم جواب کار رو نمیده. چرا باید از فایل kernel32 استفاده کنه؟ به نظر شما بخاطر اینکه مقدار RGB رو از این تابع فراخوانی میکنه اینقدر طول نمیکشه ؟ نمیشه اینو حذف کرد؟

به جای textbox از richtextbox استفاده کنم بهتر نیست ؟ توی تکست باکس چقدر متن جا می گیره ؟

xxxxx_xxxxx
شنبه 08 خرداد 1389, 00:27 صبح
در مورد DoEvents شما حرف s آخر رو جا انداخته بودید.

چرا باید از فایل kernel32 استفاده کنه؟ به نظر شما بخاطر اینکه مقدار RGB رو از این تابع فراخوانی میکنه اینقدر طول نمیکشه ؟ نمیشه اینو حذف کرد؟
بله، به خاطر اینکه داره از تابع CopyMemory برای بدست آوردن مقادیر RGB استفاده میکنه.
چرا، می تونید اینو حذف کنید و خودتون این مقادیر رو محاسبه کنید:
http://barnamenevis.org/forum/showpost.php?p=791034&postcount=1

به جای textbox از richtextbox استفاده کنم بهتر نیست ؟ توی تکست باکس چقدر متن جا می گیره ؟
فکر نمی کنم فرقی داشته باشه. تا اینجا که با TextBox به مشکلی برخورد نکردید.

ehsanocx
شنبه 08 خرداد 1389, 16:32 عصر
دوست من توی این تایپیک که تبدیل RGB به Long نیست که. این رو میزارم جواب نمی ده
Private Sub LngToRGB(LCul As Long, R As Byte, G As Byte, B As Byte)
R = LCul And &HFF&
G = (LCul And &HFF00&) \ &H100&
B = (LCul And &HFF0000) \ &H10000
End Sub

باید چیکار کنم؟