Transpiled version (10946L) is out of date.
1 | persistable sclass Image2B is IBinaryImage { |
2 | int w, h; |
3 | byte[] pixels; |
4 | |
5 | *(int *w, int *h, byte[] *pixels) { cleanPixelArray(); } |
6 | |
7 | *(Image2B img) { |
8 | w = img.getWidth(); |
9 | h = img.getHeight(); |
10 | pixels = cloneByteArray(img.pixels); |
11 | } |
12 | |
13 | *(RGBImage img) { |
14 | w = img.getWidth(); |
15 | h = img.getHeight(); |
16 | pixels = new byte[(w*h+7)/8]; |
17 | for y to h: for x to w: |
18 | if (img.getPixel(x, y).getBrightness() >= 0.5f) { |
19 | int i = y*w+x; |
20 | pixels[i/8] |= 1 << (i & 7); |
21 | } |
22 | } |
23 | |
24 | *(BWImage img) { |
25 | this(img, 128); |
26 | } |
27 | |
28 | // >= threshold |
29 | *(BWImage img, int threshold) { |
30 | w = img.w(); h = img.h(); |
31 | int n = w*h; |
32 | int nOut = (n+7)/8; |
33 | byte[] pixels = this.pixels = new byte[nOut]; |
34 | byte[] bwPixels = img.pixels; |
35 | int iIn = 0; |
36 | |
37 | // do the bulk |
38 | for (int iOut = 0; iOut < nOut-1; iOut++) { |
39 | int value = 0; |
40 | for bit to 8: { |
41 | value >>= 1; |
42 | if (ubyteToInt(bwPixels[iIn++]) >= threshold) |
43 | value |= 0x80; |
44 | } |
45 | pixels[iOut] = (byte) value; |
46 | } |
47 | |
48 | // do last (up to 7) bits |
49 | for (; iIn < n; iIn++) |
50 | if (ubyteToInt(bwPixels[iIn]) >= threshold) |
51 | pixels[nOut-1] |= 1 << (iIn & 7); |
52 | } |
53 | |
54 | *(BufferedImage img) { |
55 | this(img, 128); |
56 | } |
57 | |
58 | *(BufferedImage img, int threshold) { |
59 | this(BWImage(img), threshold); |
60 | } |
61 | |
62 | // initializes with black |
63 | *(int *w, int *h) { |
64 | pixels = new byte[(w*h+7)/8]; |
65 | } |
66 | |
67 | RGBImage toRGB() { |
68 | RGBImage img = new RGBImage(w, h, Color.black); |
69 | for y to h: for x to w: { |
70 | int i = y*w+x; |
71 | if ((pixels[i/8] & (1 << (i & 7))) != 0) |
72 | img.setPixel(x, y, Color.white); |
73 | } |
74 | ret img; |
75 | } |
76 | |
77 | BWImage toBW() { |
78 | BWImage img = new BWImage(w, h, 0f); |
79 | for y to h: for x to w: { |
80 | int i = y*w+x; |
81 | if ((pixels[i/8] & (1 << (i & 7))) != 0) |
82 | img.setPixel(x, y, 1f); |
83 | } |
84 | ret img; |
85 | } |
86 | |
87 | public BufferedImage getBufferedImage() { ret toBW().getBufferedImage(); } |
88 | |
89 | // x and y must be inside the image |
90 | public bool getPixel aka getBoolPixel(int x, int y) { |
91 | int i = y*w+x; |
92 | ret (pixels[i/8] & (1 << (i & 7))) != 0; |
93 | } |
94 | |
95 | // defaultColor is color outside of image |
96 | public bool getPixel aka getBoolPixel(int x, int y, bool defaultColor) { |
97 | if (x < 0 || y < 0 || x >= w || y >= h) ret defaultColor; |
98 | ret getPixel(x, y); |
99 | } |
100 | |
101 | public void setPixel(int x, int y, bool b) { |
102 | int i = y*w+x; |
103 | byte val = pixels[i/8], shifted = (byte) (1 << (i & 7)); |
104 | val = (byte) (b ? val | shifted : val & ~shifted); |
105 | pixels[i/8] = val; |
106 | } |
107 | |
108 | void setPixel(int x, int y) { |
109 | int i = y*w+x; |
110 | pixels[i/8] |= 1 << (i & 7); |
111 | } |
112 | |
113 | public int getWidth() { ret w; } |
114 | public int getHeight() { ret h; } |
115 | |
116 | toString { |
117 | ret "Image2B " + str_px(w, h); |
118 | } |
119 | |
120 | // clear unused bits in pixel array after we received |
121 | // a possibly dirty array |
122 | void cleanPixelArray { |
123 | int n = w*h; |
124 | if ((n & 7) != 0) |
125 | pixels[n/8] &= (1 << (n & 7))-1; |
126 | } |
127 | |
128 | public double averageBrightness() { |
129 | ret doubleRatio(bitCount(pixels), w*h); |
130 | } |
131 | } |
Began life as a copy of #1005378
download show line numbers debug dex old transpilations
Travelled to 14 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
Snippet ID: | #1006576 |
Snippet name: | Image2B - image in 2 bit format (just black and white) |
Eternal ID of this version: | #1006576/37 |
Text MD5: | 2efb245e48159fe641a9b0d3fe99b439 |
Author: | stefan |
Category: | javax / imaging |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2022-09-08 23:05:10 |
Source code size: | 3191 bytes / 131 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 647 / 1816 |
Version history: | 36 change(s) |
Referenced in: | [show references] |