Advertisement
here2share

ColorConverter.py

Mar 19th, 2016
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. """
  2. ColorConverter.py
  3.  
  4. Convert 0xRRGGBB to (RR, GG, BB)
  5.          (RR, GG, BB) to 0xRRGGBB
  6.          0xRRGGBB to PIL Color
  7.          (RR, GG, BB) to PIL Color
  8.          PIL Color to 0xRRGGBB
  9.          PIL Color to (RR, GG, BB)
  10.  
  11. """
  12.  
  13. __program__ = 'ColorConverter'
  14. __version__ = '1.0'
  15. __author__ = 'lnosKHEN'
  16. __desc__ = 'Convert color codes into different format RGB Color, Hex Color & PIL Color.'
  17. __credits__ = ["PD PyProgrammers",
  18.                "shadow_chaser",
  19.                "monster_of_zeus",
  20.                "stefanblack",
  21.                "Ak0ztik",
  22.                "Spoke",
  23.                "pentagon09",
  24.                "akira94",
  25.                "wazulu",
  26.                "and to all Members"]
  27. __date__ = '04/07/12'
  28. __url__ = ['PinoyDen.com.ph',
  29.           'Pyoneers.wapka.mobi']
  30.  
  31. import e32
  32. import appuifw
  33. import globalui
  34. from graphics import *
  35. from sysinfo import display_pixels
  36.  
  37.  
  38. class ColorConverter:
  39.     def __init__(self):
  40.         self.rgb_color = []
  41.         self.saved = 0
  42.         self.default = 0
  43.         self.sfStats = None
  44.         self.ssStats = None
  45.         self.pixels = display_pixels()
  46.         self.script_lock = e32.Ao_lock()
  47.  
  48.     def main(self):
  49.         self.old_s = appuifw.app.screen
  50.         self.old_b = appuifw.app.body
  51.         self.scrn=Image.new((360,640))
  52.         self.c = appuifw.Canvas()
  53.         appuifw.app.body = self.c
  54.         appuifw.app.directional_pad = False
  55.         self.c.blit(self.scrn)
  56.         self.c.clear(0)
  57.         self.main_scrn()
  58.         self.script_lock.wait()
  59.  
  60.     def main_scrn(self):
  61.         def handle_redraw(rect):
  62.             self.c.blit(self.scrn)
  63.             self.c.clear(0)
  64.             self.c.rectangle((6, 23, 360-6, 45), 0x396994, fill = 0x222222)
  65.             self.c.rectangle((6, 27, 360-6, 70), 0x396994, fill = 0x111111)
  66.             self.c.rectangle((6, 74, 360-6, 175), 0xFFD342, fill = 0x111111)
  67.             self.c.rectangle((8, 101, 360-8, 167), 0x0000ff, fill = 0x444444)
  68.             self.c.rectangle((10, 103, 360-10, 123), 0, fill = 0x104D63)
  69.             self.c.rectangle((10, 124, 360-10, 144), 0, fill = 0x104D63)
  70.             self.c.rectangle((10, 145, 360-10, 165), 0, fill = 0x104D63)
  71.             self.c.rectangle((6, 180, 360-6, 218), 0x396994, fill = 0x111111)
  72.             self.c.text((20, 38), u'Color Converter v1.0', 0x00FF00, font = 'title')
  73.             self.c.text((20, 62), u'Convert color into 3 formats', 0x00fff0, font = 'legend')
  74.             self.c.text((13, 95), u'3 Different Formats:', 0x00fff0, font = 'legend')
  75.             self.c.text((23, 117), u'RGB Color', 0xffffff, font = 'legend')
  76.             self.c.text((23, 137), u'Hex Color', 0xffffff, font = 'legend')
  77.             self.c.text((23, 158), u'PIL Color', 0xffffff, font = 'legend')
  78.             self.c.text((23, 195), u'Developed by:', 0x396994, font = 'legend')
  79.             self.c.text((180, 195), u'lnosKHEN', 0xFFD342, font = 'legend')
  80.  
  81.         appuifw.app.screen = 'large'
  82.         self.c = appuifw.Canvas(redraw_callback = handle_redraw)
  83.         appuifw.app.body = self.c
  84.         appuifw.app.directional_pad = False
  85.         e32.ao_yield()
  86.         appuifw.app.menu = [
  87.             (u"Convert..",
  88.               ((u"RGB Color", self.cRGB),
  89.                (u"Hex Color", self.cHC),
  90.                (u"PIL Color", self.cPC))),
  91.             (u"Help", self.help),
  92.             (u"About", self.about),
  93.             (u"Exit", self.quit)]
  94.         appuifw.app.exit_key_handler = self.quit
  95.  
  96.     def r_scrn(self):
  97.         def handle_redraw(rect):
  98.             self.c.blit(self.scrn)
  99.             self.c.clear(0)
  100.             self.c.rectangle((6, 23, 360-6, 45), 0x396994, fill = 0x222222)
  101.             self.c.rectangle((6, 27, 360-6, 70), 0x396994, fill = 0x111111)
  102.             self.c.rectangle((6, 74, 360-6, 155), 0xFFD342, fill = 0)
  103.             self.c.rectangle((10, 90, 360-10, 90), 0x333333, fill = self.default)
  104.             self.c.rectangle((6, 180, 360-6, 218), 0x396994, fill = 0x111111)
  105.             self.c.text((20, 38), u'Color Converter v1.0', 0x00FF00, font = 'title')
  106.             self.c.text((20, 62), u'Color Results:', 0x00fff0, font = 'legend')
  107.             self.c.text((40, 115), self.sfStats, 0x84AAA5, font = 'legend')
  108.             self.c.text((40, 135), self.ssStats, 0x84AAA5, font = 'legend')
  109.             self.c.text((23, 195), u'Developed by:', 0x396994, font = 'legend')
  110.             self.c.text((180, 195), u'lnosKHEN', 0xFFD342, font = 'legend')
  111.  
  112.         appuifw.app.screen = 'large'
  113.         self.c = appuifw.Canvas(redraw_callback = handle_redraw)
  114.         appuifw.app.body = self.c
  115.         appuifw.app.directional_pad = False
  116.         e32.ao_yield()
  117.  
  118.     def RGBForm(self):
  119.         RGBMnu = [
  120.             (u'RR - Red (0-255)', \
  121.              'number', 0),
  122.             (u'GG - Green (0-255)', \
  123.              'number', 0),
  124.             (u'BB - Blue (0-255)', \
  125.              'number', 0)]
  126.  
  127.         flags = appuifw.FFormEditModeOnly | appuifw.FFormDoubleSpaced
  128.         clr=appuifw.Form(RGBMnu, flags)
  129.         clr.save_hook = self.save
  130.         clr.execute()
  131.  
  132.         if self.saved == 1:
  133.             if clr[0][2] > 255 or clr[1][2] > 255 or clr[2][2] > 255:
  134.                 appuifw.note(u'RGB Range: 0-255 only!', 'error')
  135.                 return None
  136.             Red = clr[0][2]
  137.             Green = clr[1][2]
  138.             Blue = clr[2][2]
  139.             return Red, Green, Blue
  140.         return None
  141.  
  142.     def save(self, sav):
  143.         self.saved = 1
  144.         return 1
  145.  
  146.     def cRGB(self):
  147.         mmenu = [u'Hex Color', u'PIL Color']
  148.         ccolor = appuifw.popup_menu(mmenu, u"Convert into:")
  149.         if ccolor == 0:
  150.             '''
  151.             appuifw.app.screen = \
  152.                 self.old_s
  153.             appuifw.app.body = \
  154.                 self.old_b
  155.             '''
  156.             RGB = self.RGBForm()
  157.             self.main_scrn()
  158.             if RGB is None or RGB is 0:
  159.                 return None
  160.             nHex = self.RGB_Hex(RGB)
  161.             appuifw.query(u'(%d, %d, %d) in Hex Color:' %(RGB), 'text', nHex)
  162.             self.default = self.Hex_RGB(nHex)
  163.             self.sfStats = u'RGB Color: ' +str(RGB).replace('L', '')
  164.             self.ssStats = u'Hex Color: ' +nHex
  165.             self.r_scrn()
  166.         if ccolor == 1:
  167.             '''
  168.             appuifw.app.screen = \
  169.                 self.old_s
  170.             appuifw.app.body = \
  171.                 self.old_b
  172.             '''
  173.             RGB = self.RGBForm()
  174.             self.main_scrn()
  175.             if RGB is None:
  176.                 return None
  177.             nPIL = self.RGB_PIL(RGB)
  178.             appuifw.query(u'(%d, %d, %d) in PIL Color:' %(RGB), 'text', nPIL)
  179.             self.default = self.PIL_RGB(nPIL)
  180.             self.sfStats = u'RGB Color: ' +str(RGB).replace('L', '')
  181.             self.ssStats = u'PIL Color: ' +nPIL
  182.             self.r_scrn()
  183.  
  184.     def cHC(self):
  185.         mmenu = [u'RGB Color', u'PIL Color']
  186.         ccolor = appuifw.popup_menu(mmenu, u"Convert into:")
  187.         if ccolor == 0:
  188.             hxc = appuifw.query(u'Hex Color:\n(0xXXXXXX or #XXXXXX):', 'text', u'0x')
  189.             if hxc is None:
  190.                 return None
  191.             nRGB = self.Hex_RGB(hxc)
  192.             if nRGB is None:
  193.                 return None
  194.             appuifw.query(u'%s in RGB Color:' %hxc, 'text', unicode(nRGB))
  195.             self.default = self.Hex_RGB(hxc)
  196.             self.sfStats = u'Hex Color: ' +hxc
  197.             self.ssStats = u'RGB Color: ' +str(nRGB).replace('L', '')
  198.             self.r_scrn()
  199.         if ccolor == 1:
  200.             hxc = appuifw.query(u'Hex Color:\n(0xXXXXXX or #XXXXXX):', 'text', u'0x')
  201.             if hxc is None:
  202.                 return None
  203.             nPIL = self.Hex_PIL(hxc)
  204.             if nPIL is None:
  205.                 return None
  206.             appuifw.query(u'%s in PIL Color:' %hxc, 'text', unicode(nPIL))
  207.             self.default = self.Hex_RGB(hxc)
  208.             self.sfStats = u'Hex Color: ' +hxc
  209.             self.ssStats = u'PIL Color: ' +nPIL
  210.             self.r_scrn()
  211.  
  212.     def cPC(self):
  213.         mmenu = [u'RGB Color', u'Hex Color']
  214.         ccolor = appuifw.popup_menu(mmenu, u"Convert into:")
  215.         if ccolor == 0:
  216.             PILc = appuifw.query(u'PIL Color:', 'number')
  217.             if PILc is None:
  218.                 return None
  219.             if len(str(PILc)) > 8:
  220.                 appuifw.note(u'Invalid PIL Color!', 'error')
  221.                 return None
  222.             nRGB = self.PIL_RGB(PILc)
  223.             appuifw.query(u'%s in RGB Color:' %PILc, 'text', unicode(nRGB))
  224.             self.default = self.PIL_RGB(PILc)
  225.             self.sfStats = u'PIL Color: ' +str(PILc)
  226.             self.ssStats = u'RGB Color: ' +str(nRGB).replace('L', '')
  227.             self.r_scrn()
  228.         if ccolor == 1:
  229.             PILc = appuifw.query(u'PIL Color:', 'number')
  230.             if PILc is None:
  231.                 return None
  232.             if len(str(PILc)) > 8:
  233.                 appuifw.note(u'Invalid PIL Color!', 'error')
  234.                 return None
  235.             nHex = self.PIL_Hex(PILc)
  236.             if nHex is None:
  237.                 return None
  238.             appuifw.query(u'%s in Hex Color:' %PILc, 'text', unicode(nHex))
  239.             self.default = self.PIL_RGB(PILc)
  240.             self.sfStats = u'PIL Color: ' +str(PILc)
  241.             self.ssStats = u'Hex Color: ' +nHex
  242.             self.r_scrn()
  243.  
  244.     def Hex_RGB(self, color):
  245.         sColor = color.strip()
  246.         if sColor.startswith('#'):
  247.             sColor = sColor[1:]
  248.         if sColor.startswith('0x'):
  249.             sColor = sColor[2:]
  250.         if color < 7 or len(sColor) != 6:
  251.             appuifw.note(u'Only 0xRRGGBB or #RRGGBB format!', 'error')
  252.             return None
  253.  
  254.         RGB = sColor[:-4], \
  255.               sColor[2:-2], \
  256.               sColor[4:]
  257.         RR, GG, BB = [int(C, 16) for C in RGB]
  258.         return (RR, GG, BB)
  259.  
  260.     def RGB_Hex(self, color):
  261.         hex_color = '%02X%02X%02X' %color
  262.         return u'0x'+hex_color
  263.  
  264.  
  265.     def Hex_PIL(self, color):
  266.         sColor = color.strip()
  267.         if sColor.startswith('#'):
  268.             sColor = sColor[1:]
  269.         if sColor.startswith('0x'):
  270.             sColor = sColor[2:]
  271.         if len(color) != 8 and len(color) != 7:
  272.             appuifw.note(u'Only 0xRRGGBB or #RRGGBB format!', 'error')
  273.             return None
  274.         return unicode(int(sColor, 16))
  275.  
  276.     def RGB_PIL(self, color):
  277.         hexColor=self.RGB_Hex(color)
  278.         pilColor=self.Hex_PIL(hexColor)
  279.         return pilColor
  280.  
  281.     def PIL_Hex(self, color):
  282.         hexColor = '0x'+'%06X'%int(color)
  283.         return hexColor
  284.  
  285.     def PIL_RGB(self, color):
  286.         hexColor = self.PIL_Hex(color)
  287.         return self.Hex_RGB(hexColor)
  288.  
  289.     def help(self):
  290.         globalui.global_msg_query(u'RGB Color: 0-255 in Range.\ne.g. (255, 255, 255)\n\nHex Color: You can use HTML Colors (#XXXXXX) or use Python Colors (0xXXXXXX).\ne.g. 0xFFFFFF\n\nPIL Color: PIL stands for Python Image Library. PIL colors - Base16.\ne.g. 16777215', u'Help')
  291.  
  292.     def about(self):
  293.         Inf1 = u'Version: '+__version__+u'\n'
  294.         Inf2 = u'Description: ' +__desc__+u'\n'
  295.         Inf3 = u'Author: '+__author__+u'\n'
  296.         Inf4 = u'Credits: '+__credits__[0]+u'\n'
  297.         Inf5 = 'URL: '+__url__[0]+u'\n'+__url__[1]
  298.         mInfo=Inf1+Inf2+Inf3+Inf4+Inf5
  299.         Title = u'About ' +__program__
  300.         globalui.global_msg_query(mInfo, Title)
  301.  
  302.     def quit(self):
  303.         AskUser = [u'Yes', u'No']
  304.         cexit = appuifw.popup_menu(AskUser, u"Are you sure to exit?")
  305.         if cexit == 0:
  306.             self.script_lock.signal()
  307.  
  308. # Best Resolution: 176x208
  309. if __name__ == '__main__':
  310.     ColorConverter().main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement