Statistics
| Branch: | Tag: | Revision:

securesmartcam / app / src / main / java / org / witness / obscuracam / photo / filters / BlurObscure.java @ 41590feb

History | View | Annotate | Download (4.43 KB)

1
/*
2
 * This ObscureMethod blurs the contents of 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.Paint;
13
import android.graphics.RectF;
14

    
15
public class BlurObscure implements RegionProcesser {
16

    
17
        Bitmap originalBmp;
18
        Properties mProps;
19
        Paint mPaint;
20
        
21
        private final static int BLUR_OFFSET = 10;
22

    
23
        public BlurObscure(Paint paint) {
24
                mProps = new Properties ();
25
                mProps.put("obfuscationType", this.getClass().getName());
26
                mPaint = paint;
27
        }
28
        
29
        public void processRegion(RectF rect, Canvas canvas,  Bitmap bitmap) {
30

    
31
                Bitmap bRect = applyGaussianBlur(bitmap, rect);
32
                
33
                canvas.drawBitmap(bRect, (int)rect.left, (int)rect.top, mPaint);
34
                
35
                // return properties and data as a map
36
                mProps.put("initialCoordinates", "[" + rect.top + "," + rect.left + "]");
37
                mProps.put("regionWidth", Float.toString(Math.abs(rect.left - rect.right)));
38
                mProps.put("regionHeight", Float.toString(Math.abs(rect.top - rect.bottom)));
39
                
40
        }
41
        
42
        public static Bitmap applyGaussianBlur(Bitmap src, RectF rect) {
43
                double[][] GaussianBlurConfig = new double[][] {
44
                        { 1, 2, 1 },
45
                        { 2, 4, 2 },
46
                        { 1, 2, 1 }
47
                };
48
                ConvolutionMatrix convMatrix = new ConvolutionMatrix(3);
49
                convMatrix.applyConfig(GaussianBlurConfig);
50
                convMatrix.Factor = 16;
51
                convMatrix.Offset = 0;
52
                return ConvolutionMatrix.computeConvolution3x3(src, convMatrix, (int)rect.left,(int)rect.right,(int)rect.top,(int)rect.bottom);
53
        }
54
        
55
        /*
56
        private void makeItBlur(Rect rect)
57
        {
58
                
59
                if (rect.left <= (0 + BLUR_OFFSET*2)) {
60
                        rect.left = (1 + BLUR_OFFSET*2);
61
                } else if (rect.right >= (originalBmp.getWidth()-1-BLUR_OFFSET*2)) {
62
                        rect.right = (originalBmp.getWidth() - 2 - BLUR_OFFSET*2);
63
                }
64
                
65
                if (rect.top <= (0 + BLUR_OFFSET*2)) {
66
                        rect.top = (1 + BLUR_OFFSET*2);
67
                } else if (rect.bottom >= (originalBmp.getHeight() - BLUR_OFFSET*2)) {
68
                        rect.bottom = (originalBmp.getHeight() - 2 - BLUR_OFFSET*2);
69
                }
70
                        
71
                for (int x = rect.left; x < rect.right - 1; x++) {
72
                        for (int y = rect.top; y < rect.bottom - 1; y++) {
73
                                
74
                                int blurOffset = (int)((Math.random()*BLUR_OFFSET)+BLUR_OFFSET);
75
                                int r = getRed(x,y, blurOffset);
76
                                
77
                                blurOffset = (int)((Math.random()*BLUR_OFFSET)+BLUR_OFFSET);
78
                                int g = getGreen(x,y, blurOffset);
79
                                
80
                                blurOffset = (int)((Math.random()*BLUR_OFFSET)+BLUR_OFFSET);
81
                                int b = getBlue(x,y, blurOffset);
82
                                
83
                                originalBmp.setPixel(x, y, Color.rgb(r,g,b));
84
                        }
85
                }
86
        }
87
        
88
        
89
        private int getRed(int x, int y, int blurOffset) {
90
                return 
91
                        (Color.red(originalBmp.getPixel(x-blurOffset, y-blurOffset)) +
92
                        Color.red(originalBmp.getPixel(x, y-blurOffset)) +
93
                        Color.red(originalBmp.getPixel(x+blurOffset, y-blurOffset)) +
94
                        Color.red(originalBmp.getPixel(x-blurOffset, y)) +
95
                        Color.red(originalBmp.getPixel(x, y)) +
96
                        Color.red(originalBmp.getPixel(x+blurOffset, y)) +
97
                        Color.red(originalBmp.getPixel(x-blurOffset, y+blurOffset)) +
98
                        Color.red(originalBmp.getPixel(x, y+blurOffset)) +
99
                        Color.red(originalBmp.getPixel(x+blurOffset, y+blurOffset)))/9;
100
        }
101
        
102
        private int getGreen(int x, int y, int blurOffset) {
103
                return 
104
                        (Color.green(originalBmp.getPixel(x-blurOffset, y-blurOffset)) +
105
                        Color.green(originalBmp.getPixel(x, y-blurOffset)) +
106
                        Color.green(originalBmp.getPixel(x+blurOffset, y-blurOffset)) +
107
                        Color.green(originalBmp.getPixel(x-blurOffset, y)) +
108
                        Color.green(originalBmp.getPixel(x, y)) +
109
                        Color.green(originalBmp.getPixel(x+blurOffset, y)) +
110
                        Color.green(originalBmp.getPixel(x-blurOffset, y+blurOffset)) +
111
                        Color.green(originalBmp.getPixel(x, y+blurOffset)) +
112
                        Color.green(originalBmp.getPixel(x+blurOffset, y+blurOffset)))/9;                
113
        }
114
        
115
        private int getBlue(int x, int y, int blurOffset) {
116
                return 
117
                        (Color.blue(originalBmp.getPixel(x-blurOffset, y-blurOffset)) +
118
                        Color.blue(originalBmp.getPixel(x, y-blurOffset)) +
119
                        Color.blue(originalBmp.getPixel(x+blurOffset, y-blurOffset)) +
120
                        Color.blue(originalBmp.getPixel(x-blurOffset, y)) +
121
                        Color.blue(originalBmp.getPixel(x, y)) +
122
                        Color.blue(originalBmp.getPixel(x+blurOffset, y)) +
123
                        Color.blue(originalBmp.getPixel(x-blurOffset, y+blurOffset)) +
124
                        Color.blue(originalBmp.getPixel(x, y+blurOffset)) +
125
                        Color.blue(originalBmp.getPixel(x+blurOffset, y+blurOffset)))/9;                
126
        }*/
127
        
128
        public Properties getProperties()
129
        {
130
                return mProps;
131
        }
132
        
133
        public void setProperties(Properties props)
134
        {
135
                mProps = props;
136
        }
137

    
138
        @Override
139
        public Bitmap getBitmap() {
140
                // TODO Auto-generated method stub
141
                return null;
142
        }
143
        
144
}
145

    
146

    
147