ImageDraw.java revision 5aa08941bda0cfbcfba522c53937dd66867f890d
1 2package com.android.gallery3d.filtershow.imageshow; 3 4import android.content.Context; 5import android.graphics.Canvas; 6import android.graphics.Color; 7import android.graphics.Matrix; 8import android.graphics.Paint; 9import android.graphics.Paint.Style; 10import android.graphics.RectF; 11import android.util.AttributeSet; 12import android.util.Log; 13import android.view.MotionEvent; 14 15import com.android.gallery3d.filtershow.filters.ImageFilterDraw; 16import com.android.gallery3d.filtershow.filters.RedEyeCandidate; 17 18public class ImageDraw extends ImageShow { 19 20 private static final String LOGTAG = "ImageDraw"; 21 22 public ImageDraw(Context context, AttributeSet attrs) { 23 super(context, attrs); 24 } 25 26 public ImageDraw(Context context) { 27 super(context); 28 } 29 30 @Override 31 public void resetParameter() { 32 ImageFilterDraw filter = (ImageFilterDraw) getCurrentFilter(); 33 if (filter != null) { 34 filter.clear(); 35 } 36 37 invalidate(); 38 } 39 40 @Override 41 public void updateImage() { 42 super.updateImage(); 43 invalidate(); 44 } 45 46 float[] mTmpPoint = new float[2]; // so we do not malloc 47 @Override 48 public boolean onTouchEvent(MotionEvent event) { 49 if (event.getPointerCount() != 1) { 50 return false; 51 } 52 53 ImageFilterDraw filter = (ImageFilterDraw) getCurrentFilter(); 54 55 if (event.getAction() == MotionEvent.ACTION_DOWN) { 56 57 mTmpPoint[0] = event.getX(); 58 mTmpPoint[1] = event.getY(); 59 mToOrig.mapPoints(mTmpPoint); 60 float[] hsv = new float[3]; 61 hsv[0] = (float) (360 * Math.random()); 62 hsv[1] = 1; 63 hsv[2] = 1; 64 int col = Color.HSVToColor(0x88, hsv); 65 filter.startSection(col, mTmpPoint[0], mTmpPoint[1]); 66 67 } 68 if (event.getAction() == MotionEvent.ACTION_MOVE) { 69 int historySize = event.getHistorySize(); 70 final int pointerCount = event.getPointerCount(); 71 for (int h = 0; h < historySize; h++) { 72 int p = 0; 73 { 74 mTmpPoint[0] = event.getHistoricalX(p, h); 75 mTmpPoint[1] = event.getHistoricalY(p, h); 76 mToOrig.mapPoints(mTmpPoint); 77 filter.addPoint(mTmpPoint[0], mTmpPoint[1]); 78 } 79 } 80 } 81 if (event.getAction() == MotionEvent.ACTION_UP) { 82 mTmpPoint[0] = event.getX(); 83 mTmpPoint[1] = event.getY(); 84 mToOrig.mapPoints(mTmpPoint); 85 filter.endSection(mTmpPoint[0], mTmpPoint[1]); 86 this.resetImageCaches(this); 87 88 } 89 invalidate(); 90 return true; 91 } 92 93 Matrix mRotateToScreen; 94 Matrix mToScreen; 95 Matrix mToOrig = new Matrix(); 96 private void calcScreenMapping() { 97 98 GeometryMetadata geo = getImagePreset().mGeoData; 99 mToScreen = geo.getOriginalToScreen(false, 100 mImageLoader.getOriginalBounds().width(), 101 mImageLoader.getOriginalBounds().height(), getWidth(), getHeight()); 102 mRotateToScreen = geo.getOriginalToScreen(true, 103 mImageLoader.getOriginalBounds().width(), 104 mImageLoader.getOriginalBounds().height(), getWidth(), getHeight()); 105 mRotateToScreen.invert(mToOrig); 106 mToOrig.invert(mRotateToScreen); 107 } 108 109 @Override 110 public void onDraw(Canvas canvas) { 111 super.onDraw(canvas); 112 113 calcScreenMapping(); 114 115 ImageFilterDraw filter = (ImageFilterDraw) getCurrentFilter(); 116 filter.draw(canvas, mRotateToScreen); 117 } 118} 119