cross-stitch

Interactively turn images into patterns for cross stitching
git clone git://src.adamsgaard.dk/cross-stitch
Log | Files | Refs

commit 503df807a1d7659850deca687081e91fb672272e
parent a6cb3cbb779bbf8269a85093e3e04e04601dc2eb
Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
Date:   Sat, 15 Feb 2014 21:11:56 +0100

added 256 color palette, still to be incorporated in GUI

Diffstat:
A256-color-rgb.dat | 256+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A256-color.dat | 256+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aconvert-hex-to-rgb.py | 24++++++++++++++++++++++++
Mcross-stitch.py | 20++++++++++++++++++++
4 files changed, 556 insertions(+), 0 deletions(-)

diff --git a/256-color-rgb.dat b/256-color-rgb.dat @@ -0,0 +1,256 @@ +0 0 0 +128 0 0 +0 128 0 +128 128 0 +0 0 128 +128 0 128 +0 128 128 +192 192 192 +128 128 128 +255 0 0 +0 255 0 +255 255 0 +0 0 255 +255 0 255 +0 255 255 +255 255 255 +0 0 0 +0 0 95 +0 0 135 +0 0 175 +0 0 215 +0 0 255 +0 95 0 +0 95 95 +0 95 135 +0 95 175 +0 95 215 +0 95 255 +0 135 0 +0 135 95 +0 135 135 +0 135 175 +0 135 215 +0 135 255 +0 175 0 +0 175 95 +0 175 135 +0 175 175 +0 175 215 +0 175 255 +0 215 0 +0 215 95 +0 215 135 +0 215 175 +0 215 215 +0 215 255 +0 255 0 +0 255 95 +0 255 135 +0 255 175 +0 255 215 +0 255 255 +95 0 0 +95 0 95 +95 0 135 +95 0 175 +95 0 215 +95 0 255 +95 95 0 +95 95 95 +95 95 135 +95 95 175 +95 95 215 +95 95 255 +95 135 0 +95 135 95 +95 135 135 +95 135 175 +95 135 215 +95 135 255 +95 175 0 +95 175 95 +95 175 135 +95 175 175 +95 175 215 +95 175 255 +95 215 0 +95 215 95 +95 215 135 +95 215 175 +95 215 215 +95 215 255 +95 255 0 +95 255 95 +95 255 135 +95 255 175 +95 255 215 +95 255 255 +135 0 0 +135 0 95 +135 0 135 +135 0 175 +135 0 215 +135 0 255 +135 95 0 +135 95 95 +135 95 135 +135 95 175 +135 95 215 +135 95 255 +135 135 0 +135 135 95 +135 135 135 +135 135 175 +135 135 215 +135 135 255 +135 175 0 +135 175 95 +135 175 135 +135 175 175 +135 175 215 +135 175 255 +135 215 0 +135 215 95 +135 215 135 +135 215 175 +135 215 215 +135 215 255 +135 255 0 +135 255 95 +135 255 135 +135 255 175 +135 255 215 +135 255 255 +175 0 0 +175 0 95 +175 0 135 +175 0 175 +175 0 215 +175 0 255 +175 95 0 +175 95 95 +175 95 135 +175 95 175 +175 95 215 +175 95 255 +175 135 0 +175 135 95 +175 135 135 +175 135 175 +175 135 215 +175 135 255 +175 175 0 +175 175 95 +175 175 135 +175 175 175 +175 175 215 +175 175 255 +175 215 0 +175 215 95 +175 215 135 +175 215 175 +175 215 215 +175 215 255 +175 255 0 +175 255 95 +175 255 135 +175 255 175 +175 255 215 +175 255 255 +215 0 0 +215 0 95 +215 0 135 +215 0 175 +215 0 215 +215 0 255 +215 95 0 +215 95 95 +215 95 135 +215 95 175 +215 95 215 +215 95 255 +215 135 0 +215 135 95 +215 135 135 +215 135 175 +215 135 215 +215 135 255 +215 175 0 +215 175 95 +215 175 135 +215 175 175 +215 175 215 +215 175 255 +215 215 0 +215 215 95 +215 215 135 +215 215 175 +215 215 215 +215 215 255 +215 255 0 +215 255 95 +215 255 135 +215 255 175 +215 255 215 +215 255 255 +255 0 0 +255 0 95 +255 0 135 +255 0 175 +255 0 215 +255 0 255 +255 95 0 +255 95 95 +255 95 135 +255 95 175 +255 95 215 +255 95 255 +255 135 0 +255 135 95 +255 135 135 +255 135 175 +255 135 215 +255 135 255 +255 175 0 +255 175 95 +255 175 135 +255 175 175 +255 175 215 +255 175 255 +255 215 0 +255 215 95 +255 215 135 +255 215 175 +255 215 215 +255 215 255 +255 255 0 +255 255 95 +255 255 135 +255 255 175 +255 255 215 +255 255 255 +8 8 8 +18 18 18 +28 28 28 +38 38 38 +48 48 48 +58 58 58 +68 68 68 +78 78 78 +88 88 88 +96 96 96 +102 102 102 +118 118 118 +128 128 128 +138 138 138 +148 148 148 +158 158 158 +168 168 168 +178 178 178 +188 188 188 +198 198 198 +208 208 208 +218 218 218 +228 228 228 +238 238 238 diff --git a/256-color.dat b/256-color.dat @@ -0,0 +1,256 @@ +000000 +800000 +008000 +808000 +000080 +800080 +008080 +c0c0c0 +808080 +ff0000 +00ff00 +ffff00 +0000ff +ff00ff +00ffff +ffffff +000000 +00005f +000087 +0000af +0000d7 +0000ff +005f00 +005f5f +005f87 +005faf +005fd7 +005fff +008700 +00875f +008787 +0087af +0087d7 +0087ff +00af00 +00af5f +00af87 +00afaf +00afd7 +00afff +00d700 +00d75f +00d787 +00d7af +00d7d7 +00d7ff +00ff00 +00ff5f +00ff87 +00ffaf +00ffd7 +00ffff +5f0000 +5f005f +5f0087 +5f00af +5f00d7 +5f00ff +5f5f00 +5f5f5f +5f5f87 +5f5faf +5f5fd7 +5f5fff +5f8700 +5f875f +5f8787 +5f87af +5f87d7 +5f87ff +5faf00 +5faf5f +5faf87 +5fafaf +5fafd7 +5fafff +5fd700 +5fd75f +5fd787 +5fd7af +5fd7d7 +5fd7ff +5fff00 +5fff5f +5fff87 +5fffaf +5fffd7 +5fffff +870000 +87005f +870087 +8700af +8700d7 +8700ff +875f00 +875f5f +875f87 +875faf +875fd7 +875fff +878700 +87875f +878787 +8787af +8787d7 +8787ff +87af00 +87af5f +87af87 +87afaf +87afd7 +87afff +87d700 +87d75f +87d787 +87d7af +87d7d7 +87d7ff +87ff00 +87ff5f +87ff87 +87ffaf +87ffd7 +87ffff +af0000 +af005f +af0087 +af00af +af00d7 +af00ff +af5f00 +af5f5f +af5f87 +af5faf +af5fd7 +af5fff +af8700 +af875f +af8787 +af87af +af87d7 +af87ff +afaf00 +afaf5f +afaf87 +afafaf +afafd7 +afafff +afd700 +afd75f +afd787 +afd7af +afd7d7 +afd7ff +afff00 +afff5f +afff87 +afffaf +afffd7 +afffff +d70000 +d7005f +d70087 +d700af +d700d7 +d700ff +d75f00 +d75f5f +d75f87 +d75faf +d75fd7 +d75fff +d78700 +d7875f +d78787 +d787af +d787d7 +d787ff +d7af00 +d7af5f +d7af87 +d7afaf +d7afd7 +d7afff +d7d700 +d7d75f +d7d787 +d7d7af +d7d7d7 +d7d7ff +d7ff00 +d7ff5f +d7ff87 +d7ffaf +d7ffd7 +d7ffff +ff0000 +ff005f +ff0087 +ff00af +ff00d7 +ff00ff +ff5f00 +ff5f5f +ff5f87 +ff5faf +ff5fd7 +ff5fff +ff8700 +ff875f +ff8787 +ff87af +ff87d7 +ff87ff +ffaf00 +ffaf5f +ffaf87 +ffafaf +ffafd7 +ffafff +ffd700 +ffd75f +ffd787 +ffd7af +ffd7d7 +ffd7ff +ffff00 +ffff5f +ffff87 +ffffaf +ffffd7 +ffffff +080808 +121212 +1c1c1c +262626 +303030 +3a3a3a +444444 +4e4e4e +585858 +606060 +666666 +767676 +808080 +8a8a8a +949494 +9e9e9e +a8a8a8 +b2b2b2 +bcbcbc +c6c6c6 +d0d0d0 +dadada +e4e4e4 +eeeeee diff --git a/convert-hex-to-rgb.py b/convert-hex-to-rgb.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python +import numpy + +_NUMERALS = '0123456789abcdefABCDEF' +_HEXDEC = {v: int(v, 16) for v in (x+y for x in _NUMERALS for y in + _NUMERALS)} +LOWERCASE, UPPERCASE = 'x', 'X' + +def rgb(triplet): + return (_HEXDEC[triplet[0:2]], _HEXDEC[triplet[2:4]], + _HEXDEC[triplet[4:6]]) + +#hexlist = numpy.loadtxt('./256-color.dat') +rgblist = numpy.empty((256,3)) +fin = open('./256-color.dat') +i = 0 +for line in fin: + #print line, + rgbval = rgb(line) + #print rgbval + rgblist[i,:] = rgbval + i += 1 + +numpy.savetxt('256-color-rgb.dat', rgblist, fmt='%d') diff --git a/cross-stitch.py b/cross-stitch.py @@ -14,6 +14,26 @@ import matplotlib.backends.backend_wxagg import matplotlib.pyplot import wx +class Palette: + def __init__(self, type='256colors'): + if type == '256colors': + self.rgblist = numpy.loadtxt('./256-color-rgb.dat') + + def nearest256color(self, rgbval): + ibest = -1 + min_misfit2 = float(inf) + for i in range(self.rgblist): + palettecolor = self.rgblist[i] + misfit2 = (rgbval[0] - float(palettecolor[0]))**2 + \ + (rgbval[1] - float(palettecolor[1]))**2 + \ + (rgbval[2] - float(palettecolor[2]))**2 + if misfit2 < min_misfit2: + ibest = i + min_misfit2 = misfit2 + return numpy.array((palettecolor[ibest,0], palettecolor[ibest,1], + palettecolor[ibest,2])) + + class CrossStitch: def __init__(self):