algorytm.org

Implementacja w Python



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Transformacja CMY RGB - Implementacja w Python
Ocena użytkownikóww: *****  / 0
SłabyŚwietny
Nadesłany przez Marek Madejski, 22 maja 2015 16:16
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

cmy_rgb.py:
# -*- coding: UTF-8 -*-

#  Transformacja pomiedzy modelami CMY i RGB
#  www.algorytm.org
  
import random
import math

def getRange(x, y, z):
	'''
	Zakladamy, ze podanie liczby typu int oznacza zakres 0-255,
	a typu float - 0.0-1.0
	'''
	if isinstance(x, int)     and isinstance(y, int)   and isinstance(z, int):
		assert 0<=x<=255 and 0<=y<=255 and 0<=z<=255, "Wartosci poza zakresem 0-255."
		return 255
	elif isinstance(x, float) and isinstance(y, float) and isinstance(z, float):
		assert 0<=x<=1   and 0<=y<=1   and 0<=z<=1,   "Wartosci poza zakresem 0.0-1.0."
		return 1.0
	else:
		raise ValueError("Zakresy dla komponentow nie sa spojne.")

def rgbToHex(r, g, b):
	if isinstance(r, float) and isinstance(g, float) and isinstance(b, float):
		r = int(r * 255)
		g = int(g * 255)
		b = int(b * 255)
	return "#{0:02x}{1:02x}{2:02x}".format(r, g, b)

def cmyToRgb(c, m, y):
	range_ = getRange(c, m, y)
	r = range_ - c
	g = range_ - m
	b = range_ - y
	return r, g, b

def rgbToCmy(r, g, b):
	range_ = getRange(r, g, b)
	c = range_ - r;
	m = range_ - g;
	y = range_ - b;
	return c, m, y

def demo(mode):
	x, y, z = list(mode)
	xyzStr = input("Podaj kolor {} w formacie '{} {} {}'\nWpisz albo wartosci z zakresu   0-255 w formacie calkowitym\n      albo wartosci z zakresu 0.0-1.0 w formacie dziesietnym\n".format(mode, x, y, z))
	xyzList = [float(i) for i in xyzStr.split() if list(xyzStr).count('.') == 3]
	if len(xyzList) == 0:
		xyzList = [int(i) for i in xyzStr.split() if '.' not in xyzStr]
	
	if len(xyzList) != 3:
		raise ValueError('Bledny format danych wejsciowych.')
	return xyzList

def main():
	c, m, y = demo('CMY')
	r, g, b = rgbToCmy(c, m, y)
	print("wartosc RGB: {} {} {} ({})".format(r, g, b, rgbToHex(r, g ,b)))
	print('\n')
	r, g, b = demo('RGB')
	c, m, y = rgbToCmy(r, g, b)
	print("wartosc CMY: {} {} {}".format(c, m, y))

if __name__ == "__main__":
	main()
Dodaj komentarz