forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   FAQ и уроки (http://forum.boolean.name/forumdisplay.php?f=110)
-   -   небольшая проблема для меня;) (http://forum.boolean.name/showthread.php?t=16924)

ddlabuze 18.06.2012 23:30

небольшая проблема для меня;)
 
Привет, Что такое обратная функция для HEX Я не нашел. спасибо

Nerd 19.06.2012 01:27

Ответ: небольшая проблема для меня;)
 
Hex - это перевод в шестнадцатиричную систему исчесления. Гугли Hex2Dec (если я правильно понял, тебе нужен перевод из _16 в _10)

moka 19.06.2012 01:46

Ответ: небольшая проблема для меня;)
 
Проблема то для тебя.. Похвастался так?

Тебе нужно как посоветовали, разобраться что такое шестнадцатеричная система исчисления, и научиться переводить в десятеричную.
Как понимаю это тебе нужно для конвертации HEX цвета в RGB?

ddlabuze 19.06.2012 02:11

Ответ: небольшая проблема для меня;)
 
да
если имеется простой способ.
или я должен сделать функцию с 16 случаями.

moka 19.06.2012 02:47

Ответ: небольшая проблема для меня;)
 
А вы русский учите? Или ещё рано в школе?

ссылка

ddlabuze 19.06.2012 03:11

Ответ: небольшая проблема для меня;)
 
Русский язык очень труден для меня.

ABTOMAT 19.06.2012 03:25

Ответ: небольшая проблема для меня;)
 
Цитата:

Print "$FF".ToInt()
Эх жалко в Blitz3D такого не было)

ddlabuze 19.06.2012 03:29

Ответ: небольшая проблема для меня;)
 
браво и спасибо

C ' был настолько прост ;)

Черный крыс 19.06.2012 14:21

Ответ: небольшая проблема для меня;)
 
Ну раз уж такая пьянка пошла...

Код:


SuperStrict

Module api.color

ModuleInfo "Version: 1.3"
ModuleInfo "Author: Albert G."
ModuleInfo "License: LGPL"
ModuleInfo "Copyright: Dynamic bytes"
ModuleInfo "Modserver: API"

ModuleInfo "History: 1.3 Release"
ModuleInfo "History: Added TColor component"
ModuleInfo "History: 1.2 Release"
ModuleInfo "History: Added Hex2RGB()"
ModuleInfo "History: 1.1 Release"
ModuleInfo "History: Added RGB2HSB()"
ModuleInfo "History: Added HSB2RGB()"
ModuleInfo "History: 1.0 Release"
ModuleInfo "History: Initial release"

Import brl.math

Private

Function Hex:String(val:Int)
        Local buf:Short[8]
        For Local k:Int = 7 To 0 Step - 1
                Local n:Int = (val & 15) + Asc("0")
                If n > Asc("9") n = n + (Asc("A") - Asc("9") - 1)
                buf[k] = n
                val:Shr 4
        Next
        Return String.FromShorts(buf, 8)
End Function

Function GetValue:Int(v:String, no:Int)
        Select v
                Case "A" Return 10
                Case "B" Return 11
                Case "C" Return 12
                Case "D" Return 13
                Case "E" Return 14
                Case "F" Return 15
                Default Return no
        End Select
End Function

Public

Type TRGB
        Field r:Byte
        Field g:Byte
        Field b:Byte
       
End Type

Type TARGB Extends TRGB
       
End Type

Type THSB Extends TRGB
       
End Type

rem

Type THSB
        Field h:Float = 0.0
        Field s:Float = 0.0
        Field b:Float = 0.0
       
        Method SetRGB(RGB:TRGB)
                Local hsb:THSB = RGB.GetHSB()
                h = hsb.h
                s = hsb.s
                b = hsb.b
        End Method
       
        Method GetRGB:TRGB()
                Local RGB:TRGB = New TRGB
                RGB.SetHSB(Self)
                Return RGB
        End Method
       
        Method SetInt(value:Int)
                Local RGB:TRGB = New TRGB
                RGB.SetInt(value)
                Local hsb:THSB = RGB.GetHSB()
                h = hsb.h
                s = hsb.s
                b = hsb.b
        End Method
       
        Method GetInt:Int()
                Local RGB:TRGB = New TRGB
                RGB.SetHSB(Self)
                Return RGB.GetInt()
        End Method
       
        Method SetHex(value:String)
                Local RGB:TRGB = New TRGB
                RGB.SetHex(value)
                Local hsb:THSB = RGB.GetHSB()
                h = hsb.h
                s = hsb.s
                b = hsb.b
        End Method
       
        Method GetHex:String()
                Local RGB:TRGB = New TRGB
                RGB.SetHSB(Self)
                Return RGB.GetHex()
        End Method
