ImageDraw.java revision 63a7dac01d394523799939596b960cb03321798d
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 super.onTouchEvent(event); 50 if (event.getPointerCount() != 1) { 51 return false; 52 } 53 54 ImageFilterDraw filter = (ImageFilterDraw) getCurrentFilter(); 55 56 if (event.getAction() == MotionEvent.ACTION_DOWN) { 57 58 mTmpPoint[0] = event.getX(); 59 mTmpPoint[1] = event.getY(); 60 mToOrig.mapPoints(mTmpPoint); 61 float[] hsv = new float[3]; 62 hsv[0] = (float) (360 * Math.random()); 63 hsv[1] = 1; 64 hsv[2] = 1; 65 int col = Color.HSVToColor(0x88, hsv); 66 filter.startSection(col, mTmpPoint[0], mTmpPoint[1]); 67 68 } 69 if (event.getAction() == MotionEvent.ACTION_MOVE) { 70 int historySize = event.getHistorySize(); 71 final int pointerCount = event.getPointerCount(); 72 for (int h = 0; h < historySize; h++) { 73 int p = 0; 74 { 75 mTmpPoint[0] = event.getHistoricalX(p, h); 76 mTmpPoint[1] = event.getHistoricalY(p, h); 77 mToOrig.mapPoints(mTmpPoint); 78 filter.addPoint(mTmpPoint[0], mTmpPoint[1]); 79 } 80 } 81 } 82 if (event.getAction() == MotionEvent.ACTION_UP) { 83 mTmpPoint[0] = event.getX(); 84 mTmpPoint[1] = event.getY(); 85 mToOrig.mapPoints(mTmpPoint); 86 filter.endSection(mTmpPoint[0], mTmpPoint[1]); 87 this.resetImageCaches(this); 88 89 } 90 invalidate(); 91 return true; 92 } 93 94 Matrix mRotateToScreen; 95 Matrix mToScreen; 96 Matrix mToOrig = new Matrix(); 97 private void calcScreenMapping() { 98 99 GeometryMetadata geo = getImagePreset().mGeoData; 100 mToScreen = geo.getOriginalToScreen(false, 101 mImageLoader.getOriginalBounds().width(), 102 mImageLoader.getOriginalBounds().height(), getWidth(), getHeight()); 103 mRotateToScreen = geo.getOriginalToScreen(true, 104 mImageLoader.getOriginalBounds().width(), 105 mImageLoader.getOriginalBounds().height(), getWidth(), getHeight()); 106 mRotateToScreen.invert(mToOrig); 107 mToOrig.invert(mRotateToScreen); 108 } 109 110 @Override 111 public void onDraw(Canvas canvas) { 112 super.onDraw(canvas); 113 114 calcScreenMapping(); 115 116 ImageFilterDraw filter = (ImageFilterDraw) getCurrentFilter(); 117 filter.draw(canvas, mRotateToScreen); 118 } 119} 120