Set -hr as default and drop the config
[rainbowstream.git] / rainbowstream / c_image.py
index e4d4505..f26cfcf 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 from PIL import Image
 from os.path import join, dirname, getmtime, exists, expanduser
 from .config import *
 from PIL import Image
 from os.path import join, dirname, getmtime, exists, expanduser
 from .config import *
@@ -24,19 +25,35 @@ def call_c():
 rgb2short = call_c()
 
 
 rgb2short = call_c()
 
 
-def pixel_print(ansicolor):
+def pixel_print(pixel):
     """
     Print a pixel with given Ansi color
     """
     """
     Print a pixel with given Ansi color
     """
-    sys.stdout.write('\033[48;5;%sm \033[0m' % (ansicolor))
+    r, g, b = pixel[:3]
 
 
+    if c['24BIT'] is True:
+        sys.stdout.write('\033[48;2;%d;%d;%dm \033[0m'
+                         % (r, g, b))
+    else:
+        ansicolor = rgb2short(r, g, b)
+        sys.stdout.write('\033[48;5;%sm \033[0m' % (ansicolor))
 
 
-def block_print(lower, higher):
+
+def block_print(higher, lower):
     """
     Print two pixels arranged above each other with Ansi color.
     Abuses Unicode to print two pixels in the space of one terminal block.
     """
     """
     Print two pixels arranged above each other with Ansi color.
     Abuses Unicode to print two pixels in the space of one terminal block.
     """
-    sys.stdout.write('\033[38;5;%sm\033[48;5;%sm▄\033[0m' % (higher, lower))
+    r0, g0, b0 = lower[:3]
+    r1, g1, b1 = higher[:3]
+
+    if c['24BIT'] is True:
+        sys.stdout.write('\033[38;2;%d;%d;%dm\033[48;2;%d;%d;%dm▄\033[0m'
+                         % (r1, g1, b1, r0, g0, b0))
+    else:
+        i0 = rgb2short(r0, g0, b0)
+        i1 = rgb2short(r1, g1, b1)
+        sys.stdout.write('\033[38;5;%sm\033[48;5;%sm▄\033[0m' % (i1, i0))
 
 
 def image_to_display(path, start=None, length=None):
 
 
 def image_to_display(path, start=None, length=None):
@@ -63,11 +80,17 @@ def image_to_display(path, start=None, length=None):
             y = real_y * 2
             p0 = i.getpixel((x, y))
             p1 = i.getpixel((x, y+1))
             y = real_y * 2
             p0 = i.getpixel((x, y))
             p1 = i.getpixel((x, y+1))
-            r0, g0, b0 = p0[:3]
-            r1, g1, b1 = p1[:3]
-            block_print(rgb2short(r0, g0, b0), rgb2short(r1, g1, b1))
+            block_print(p1, p0)
         sys.stdout.write('\n')
 
         sys.stdout.write('\n')
 
+    # Old code for display one pixel on one terminal block
+    # for y in xrange(height):
+    #     sys.stdout.write(' ' * start)
+    #     for x in xrange(width):
+    #         p = i.getpixel((x, y))
+    #         pixel_print(p)
+    #     sys.stdout.write('\n')
+
 
 """
 For direct using purpose
 
 """
 For direct using purpose