End Type

Type TRGB
        Field r:Byte = 255
        Field g:Byte = 255
        Field b:Byte = 255
       
        Method SetInt(value:Int)
                r = (value Shr 16) & $FF
                g = (value Shr 8) & $FF
                b = value & $FF
        End Method
       
        Method GetInt:Int()
                Return Int Ptr(Varptr r)[0]
        End Method
       
        Method SetHex(value:String)
                value = value.ToUpper()
                If value.Length < 8 Then value = "00" + value
                If value.Length < 8 Then Return
               
                Local v1:String, v1no:Int, v2:String, v2no:Int
               
                v1 = value[3..4]
                v1no = GetValue(v1, Int(v1))
                v2 = value[2..3]
                v2no = GetValue(v2, Int(v2)) * 16
               
                r = v2no + v1no
               
                v1 = value[5..6]
                v1no = GetValue(v1, Int(v1))
                v2 = value[4..5]
                v2no = GetValue(v2, Int(v2)) * 16
               
                g = v2no + v1no
               
                v1 = value[7..]
                v1no = GetValue(v1, Int(v1))
                v2 = value[6..7]
                v2no = GetValue(v2, Int(v2)) * 16
               
                b = v2no + v1no
        End Method
       
        Method GetHex:String()
                Return Hex(GetInt())
        End Method
       
        Method SetHSB(hsb:THSB)
                Local i:Float, f:Float, p:Float, q:Float, t:Float, r_:Float, g_:Float, b_:Float
                If hsb.s = 0.0
                        r_ = hsb.b * 255.0
                        g_ = r_
                        b_ = g_
                Else
                        Local hue:Float = hsb.h / 60.0
                        i = Floor(hue)
                        f = hue - i
                        p = hsb.b * (1.0 - hsb.s)
                        q = hsb.b * (1.0 - hsb.s * f)
                        t = hsb.b * (1.0 - hsb.s * (1.0 - f))
                        Select i
                                Case 0
                                        r_ = hsb.b
                                        g_ = t
                                        b_ = p
                                Case 1
                                        r_ = q
                                        g_ = hsb.b
                                        b_ = p
                                Case 2
                                        r_ = p
                                        g_ = hsb.b
                                        b_ = t
                                Case 3
                                        r_ = p
                                        g_ = hsb.b
                                        b_ = q
                                Case 4
                                        r_ = t
                                        g_ = hsb.b
                                        b_ = p
                                Default
                                        r_ = hsb.b
                                        g_ = p
                                        b_ = q
                        End Select
                        r_:*255.0
                        g_:*255.0
                        b_:*255.0
                End If
                r = Max(Min(r_, 0.0), 255.0)
                g = Max(Min(g_, 0.0), 255.0)
                b = Max(Min(b_, 0.0), 255.0)
        End Method
       
        Method GetHSB:THSB()
                Local hsb:THSB = New THSB
                Local m_min:Byte = Min(Min(r, g), b)
                Local m_max:Byte = Max(Max(r, g), b)
                Local delta:Byte = m_max - m_min
                If m_max <> 0
                        hsb.s = Float(delta) / Float(m_max)
                        hsb.b = Float(m_max) / 255.0
                        If delta <> 0
                                If r = m_max
                                        hsb.h = Float(g - b) / Float(delta)
                                ElseIf g = m_max
                                        hsb.h = 2 + (Float(b - r) / Float(delta))
                                Else
                                        hsb.h = 4 + (Float(r - g) / Float(delta))
                                EndIf
                                hsb.h:*60.0
                                If hsb.h < 0.0 Then hsb.h:+360.0
                                Return hsb
                        End If
                End If
        End Method
End Type

Type TARGB Extends TRGB
        Field a:Byte = 255
       
        Method SetInt(value:Int)
                a = (value Shr 24) & $FF
                Super.SetInt(value)
        End Method
       
        Method SetHex(value:String)
                value = value.ToUpper()
                If value.Length < 8 Then Return
                Local a1:String = value[1..2]
                Local a1no:Int = GetValue(a1, Int(a1))
                Local a2:String = value[..1]
                Local a2no:Int = GetValue(a2, Int(a2)) * 16
                a = a2no + a1no
                Super.SetHex(value)
        End Method
End Type


ddlabuze 22.06.2012 00:47

Ответ: небольшая проблема для меня;)
 
спасибо *-*

Dzirt 23.06.2012 15:14

Ответ: небольшая проблема для меня;)
 
Перенесите тему плиз.

ABTOMAT 23.06.2012 17:02

Ответ: небольшая проблема для меня;)
 
Цитата:

Сообщение от Dzirt (Сообщение 231208)
Перенесите тему плиз.

Куда, зачем?


Часовой пояс GMT +4, время: 11:23.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot