Libraryless. Click here for Pure Java version (10849L/62K).
1 | // pixels may contain any float number (e.g. for a distance map) |
2 | static final class FloatBWImage is IBWImage { |
3 | int width, height; |
4 | float[] pixels; // 0 to 1 usually |
5 | |
6 | // color returned when getPixel is called with a position outside the actual image |
7 | float borderColor = 0.0f; |
8 | |
9 | // for unstructure() |
10 | *() {} |
11 | |
12 | // BLACK! |
13 | *(int *width, int *height) { |
14 | pixels = new float[width*height]; |
15 | } |
16 | |
17 | *(int *width, int *height, float brightness) { |
18 | pixels = new float[width*height]; |
19 | fillArrayUnlessZero(pixels, brightness); |
20 | } |
21 | |
22 | *(int *width, int *height, float[] *pixels) {} |
23 | |
24 | public float getPixel aka getFloatPixel(int x, int y) { |
25 | ret inRange(x, y) ? getPixel_noRangeCheck(x, y) : borderColor; |
26 | } |
27 | |
28 | public float getFloatPixel(int index) { |
29 | ret pixels[index]; |
30 | } |
31 | |
32 | float getPixel(Pt p) { ret getPixel(p.x, p.y); } |
33 | |
34 | private boolean inRange(int x, int y) { |
35 | return x >= 0 && x < width && y >= 0 && y < height; |
36 | } |
37 | |
38 | public int getWidth() { return width; } |
39 | public int getHeight() { return height; } |
40 | |
41 | public void setPixel(int x, int y, float brightness) { |
42 | pixels[y*width+x] = brightness; |
43 | } |
44 | |
45 | float getPixel_noRangeCheck(int x, int y) { |
46 | return pixels[y*width+x]; |
47 | } |
48 | |
49 | public byte getByte(int x, int y) { |
50 | return inRange(x, y) ? getByte_noRangeCheck(x, y) : _toByte(borderColor); |
51 | } |
52 | |
53 | byte getByte_noRangeCheck(int x, int y) { |
54 | ret _toByte(pixels[y*width+x]); |
55 | } |
56 | |
57 | static byte _toByte(float pixel) { |
58 | return (byte) (Math.max(0, Math.min(1, pixel))*255f); |
59 | } |
60 | |
61 | // TODO: optimize |
62 | public BufferedImage getBufferedImage() { |
63 | BufferedImage img = bufferedImage(width, height); |
64 | for (int y = 0; y < height; y++) |
65 | for (int x = 0; x < width; x++) { |
66 | int b = ((int) getByte(x, y) & 0xFF); |
67 | img.setRGB(x, y, b*0x010101); |
68 | } |
69 | ret img; |
70 | } |
71 | |
72 | public double averageBrightness() { |
73 | ret floatSumAsDouble(pixels)/(width*height); |
74 | } |
75 | } |
Began life as a copy of #1004247
download show line numbers debug dex old transpilations
Travelled to 4 computer(s): bhatertpkbcr, mowyntqkapby, mqqgnosmbjvj, pyentgdyhuwx
No comments. add comment
Snippet ID: | #1032487 |
Snippet name: | FloatBWImage - grayscale image where each pixel is a real float (allowing bigger range, precision, infinity etc) |
Eternal ID of this version: | #1032487/12 |
Text MD5: | 284166705098acf2115e1e82eaa580ae |
Transpilation MD5: | 7ae03e83dc0315035dc22c0ea33f196e |
Author: | stefan |
Category: | javax / imaging |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2022-08-05 18:59:32 |
Source code size: | 2006 bytes / 75 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 219 / 440 |
Version history: | 11 change(s) |
Referenced in: | [show references] |