-
Notifications
You must be signed in to change notification settings - Fork 182
/
conversions.go
82 lines (72 loc) · 2.07 KB
/
conversions.go
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// Copyright 2013 Herbert G. Fischer. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package imagick
/*
#include <wand/MagickWand.h>
*/
import "C"
import "unsafe"
// Convert a boolean to a integer
func b2i(boolean bool) C.MagickBooleanType {
if boolean {
return C.MagickBooleanType(1)
}
return C.MagickBooleanType(0)
}
func cStringArrayToStringSlice(p **C.char) []string {
var strings []string
q := uintptr(unsafe.Pointer(p))
for {
p = (**C.char)(unsafe.Pointer(q))
if *p == nil {
break
}
strings = append(strings, C.GoString(*p))
q += unsafe.Sizeof(q)
}
return strings
}
func sizedCStringArrayToStringSlice(p **C.char, num C.size_t) []string {
var strings []string
q := uintptr(unsafe.Pointer(p))
for i := 0; i < int(num); i++ {
p = (**C.char)(unsafe.Pointer(q))
if *p == nil {
break
}
strings = append(strings, C.GoString(*p))
q += unsafe.Sizeof(q)
}
return strings
}
func sizedDoubleArrayToFloat64Slice(p *C.double, num C.size_t) []float64 {
var nums []float64
q := uintptr(unsafe.Pointer(p))
for i := 0; i < int(num); i++ {
p = (*C.double)(unsafe.Pointer(q))
nums = append(nums, float64(*p))
q += unsafe.Sizeof(q)
}
return nums
}
func ConvertRGBToHSB(qr, qg, qb Quantum) (h, s, b float64) {
var dh, ds, db C.double
C.ConvertRGBToHSB(C.Quantum(qr), C.Quantum(qg), C.Quantum(qb), &dh, &ds, &db)
return float64(dh), float64(ds), float64(db)
}
func ConvertHSBToRGB(fh, fs, fb float64) (r, g, b Quantum) {
var qr, qg, qb C.Quantum
C.ConvertHSBToRGB(C.double(fh), C.double(fs), C.double(fb), &qr, &qg, &qb)
return Quantum(qr), Quantum(qg), Quantum(qb)
}
func ConvertRGBToHSL(qr, qg, qb Quantum) (h, s, l float64) {
var dh, ds, dl C.double
C.ConvertRGBToHSL(C.Quantum(qr), C.Quantum(qg), C.Quantum(qb), &dh, &ds, &dl)
return float64(dh), float64(ds), float64(dl)
}
func ConvertHSLToRGB(fh, fs, fl float64) (r, g, b Quantum) {
var qr, qg, qb C.Quantum
C.ConvertHSLToRGB(C.double(fh), C.double(fs), C.double(fl), &qr, &qg, &qb)
return Quantum(qr), Quantum(qg), Quantum(qb)
}