File: dimensions.go

package info (click to toggle)
golang-barcode 1.0.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 476 kB
  • sloc: makefile: 3
file content (57 lines) | stat: -rw-r--r-- 920 bytes parent folder | download | duplicates (2)
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
package pdf417

import "math"

const (
	minCols         = 2
	maxCols         = 30
	maxRows         = 30
	minRows         = 2
	moduleHeight    = 2
	preferred_ratio = 3.0
)

func calculateNumberOfRows(m, k, c int) int {
	r := ((m + 1 + k) / c) + 1
	if c*r >= (m + 1 + k + c) {
		r--
	}
	return r
}

func calcDimensions(dataWords, eccWords int) (cols, rows int) {
	ratio := 0.0
	cols = 0
	rows = 0

	for c := minCols; c <= maxCols; c++ {
		r := calculateNumberOfRows(dataWords, eccWords, c)

		if r < minRows {
			break
		}

		if r > maxRows {
			continue
		}

		newRatio := float64(17*cols+69) / float64(rows*moduleHeight)
		if rows != 0 && math.Abs(newRatio-preferred_ratio) > math.Abs(ratio-preferred_ratio) {
			continue
		}

		ratio = newRatio
		cols = c
		rows = r
	}

	if rows == 0 {
		r := calculateNumberOfRows(dataWords, eccWords, minCols)
		if r < minRows {
			rows = minRows
			cols = minCols
		}
	}

	return
}