January 26, 2021, 05:54:43 AM

Author Topic: [bmx] Color Module by fredborg [ 1+ years ago ]  (Read 508 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bmx] Color Module by fredborg [ 1+ years ago ]
« on: June 29, 2017, 12:28:38 AM »
Title : Color Module
Author : fredborg
Posted : 1+ years ago

Description : Make a folder "color" in the mod/pub/ directory and copy this there. It should be more or less self explanatory.

Code :
Code: BlitzMax
  1. SuperStrict
  2.  
  3. Module Pub.Color
  4.  
  5. ModuleInfo "Version: 1.00"
  6. ModuleInfo "Authors: Mikkel Fredborg"
  7. ModuleInfo "License: Public Domain"
  8.  
  9. Import BRL.Math
  10.  
  11. Type TColor
  12.        
  13.         Method toARGB:Int() Abstract
  14.                
  15. End Type
  16.  
  17. Type TColorHSV Extends TColor
  18.        
  19.         Field h:Float,s:Float,v:Float,a:Float=1.0
  20.        
  21.         Method toRGB:TColorRGB()
  22.  
  23.                 Local temph:Float = self.h
  24.                 Local temps:Float = self.s
  25.                 Local tempv:Float = self.v
  26.        
  27.                 Local rgb:TColorRGB = New TColorRGB
  28.        
  29.                 If temph=>360.0 Or temph<0.0 Then temph = 0.0
  30.        
  31.                 If temps = 0 Then
  32.                         rgb.r = v
  33.                         rgb.g = v
  34.                         rgb.b = v
  35.                 Else
  36.                         temph = temph / 60.0
  37.                        
  38.                         Local i:Int   = Floor(temph)
  39.                         Local f:Float = temph - i
  40.                         Local p:Float = tempv * (1 - temps)
  41.                         Local q:Float = tempv * (1 - temps * f)
  42.                         Local t:Float = tempv * (1 - temps * (1 - f))
  43.  
  44.                         Select i
  45.                                 Case 0
  46.                                         rgb.r = v
  47.                                         rgb.g = t
  48.                                         rgb.b = p
  49.                                 Case 1
  50.                                         rgb.r = q
  51.                                         rgb.g = v
  52.                                         rgb.b = p
  53.                                 Case 2
  54.                                         rgb.r = p
  55.                                         rgb.g = v
  56.                                         rgb.b = t
  57.                                 Case 3
  58.                                         rgb.r = p
  59.                                         rgb.g = q
  60.                                         rgb.b = v
  61.                                 Case 4
  62.                                         rgb.r = t
  63.                                         rgb.g = p
  64.                                         rgb.b = v
  65.                                 Default
  66.                                         rgb.r = v
  67.                                         rgb.g = p
  68.                                         rgb.b = q
  69.                         End Select             
  70.                 EndIf
  71.  
  72.                 rgb.a = a
  73.  
  74.                 Return rgb
  75.        
  76.         EndMethod
  77.        
  78.         Function fromARGB:TColorHSV(argb:Int)
  79.                
  80.                 Return TColorRGB.fromARGB(argb).toHSV()
  81.                
  82.         EndFunction
  83.        
  84.         Method toARGB:Int()
  85.                
  86.                 Return self.toRGB().toARGB()
  87.  
  88.         EndMethod
  89.        
  90. EndType
  91.  
  92. Type TColorRGB Extends TColor
  93.  
  94.         Field r:Float,g:Float,b:Float,a:Float=1.0
  95.        
  96.         Method toHSV:TColorHSV()
  97.                
  98.                 Local tempr:Float = Min(1.0,Max(0.0,self.r))
  99.                 Local tempg:Float = Min(1.0,Max(0.0,self.g))
  100.                 Local tempb:Float = Min(1.0,Max(0.0,self.b))
  101.  
  102.                 Local minVal:Float = Min(Min(tempr,tempg),tempb)
  103.                 Local maxVal:Float = Max(Max(tempr,tempg),tempb)
  104.                
  105.                 Local diff:Float = maxVal - minVal
  106.        
  107.                 Local hsv:TColorHSV = New TColorHSV
  108.                 hsv.v = maxVal
  109.        
  110.                 If maxVal = 0.0 Then
  111.                         hsv.s = 0.0
  112.                         hsv.h = 0.0
  113.                 Else
  114.                         hsv.s = diff / maxVal
  115.        
  116.                         If tempr = maxVal
  117.                                 hsv.h = (tempg - tempb) / diff
  118.                         ElseIf tempg = maxVal
  119.                                 hsv.h = 2.0 + (tempb - tempr) / diff
  120.                         Else
  121.                                 hsv.h = 4.0 + (tempr - tempg) / diff
  122.                         EndIf
  123.        
  124.                         hsv.h = hsv.h * 60.0
  125.                         If hsv.h < 0 Then hsv.h = hsv.h + 360.0
  126.                 EndIf
  127.  
  128.                 If hsv.h<  0.0 Then hsv.h = 0.0
  129.                 If hsv.h>360.0 Then hsv.h = 0.0
  130.                
  131.                 hsv.a = a
  132.                
  133.                 Return hsv
  134.                
  135.         EndMethod
  136.  
  137.         Function fromARGB:TColorRGB(argb:Int,alpha:Int=True)
  138.        
  139.                 Local rgb:TColorRGB = New TColorRGB
  140.        
  141.                 If alpha       
  142.                         rgb.a = ((argb Shr 24) & $FF)/255.0
  143.                 EndIf
  144.                
  145.                 rgb.r = ((argb Shr 16) & $FF)/255.0
  146.                 rgb.g = ((argb Shr 8) & $FF)/255.0
  147.                 rgb.b = (argb & $FF)/255.0
  148.        
  149.                 Return rgb
  150.                
  151.         EndFunction
  152.  
  153.         Function fromBGR:TColorRGB(argb:Int)
  154.        
  155.                 Local rgb:TColorRGB = New TColorRGB
  156.        
  157.                 rgb.r = (argb & $000000FF)/255.0
  158.                 rgb.g = ((argb Shr 8) & $000000FF)/255.0
  159.                 rgb.b = ((argb Shr 16) & $000000FF)/255.0
  160.        
  161.                 Return rgb
  162.                
  163.         EndFunction
  164.  
  165.         Method toARGB:Int()
  166.                
  167.                 Local tempr:Int = Min(255,Max(0,Int(self.r*255)))
  168.                 Local tempg:Int = Min(255,Max(0,Int(self.g*255)))
  169.                 Local tempb:Int = Min(255,Max(0,Int(self.b*255)))
  170.                 Local tempa:Int = Min(255,Max(0,Int(self.a*255)))
  171.                                                
  172.                 Return (tempa Shl 24) | (tempr Shl 16) | (tempg Shl 8) | tempb
  173.  
  174.         EndMethod
  175.        
  176. EndType


Comments :


Craig H. Nisbet(Posted 1+ years ago)

 When I try to compile this, I get a "Module does not match commandline Module"


tonyg(Posted 1+ years ago)

 You don't put modules in Pub any more. Create a directory in mods called 'fredborg' and change
Code: [Select]
Module Pub.Color to
Code: [Select]
Module fredborg.Color

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal