با سلام
دوستان چطوری می تونم پیکسل های موجود در یک عکس رو بردارم بریزم توی یک ظرفی ؟
کسی شبه کدی داره؟ کدش چیه ؟ با تشکر
با سلام
دوستان چطوری می تونم پیکسل های موجود در یک عکس رو بردارم بریزم توی یک ظرفی ؟
کسی شبه کدی داره؟ کدش چیه ؟ با تشکر
تابع Getpixel
Public Declare Function GetPixel Lib "gdi32" Alias "GetPixel" (ByVal hdc As Long, ByVal x As Long, ByVal y
As Long) As Long
چطوری از این تابع استفاده کنم دوست من؟ مقدار RGB اون پیکسل رو چطوری نمایش بدم توی Text ?
Copile Error
Constants, Fixed -length, arrays .user -defined types and declare statements not allowes as public members of object modules
این Error رو میده برای چیه؟ میشه استفاده از این ماژول رو توی یه نمونه سورس توضیح بدین با تشکر
برای رفع ارور بالا Public رو تبدیل به Private کنید این هم مثالی از کارکرد این API:
دوست من می خوام پیکسل های عکسی که درون یک Picture box دارم رو بدست بیارم چطوری می تونم چنین کاری کنم؟ کد RGB رو چطوری می تونم برای هر پیکسل بدست بیارم؟
دوست من من کد هر پیکسل رو بدست آوردم کد پیکسل عکسی که داخل pictuer box هست رو.
حالا چطوری می تونم بوسیله دو تا حلقه for . همه ی پکسل های سطر و ستون رو بدست بیارم ؟
خودتون جواب خودتون رو دادید،به کمک دو تا حلقه For...
دوست من
من نمی دونم کجا باید این حلقه ها رو قرار بدم و به چه صورتی باید قرار بدم میشه کدم رو اصلاح کنید ؟ Code.zip
دوستان کسی کمک نمی تونه کنه؟
حلقه های 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 قرار بدید.
الگوریتم هایی که تاریخچه خود را فراموش می کنند، محکوم به تکرار آن هستند.
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
همش اجرا می کنم تا دکمه رو می زنم هنگ می کنه؟
به این خاطر که حلقه ها طولانی هستند. شما به جای Height و Width مقادیر تقریبی کوچکتری قرار بدید و کمی صبور باشید.
همچنین می تونید توی بدنه حلقه خارجی از DoEvents استفاده کنید.
الگوریتم هایی که تاریخچه خود را فراموش می کنند، محکوم به تکرار آن هستند.
اقا تا 100x100 پیکسل رو راحت نشون میده اما برای height و width عکس رو میدم به حلقه for . هنگ می کنه . چون خیلی فرایتد محاسبه اش زیاد میشه باید چیکار کنم که این فرایند رو کاهش بدیم؟ تا برنامه هنگ نکنه و بتونه نمام پیکسل ها و نمایش بده ؟
توی بدنه حلقه خارجی بنویسید DoEvents. جایی که متغیر Row داره خالی میشه.
الگوریتم هایی که تاریخچه خود را فراموش می کنند، محکوم به تکرار آن هستند.
ExtractRGBWithCopyMemory.zip
آقا اینو نگاه کن. من نمی دونم این DoEvent رو کجا قرار بدم. یه نگاه به کد بنداز. ببین پیشرفتم خوب بوده ؟
chi. DoEvent
DoEvent. مینویسم error میده ؟ قبلش نیاید متغییری بنویسم؟ مثلا Rom.DoEvent
Doevent رو هم میزارم کمی سرعت نمایش پیکسل ها بهتر میشه اما در کل بازم جواب کار رو نمیده. چرا باید از فایل kernel32 استفاده کنه؟ به نظر شما بخاطر اینکه مقدار RGB رو از این تابع فراخوانی میکنه اینقدر طول نمیکشه ؟ نمیشه اینو حذف کرد؟
به جای textbox از richtextbox استفاده کنم بهتر نیست ؟ توی تکست باکس چقدر متن جا می گیره ؟
آخرین ویرایش به وسیله xxxxx_xxxxx : شنبه 08 خرداد 1389 در 00:27 صبح دلیل: ادغام
در مورد DoEvents شما حرف s آخر رو جا انداخته بودید.
بله، به خاطر اینکه داره از تابع CopyMemory برای بدست آوردن مقادیر RGB استفاده میکنه.
چرا، می تونید اینو حذف کنید و خودتون این مقادیر رو محاسبه کنید:
https://barnamenevis.org/showpo...34&postcount=1
فکر نمی کنم فرقی داشته باشه. تا اینجا که با TextBox به مشکلی برخورد نکردید.
الگوریتم هایی که تاریخچه خود را فراموش می کنند، محکوم به تکرار آن هستند.
دوست من توی این تایپیک که تبدیل 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
باید چیکار کنم؟