رفتن به مطلب
  • 0

چگونگی تبدیل خروجی GetPixel(x,y) به سه عدد مربوط به rgb


stm32

سوال

سلام دوستان من با GetPixel(x,y) رنگ پیکسل یک نقطه خاص را میخونم عدد خروجی بصورت یک عدد منفی هست ولی میخوام خروجی عدد رنگ بصورت سه تا عدد هشت بیتی 0 تا 255 مربوط به کد رنگهای ابی و قر مز و سبز باشه چطور میتونم از اون عدد منفی سه تا رنگ را استخراج کنم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

4 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

امیدوارم که بدردتون بخوره

چگونگی عملکره هم بسیار ساده هستش.

موفق تر باشید

 

Sub Process_Globals
   Type clr(a As Int, r As Int, g As Int, b As Int)
   Dim cols As clr
End Sub


SplitColors(thisColor)
a = cols.a
r = cols.r
g = cols.g
b = cols.b

Sub SplitColors(x As Long)
   cols.Initialize
   Dim a, r, g, b As Int
   Dim a0, r0, g0 As Long
   cols.a = Floor(x / Power(2,24))
   r0 = x Mod Power(2,24)
   cols.r = Floor(r0 / Power(2,16))
   g1 = r0 Mod Power(2,16)
   cols.g = Floor(g0 / Power(2,8))
   cols.b = cols.g Mod Power(2,8)
End Sub

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

  1. در 16 ساعت قبل، mohammad-alone گفته است :

    امیدوارم که بدردتون بخوره

    چگونگی عملکره هم بسیار ساده هستش.

    موفق تر باشید

     

    
    Sub Process_Globals
       Type clr(a As Int, r As Int, g As Int, b As Int)
       Dim cols As clr
    End Sub
    
    
    SplitColors(thisColor)
    a = cols.a
    r = cols.r
    g = cols.g
    b = cols.b
    
    Sub SplitColors(x As Long)
       cols.Initialize
       Dim a, r, g, b As Int
       Dim a0, r0, g0 As Long
       cols.a = Floor(x / Power(2,24))
       r0 = x Mod Power(2,24)
       cols.r = Floor(r0 / Power(2,16))
       g1 = r0 Mod Power(2,16)
       cols.g = Floor(g0 / Power(2,8))
       cols.b = cols.g Mod Power(2,8)
    End Sub

     

    خیلی ممنون نه متاسفانه جواب نداد خطا داد اون خطی را هم که خطا داد برداشتم اون اعداد دیگه اشتباه میده ببینید من یک عدد منفی رنگ دارم میخوام سه تا رنگ ابی و قرمز و سبز را ازش استخراج کنم همین

لینک ارسال
به اشتراک گذاری در سایت های دیگر

این کد Erel واسه این کار

Sub Activity_Create(FirstTime As Boolean)
    Dim argb() As Int
    argb = GetARGB(Colors.Transparent)
    Log("A = " & argb(0))
    Log("R = " & argb(1))
    Log("G = " & argb(2))
    Log("B = " & argb(3))
End Sub

Sub GetARGB(Color As Int) As Int()
    Dim res(4) As Int
    res(0) = Bit.UnsignedShiftRight(Bit.And(Color, 0xff000000), 24)
    res(1) = Bit.UnsignedShiftRight(Bit.And(Color, 0xff0000), 16)
    res(2) = Bit.UnsignedShiftRight(Bit.And(Color, 0xff00), 8)
    res(3) = Bit.And(Color, 0xff)
    Return res
End Sub

B4X - Rapid Application Development tools for Android, iOS and desktop applications

«موفق باشید.»

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 31 دقیقه قبل، امین مهدینژاد گفته است :

این کد Erel واسه این کار


Sub Activity_Create(FirstTime As Boolean)
    Dim argb() As Int
    argb = GetARGB(Colors.Transparent)
    Log("A = " & argb(0))
    Log("R = " & argb(1))
    Log("G = " & argb(2))
    Log("B = " & argb(3))
End Sub

Sub GetARGB(Color As Int) As Int()
    Dim res(4) As Int
    res(0) = Bit.UnsignedShiftRight(Bit.And(Color, 0xff000000), 24)
    res(1) = Bit.UnsignedShiftRight(Bit.And(Color, 0xff0000), 16)
    res(2) = Bit.UnsignedShiftRight(Bit.And(Color, 0xff00), 8)
    res(3) = Bit.And(Color, 0xff)
    Return res
End Sub

B4X - Rapid Application Development tools for Android, iOS and desktop applications

«موفق باشید.»

خیلی ممنون همشهری همین جواب داد 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...