Set -hr as default and drop the config
[rainbowstream.git] / rainbowstream / c_image.py
index e4d450564d203a10ab92a03fe6e87d949dc81ae3..f26cfcf1c5a471cc33300f9dcf2b84677a22de7f 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