securesmartcam / app / src / main / java / org / witness / obscuracam / photo / filters / PixelizeObscure.java @ 41590feb
History | View | Annotate | Download (2.44 KB)
1 |
/*
|
---|---|
2 |
* This ObscureMethod pixelizes the region
|
3 |
*/
|
4 |
|
5 |
package org.witness.obscuracam.photo.filters; |
6 |
|
7 |
|
8 |
import java.util.Properties; |
9 |
|
10 |
import android.graphics.Bitmap; |
11 |
import android.graphics.Canvas; |
12 |
import android.graphics.RectF; |
13 |
|
14 |
public class PixelizeObscure implements RegionProcesser { |
15 |
|
16 |
Bitmap originalBmp; |
17 |
|
18 |
private final static int PIXEL_BLOCK = 10; |
19 |
|
20 |
Properties mProps;
|
21 |
|
22 |
public PixelizeObscure ()
|
23 |
{ |
24 |
mProps = new Properties (); |
25 |
mProps.put("size", "10"); |
26 |
mProps.put("obfuscationType", this.getClass().getName()); |
27 |
} |
28 |
|
29 |
public void processRegion(RectF rect, Canvas canvas, Bitmap bitmap) { |
30 |
|
31 |
originalBmp = bitmap; |
32 |
|
33 |
int pixelSize = (int)(rect.right-rect.left)/PIXEL_BLOCK; |
34 |
|
35 |
if (pixelSize <= 0) //1 is the smallest it can be |
36 |
pixelSize = 1;
|
37 |
|
38 |
pixelate(rect, pixelSize); |
39 |
|
40 |
// return properties and data as a map
|
41 |
mProps.put("initialCoordinates", "[" + rect.top + "," + rect.left + "]"); |
42 |
mProps.put("regionWidth", Float.toString(Math.abs(rect.left - rect.right))); |
43 |
mProps.put("regionHeight", Float.toString(Math.abs(rect.top - rect.bottom))); |
44 |
|
45 |
} |
46 |
|
47 |
private void pixelate(RectF rect, int pixelSize) |
48 |
{ |
49 |
|
50 |
if (rect.left <= 0) { |
51 |
rect.left = 0;
|
52 |
} else if (rect.right >= originalBmp.getWidth()-1) { |
53 |
rect.right = originalBmp.getWidth() - 1;
|
54 |
} |
55 |
|
56 |
if (rect.top <= 0) { |
57 |
rect.top = 0;
|
58 |
} else if (rect.bottom >= originalBmp.getHeight()) { |
59 |
rect.bottom = originalBmp.getHeight() - 1;
|
60 |
} |
61 |
|
62 |
|
63 |
int pixels[]; |
64 |
int newPixel;
|
65 |
int wPixelSize = pixelSize;
|
66 |
int hPixelSize = pixelSize;
|
67 |
|
68 |
for (int x = (int)rect.left; x < rect.right; x+=pixelSize) { |
69 |
for (int y = (int)rect.top; y < rect.bottom; y+=pixelSize) { |
70 |
|
71 |
wPixelSize = pixelSize; |
72 |
hPixelSize = pixelSize; |
73 |
|
74 |
try
|
75 |
{ |
76 |
pixels = new int[pixelSize*pixelSize]; |
77 |
newPixel = originalBmp.getPixel(x, y); |
78 |
for (int i = 0; i < pixels.length; i++) |
79 |
pixels[i] = newPixel; |
80 |
|
81 |
if (x+pixelSize>rect.right)
|
82 |
{ |
83 |
wPixelSize = (int)rect.right - x;
|
84 |
} |
85 |
|
86 |
if (y+pixelSize> rect.bottom)
|
87 |
{ |
88 |
hPixelSize = (int)rect.bottom - y;
|
89 |
} |
90 |
|
91 |
originalBmp.setPixels(pixels, 0, pixelSize, x, y, wPixelSize, hPixelSize);
|
92 |
} |
93 |
catch (IllegalArgumentException iae) |
94 |
{ |
95 |
iae.printStackTrace(); |
96 |
} |
97 |
} |
98 |
} |
99 |
} |
100 |
|
101 |
public Properties getProperties() |
102 |
{ |
103 |
return mProps;
|
104 |
} |
105 |
|
106 |
public void setProperties(Properties props) |
107 |
{ |
108 |
mProps = props; |
109 |
} |
110 |
|
111 |
@Override
|
112 |
public Bitmap getBitmap() {
|
113 |
// TODO Auto-generated method stub
|
114 |
return null; |
115 |
} |
116 |
} |
117 |
|
118 |
|
119 |
|