-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpixbit-d.rkt
65 lines (44 loc) · 1.9 KB
/
pixbit-d.rkt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#lang scheme
(provide (all-defined-out))
; Selector - getX
; Función de selección x en común para pixbit-d pixrgb-d y pixhex-d
; Dominio: [pixbit-d | pixrgb-d | pixhex-d]
; Recorrido: int
(define getX cadr)
; Selector - getY
; Función de selección y en común para pixbit-d pixrgb-d y pixhex-d
; Dominio: [pixbit-d | pixrgb-d | pixhex-d]
; Recorrido: int
(define getY caddr)
; Selector - getD
; Función de selección y en común para pixbit-d pixrgb-d y pixhex-d
; Dominio: [pixbit-d | pixrgb-d | pixhex-d]
; Recorrido: int
(define getD (lambda (pix)
(list-ref pix (- (length pix) 1))))
; TDA pixbit-d
; Constructor - pixbit-d
; Esta función construye un pixel de tipo pixbit-d que está representado con una lista que tiene:
; El tipo de píxel (representado con un número), las coordenadas del pixel, el bit del pixel y su profundidad.
; Dominio: int X int X int [0|1] X int
; Reccorrido: pixbit-d
(define pixbit-d (lambda (x y bit depth) (list 0 x y bit depth)))
; Selector - getBit
; Función selectora del canal "bit" del tda pixbit-d
; Dominio: pixbit-d Recorrido: int [0|1]
(define getBit (lambda (pix) (list-ref pix 3)))
; Pertenencia - pixbit-d?
; Función que permite determinar si un pixel es de tipo pixbit-d
; Dominio: [pixbit-d | pixrgb-d | pixhex-d] Recorrido: boolean
(define pixbit-d? (lambda (pix) (if (= (car pix) 0) #t #f)))
; Otras - invertColorBit
; Función que permite invierte el valor del bit de un pixbit-d
; Dominio: pixbit-d Recorrido: pixbit-d
(define invertColorBit (lambda (pix)
(if (= 0 (getBit pix))
(pixbit-d (getX pix) (getY pix) 1 (getD pix))
(pixbit-d (getX pix) (getY pix) 0 (getD pix)))))
; Otras - pixbit->string
; Transforma un pixbit-d a string
; Dominio: pixbit-d Recorrido: string
(define pixbit->string (lambda (pix) (number->string (getBit pix))))