diff --git a/.classpath b/.classpath
index a4763d1..a662f00 100644
--- a/.classpath
+++ b/.classpath
@@ -1,8 +1,8 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/project.properties b/project.properties
index 5a70945..8da376a 100644
--- a/project.properties
+++ b/project.properties
@@ -8,4 +8,4 @@
# project structure.
# Project target.
-target=android-7
+target=android-15
diff --git a/src/HaoRan/ImageFilter/Image.java b/src/HaoRan/ImageFilter/Image.java
index fc59eff..e9bbdfa 100644
--- a/src/HaoRan/ImageFilter/Image.java
+++ b/src/HaoRan/ImageFilter/Image.java
@@ -19,271 +19,253 @@
package HaoRan.ImageFilter;
import java.nio.IntBuffer;
+
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
-import android.graphics.Matrix;
/**
*
* @author daizhj
- *
+ *
*/
public class Image {
-
- //original bitmap image
- public Bitmap image;
- public Bitmap destImage;
-
- //format of image (jpg/png)
- private String formatName;
- //dimensions of image
- private int width, height;
- // RGB Array Color
- protected int[] colorArray;
-
- public Image(Bitmap img){
- this.image = img;
- formatName = "jpg";
- width = img.getWidth();
- height = img.getHeight();
- destImage = Bitmap.createBitmap(width, height, Config.ARGB_8888);
- updateColorArray();
- }
-
- public Image clone(){
- return new Image(this.image);
- }
-
- /**
- * Method to reset the image to a solid color
- * @param color - color to rest the entire image to
- */
- public void clearImage(int color){
- for(int y=0; y> 16) & 0xff;
- g = (colorArray[index] >> 8) & 0xff;
- b = colorArray[index] & 0xff;
- colorArray[index] = 0xff000000 | (b << 16) | (g << 8) | r;//android系统与window系统的rgb存储方式相反
- }
- }
- }
-
-
- /**
- * Method to set the color of a specific pixel
- *
- * @param x
- * @param y
- * @param color
- */
- public void setPixelColor(int x, int y, int color){
- colorArray[((y*image.getWidth()+x))] = color;
- //image.setPixel(x, y, color);
- //destImage.setPixel(x, y, colorArray[((y*image.getWidth()+x))]);
- }
-
- /**
- * Get the color for a specified pixel
- *
- * @param x
- * @param y
- * @return color
- */
- public int getPixelColor(int x, int y){
- return colorArray[y*width+x];
- }
-
- /**
- * Set the color of a specified pixel from an RGB combo
- *
- * @param x
- * @param y
- * @param c0
- * @param c1
- * @param c2
- */
- public void setPixelColor(int x, int y, int c0, int c1, int c2){
- int rgbcolor = (255 << 24) + (c0 << 16) + (c1 << 8) + c2;
- colorArray[((y*image.getWidth()+x))] = rgbcolor;
- //int array = ((y*image.getWidth()+x));
-
- //vbb.order(ByteOrder.nativeOrder());
- //vertexBuffer = vbb.asFloatBuffer();
- //vertexBuffer.put(vertices);
- //vertexBuffer.position(0);
-
- //image.setPixel(x, y, colorArray[((y*image.getWidth()+x))]);
- }
-
- public void copyPixelsFromBuffer() { //从缓冲区中copy数据以加快像素处理速度
- IntBuffer vbb = IntBuffer.wrap(colorArray);
- //vbb.put(colorArray);
- destImage.copyPixelsFromBuffer(vbb);
- vbb.clear();
- //vbb = null;
- }
-
- /**
- * Method to get the RED color for the specified
- * pixel
- * @param x
- * @param y
- * @return color of R
- */
- public int getRComponent(int x, int y){
- return (getColorArray()[((y*width+x))]& 0x00FF0000) >>> 16;
- }
+ // format of image (jpg/png)
+ private String formatName;
+ // dimensions of image
+ private int width, height;
+ // RGB Array Color
+ protected int[] colorArray;
+
+ public Image(Bitmap img) {
+ formatName = "jpg";
+ updateColorArray(img);
+ }
-
- /**
- * Method to get the GREEN color for the specified
- * pixel
- * @param x
- * @param y
- * @return color of G
- */
- public int getGComponent(int x, int y){
- return (getColorArray()[((y*width+x))]& 0x0000FF00) >>> 8;
- }
+ public Image(int[] colorArray, int width, int height) {
+ this.colorArray = new int[colorArray.length];
+ System.arraycopy(colorArray, 0, this.colorArray, 0, colorArray.length);
+ this.width = width;
+ this.height = height;
+ formatName = "jpg";
+ }
+ public Image clone() {
+ return new Image(this.colorArray, this.width, this.height);
+ }
- /**
- * Method to get the BLUE color for the specified
- * pixel
- * @param x
- * @param y
- * @return color of B
- */
- public int getBComponent(int x, int y){
- return (getColorArray()[((y*width+x))] & 0x000000FF);
- }
+ /**
+ * Method to reset the image to a solid color
+ *
+ * @param color
+ * - color to rest the entire image to
+ */
+ public void clearImage(int color) {
+ for (int y = 0; y < height; y++) {
+ for (int x = 0; x < width; x++) {
+ setPixelColor(x, y, color);
+ }
+ }
+ }
-
-
- /**
- * Method to rotate an image by the specified number of degrees
- *
- * @param rotateDegrees
- */
- public void rotate (int rotateDegrees){
- Matrix mtx = new Matrix();
- mtx.postRotate(rotateDegrees);
- image = Bitmap.createBitmap(image, 0, 0, width, height, mtx, true);
- width = image.getWidth();
- height = image.getHeight();
- updateColorArray();
- }
-
+ /**
+ * Set color array for image - called on initialisation by constructor
+ *
+ * @param bitmap
+ */
+ private void updateColorArray(Bitmap image) {
+ width = image.getWidth();
+ height = image.getHeight();
+ colorArray = new int[width * height];
+ image.getPixels(colorArray, 0, width, 0, 0, width, height);
+ int r, g, b;
+ for (int y = 0; y < height; y++) {
+ for (int x = 0; x < width; x++) {
+ int index = y * width + x;
+ r = (colorArray[index] >> 16) & 0xff;
+ g = (colorArray[index] >> 8) & 0xff;
+ b = colorArray[index] & 0xff;
+ colorArray[index] = 0xff000000 | (b << 16) | (g << 8) | r;// android系统与window系统的rgb存储方式相反
+ }
+ }
+ image.recycle();
+ }
- /**
- * @return the image
- */
- public Bitmap getImage() {
- //return image;
- return destImage;
- }
+ /**
+ * Method to set the color of a specific pixel
+ *
+ * @param x
+ * @param y
+ * @param color
+ */
+ public void setPixelColor(int x, int y, int color) {
+ colorArray[((y * width + x))] = color;
+ // image.setPixel(x, y, color);
+ // destImage.setPixel(x, y, colorArray[((y*image.getWidth()+x))]);
+ }
+ /**
+ * Get the color for a specified pixel
+ *
+ * @param x
+ * @param y
+ * @return color
+ */
+ public int getPixelColor(int x, int y) {
+ return colorArray[y * width + x];
+ }
- /**
- * @param image the image to set
- */
- public void setImage(Bitmap image) {
- this.image = image;
- }
+ /**
+ * Set the color of a specified pixel from an RGB combo
+ *
+ * @param x
+ * @param y
+ * @param c0
+ * @param c1
+ * @param c2
+ */
+ public void setPixelColor(int x, int y, int c0, int c1, int c2) {
+ int rgbcolor = (255 << 24) + (c0 << 16) + (c1 << 8) + c2;
+ colorArray[((y * width + x))] = rgbcolor;
+ // int array = ((y*image.getWidth()+x));
+ // vbb.order(ByteOrder.nativeOrder());
+ // vertexBuffer = vbb.asFloatBuffer();
+ // vertexBuffer.put(vertices);
+ // vertexBuffer.position(0);
- /**
- * @return the formatName
- */
- public String getFormatName() {
- return formatName;
- }
+ // image.setPixel(x, y, colorArray[((y*image.getWidth()+x))]);
+ }
+ private Bitmap copyPixelsFromBuffer() { // 从缓冲区中copy数据以加快像素处理速度
+ IntBuffer vbb = IntBuffer.wrap(colorArray);
+ Bitmap destImage = Bitmap.createBitmap(width, height, Config.ARGB_8888);
+ destImage.copyPixelsFromBuffer(vbb);
+ vbb.clear();
+ return destImage;
+ }
- /**
- * @param formatName the formatName to set
- */
- public void setFormatName(String formatName) {
- this.formatName = formatName;
- }
+ /**
+ * Method to get the RED color for the specified pixel
+ *
+ * @param x
+ * @param y
+ * @return color of R
+ */
+ public int getRComponent(int x, int y) {
+ return (getColorArray()[((y * width + x))] & 0x00FF0000) >>> 16;
+ }
+ /**
+ * Method to get the GREEN color for the specified pixel
+ *
+ * @param x
+ * @param y
+ * @return color of G
+ */
+ public int getGComponent(int x, int y) {
+ return (getColorArray()[((y * width + x))] & 0x0000FF00) >>> 8;
+ }
- /**
- * @return the width
- */
- public int getWidth() {
- return width;
- }
+ /**
+ * Method to get the BLUE color for the specified pixel
+ *
+ * @param x
+ * @param y
+ * @return color of B
+ */
+ public int getBComponent(int x, int y) {
+ return (getColorArray()[((y * width + x))] & 0x000000FF);
+ }
+ /**
+ * Method to rotate an image by the specified number of degrees
+ *
+ * @param rotateDegrees
+ */
+ // public void rotate (int rotateDegrees){
+ // Matrix mtx = new Matrix();
+ // mtx.postRotate(rotateDegrees);
+ // image = Bitmap.createBitmap(image, 0, 0, width, height, mtx, true);
+ // width = image.getWidth();
+ // height = image.getHeight();
+ // updateColorArray();
+ // }
- /**
- * @param width the width to set
- */
- public void setWidth(int width) {
- this.width = width;
- }
+ /**
+ * @return the image
+ */
+ public Bitmap getImage() {
+ return copyPixelsFromBuffer();
+ }
+ /**
+ * @return the formatName
+ */
+ public String getFormatName() {
+ return formatName;
+ }
- /**
- * @return the height
- */
- public int getHeight() {
- return height;
- }
+ /**
+ * @param formatName
+ * the formatName to set
+ */
+ public void setFormatName(String formatName) {
+ this.formatName = formatName;
+ }
+ /**
+ * @return the width
+ */
+ public int getWidth() {
+ return width;
+ }
- /**
- * @param height the height to set
- */
- public void setHeight(int height) {
- this.height = height;
- }
+ /**
+ * @param width
+ * the width to set
+ */
+ public void setWidth(int width) {
+ this.width = width;
+ }
+ /**
+ * @return the height
+ */
+ public int getHeight() {
+ return height;
+ }
- /**
- * @return the colorArray
- */
- public int[] getColorArray() {
- return colorArray;
- }
+ /**
+ * @param height
+ * the height to set
+ */
+ public void setHeight(int height) {
+ this.height = height;
+ }
+ /**
+ * @return the colorArray
+ */
+ public int[] getColorArray() {
+ return colorArray;
+ }
- /**
- * @param colorArray the colorArray to set
- */
- public void setColorArray(int[] colorArray) {
- this.colorArray = colorArray;
- }
+ /**
+ * @param colorArray
+ * the colorArray to set
+ */
+ public void setColorArray(int[] colorArray) {
+ this.colorArray = colorArray;
+ }
-
- public static int SAFECOLOR(int a) {
- if (a < 0)
- return 0;
- else if (a > 255)
- return 255;
- else
- return a;
- }
+ public static int SAFECOLOR(int a) {
+ if (a < 0)
+ return 0;
+ else if (a > 255)
+ return 255;
+ else
+ return a;
+ }
}
diff --git a/src/HaoRan/ImageFilter/Main/ImageFilterMain.java b/src/HaoRan/ImageFilter/Main/ImageFilterMain.java
index 0c977d5..8cb1649 100644
--- a/src/HaoRan/ImageFilter/Main/ImageFilterMain.java
+++ b/src/HaoRan/ImageFilter/Main/ImageFilterMain.java
@@ -1,246 +1,292 @@
-package HaoRan.ImageFilter.Main;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import HaoRan.ImageFilter.*;
-import HaoRan.ImageFilter.RadialDistortionFilter.Point;
-import HaoRan.ImageFilter.Distort.*;
-
-import android.app.Activity;
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Color;
-import android.opengl.Visibility;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.Handler;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.BaseAdapter;
-import android.widget.Gallery;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-public class ImageFilterMain extends Activity {
-
- private ImageView imageView;
- private TextView textView;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- imageView= (ImageView) findViewById(R.id.imgfilter);
- textView = (TextView) findViewById(R.id.runtime);
- //注:在android系统上,手机图片尺寸尽量控制在480*480范围内,否则在高斯运算时可以造成内存溢出的问题
- Bitmap bitmap = BitmapFactory.decodeResource(ImageFilterMain.this.getResources(), R.drawable.image);
- imageView.setImageBitmap(bitmap);
-
- LoadImageFilter();
- }
-
- /**
- * 加载图片filter
- */
- private void LoadImageFilter() {
- Gallery gallery = (Gallery) findViewById(R.id.galleryFilter);
- final ImageFilterAdapter filterAdapter = new ImageFilterAdapter(
- ImageFilterMain.this);
- gallery.setAdapter(new ImageFilterAdapter(ImageFilterMain.this));
- gallery.setSelection(2);
- gallery.setAnimationDuration(3000);
- gallery.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- public void onItemClick(AdapterView> arg0, View arg1, int position, long id) {
- IImageFilter filter = (IImageFilter) filterAdapter.getItem(position);
- new processImageTask(ImageFilterMain.this, filter).execute();
- }
- });
- }
-
- public class processImageTask extends AsyncTask {
- private IImageFilter filter;
- private Activity activity = null;
- public processImageTask(Activity activity, IImageFilter imageFilter) {
- this.filter = imageFilter;
- this.activity = activity;
- }
-
- @Override
- protected void onPreExecute() {
- // TODO Auto-generated method stub
- super.onPreExecute();
- textView.setVisibility(View.VISIBLE);
- }
-
- public Bitmap doInBackground(Void... params) {
- Image img = null;
- try
- {
- Bitmap bitmap = BitmapFactory.decodeResource(activity.getResources(), R.drawable.image);
- img = new Image(bitmap);
- if (filter != null) {
- img = filter.process(img);
- img.copyPixelsFromBuffer();
- }
- return img.getImage();
- }
- catch(Exception e){
- if (img != null && img.destImage.isRecycled()) {
- img.destImage.recycle();
- img.destImage = null;
- System.gc(); // 提醒系统及时回收
- }
- }
- finally{
- if (img != null && img.image.isRecycled()) {
- img.image.recycle();
- img.image = null;
- System.gc(); // 提醒系统及时回收
- }
- }
- return null;
- }
-
- @Override
- protected void onPostExecute(Bitmap result) {
- if(result != null){
- super.onPostExecute(result);
- imageView.setImageBitmap(result);
- }
- textView.setVisibility(View.GONE);
- }
- }
-
- public class ImageFilterAdapter extends BaseAdapter {
- private class FilterInfo {
- public int filterID;
- public IImageFilter filter;
-
- public FilterInfo(int filterID, IImageFilter filter) {
- this.filterID = filterID;
- this.filter = filter;
- }
- }
-
- private Context mContext;
- private List filterArray = new ArrayList();
-
- public ImageFilterAdapter(Context c) {
- mContext = c;
- //加载滤镜列表
-
- //v0.3 目前 共提供73种效果
- filterArray.add(new FilterInfo(R.drawable.zoomblur_filter, new ZoomBlurFilter(30)));
- filterArray.add(new FilterInfo(R.drawable.threedgrid_filter, new ThreeDGridFilter(16, 100)));
- filterArray.add(new FilterInfo(R.drawable.colortone_filter, new ColorToneFilter(Color.rgb(33, 168, 254), 192)));
- filterArray.add(new FilterInfo(R.drawable.colortone_filter2, new ColorToneFilter(0x00FF00, 192)));//green
- filterArray.add(new FilterInfo(R.drawable.colortone_filter3, new ColorToneFilter(0xFF0000, 192)));//blue
- filterArray.add(new FilterInfo(R.drawable.colortone_filter4, new ColorToneFilter(0x00FFFF, 192)));//yellow
- filterArray.add(new FilterInfo(R.drawable.softglow_filter, new SoftGlowFilter(10, 0.1f, 0.1f)));
- filterArray.add(new FilterInfo(R.drawable.tilereflection_filter, new TileReflectionFilter(20, 8)));
- filterArray.add(new FilterInfo(R.drawable.blind_filter1, new BlindFilter(true, 96, 100, 0xffffff)));
- filterArray.add(new FilterInfo(R.drawable.blind_filter2, new BlindFilter(false, 96, 100, 0x000000)));
- filterArray.add(new FilterInfo(R.drawable.raiseframe_filter, new RaiseFrameFilter(20)));
- filterArray.add(new FilterInfo(R.drawable.shift_filter, new ShiftFilter(10)));
- filterArray.add(new FilterInfo(R.drawable.wave_filter, new WaveFilter(25, 10)));
- filterArray.add(new FilterInfo(R.drawable.bulge_filter, new BulgeFilter(-97)));
- filterArray.add(new FilterInfo(R.drawable.twist_filter, new TwistFilter(27, 106)));
- filterArray.add(new FilterInfo(R.drawable.ripple_filter, new RippleFilter(38, 15, true)));
- filterArray.add(new FilterInfo(R.drawable.illusion_filter, new IllusionFilter(3)));
- filterArray.add(new FilterInfo(R.drawable.supernova_filter, new SupernovaFilter(0x00FFFF,20,100)));
- filterArray.add(new FilterInfo(R.drawable.lensflare_filter, new LensFlareFilter()));
- filterArray.add(new FilterInfo(R.drawable.posterize_filter, new PosterizeFilter(2)));
- filterArray.add(new FilterInfo(R.drawable.gamma_filter, new GammaFilter(50)));
- filterArray.add(new FilterInfo(R.drawable.sharp_filter, new SharpFilter()));
-
- //v0.2
- filterArray.add(new FilterInfo(R.drawable.invert_filter, new ComicFilter()));
- filterArray.add(new FilterInfo(R.drawable.invert_filter, new SceneFilter(5f, Gradient.Scene())));//green
- filterArray.add(new FilterInfo(R.drawable.invert_filter, new SceneFilter(5f, Gradient.Scene1())));//purple
- filterArray.add(new FilterInfo(R.drawable.invert_filter, new SceneFilter(5f, Gradient.Scene2())));//blue
- filterArray.add(new FilterInfo(R.drawable.invert_filter, new SceneFilter(5f, Gradient.Scene3())));
- filterArray.add(new FilterInfo(R.drawable.invert_filter, new FilmFilter(80f)));
- filterArray.add(new FilterInfo(R.drawable.invert_filter, new FocusFilter()));
- filterArray.add(new FilterInfo(R.drawable.invert_filter, new CleanGlassFilter()));
- filterArray.add(new FilterInfo(R.drawable.invert_filter, new PaintBorderFilter(0x00FF00)));//green
- filterArray.add(new FilterInfo(R.drawable.invert_filter, new PaintBorderFilter(0x00FFFF)));//yellow
- filterArray.add(new FilterInfo(R.drawable.invert_filter, new PaintBorderFilter(0xFF0000)));//blue
- filterArray.add(new FilterInfo(R.drawable.invert_filter, new LomoFilter()));
-
- //v0.1
- filterArray.add(new FilterInfo(R.drawable.invert_filter, new InvertFilter()));
- filterArray.add(new FilterInfo(R.drawable.blackwhite_filter, new BlackWhiteFilter()));
- filterArray.add(new FilterInfo(R.drawable.edge_filter, new EdgeFilter()));
- filterArray.add(new FilterInfo(R.drawable.pixelate_filter, new PixelateFilter()));
- filterArray.add(new FilterInfo(R.drawable.neon_filter, new NeonFilter()));
- filterArray.add(new FilterInfo(R.drawable.bigbrother_filter, new BigBrotherFilter()));
- filterArray.add(new FilterInfo(R.drawable.monitor_filter, new MonitorFilter()));
- filterArray.add(new FilterInfo(R.drawable.relief_filter, new ReliefFilter()));
- filterArray.add(new FilterInfo(R.drawable.brightcontrast_filter,new BrightContrastFilter()));
- filterArray.add(new FilterInfo(R.drawable.saturationmodity_filter, new SaturationModifyFilter()));
- filterArray.add(new FilterInfo(R.drawable.threshold_filter, new ThresholdFilter()));
- filterArray.add(new FilterInfo(R.drawable.noisefilter, new NoiseFilter()));
- filterArray.add(new FilterInfo(R.drawable.banner_filter1, new BannerFilter(10, true)));
- filterArray.add(new FilterInfo(R.drawable.banner_filter2, new BannerFilter(10, false)));
- filterArray.add(new FilterInfo(R.drawable.rectmatrix_filter, new RectMatrixFilter()));
- filterArray.add(new FilterInfo(R.drawable.blockprint_filter, new BlockPrintFilter()));
- filterArray.add(new FilterInfo(R.drawable.brick_filter, new BrickFilter()));
- filterArray.add(new FilterInfo(R.drawable.gaussianblur_filter, new GaussianBlurFilter()));
- filterArray.add(new FilterInfo(R.drawable.light_filter, new LightFilter()));
- filterArray.add(new FilterInfo(R.drawable.mosaic_filter,new MistFilter()));
- filterArray.add(new FilterInfo(R.drawable.mosaic_filter,new MosaicFilter()));
- filterArray.add(new FilterInfo(R.drawable.oilpaint_filter, new OilPaintFilter()));
- filterArray.add(new FilterInfo(R.drawable.radialdistortion_filter,new RadialDistortionFilter()));
- filterArray.add(new FilterInfo(R.drawable.reflection1_filter,new ReflectionFilter(true)));
- filterArray.add(new FilterInfo(R.drawable.reflection2_filter,new ReflectionFilter(false)));
- filterArray.add(new FilterInfo(R.drawable.saturationmodify_filter, new SaturationModifyFilter()));
- filterArray.add(new FilterInfo(R.drawable.smashcolor_filter,new SmashColorFilter()));
- filterArray.add(new FilterInfo(R.drawable.tint_filter, new TintFilter()));
- filterArray.add(new FilterInfo(R.drawable.vignette_filter, new VignetteFilter()));
- filterArray.add(new FilterInfo(R.drawable.autoadjust_filter,new AutoAdjustFilter()));
- filterArray.add(new FilterInfo(R.drawable.colorquantize_filter, new ColorQuantizeFilter()));
- filterArray.add(new FilterInfo(R.drawable.waterwave_filter, new WaterWaveFilter()));
- filterArray.add(new FilterInfo(R.drawable.vintage_filter,new VintageFilter()));
- filterArray.add(new FilterInfo(R.drawable.oldphoto_filter,new OldPhotoFilter()));
- filterArray.add(new FilterInfo(R.drawable.sepia_filter, new SepiaFilter()));
- filterArray.add(new FilterInfo(R.drawable.rainbow_filter,new RainBowFilter()));
- filterArray.add(new FilterInfo(R.drawable.feather_filter,new FeatherFilter()));
- filterArray.add(new FilterInfo(R.drawable.xradiation_filter,new XRadiationFilter()));
- filterArray.add(new FilterInfo(R.drawable.nightvision_filter,new NightVisionFilter()));
-
- filterArray.add(new FilterInfo(R.drawable.saturationmodity_filter,null/* 此处会生成原图效果 */));
- }
-
- public int getCount() {
- return filterArray.size();
- }
-
- public Object getItem(int position) {
- return position < filterArray.size() ? filterArray.get(position).filter
- : null;
- }
-
- public long getItemId(int position) {
- return position;
- }
-
- public View getView(int position, View convertView, ViewGroup parent) {
- Bitmap bmImg = BitmapFactory
- .decodeResource(mContext.getResources(),
- filterArray.get(position).filterID);
- int width = 100;// bmImg.getWidth();
- int height = 100;// bmImg.getHeight();
- bmImg.recycle();
- ImageView imageview = new ImageView(mContext);
- imageview.setImageResource(filterArray.get(position).filterID);
- imageview.setLayoutParams(new Gallery.LayoutParams(width, height));
- imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);// 设置显示比例类型
- return imageview;
- }
- };
-
-}
+package HaoRan.ImageFilter.Main;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import HaoRan.ImageFilter.AutoAdjustFilter;
+import HaoRan.ImageFilter.BannerFilter;
+import HaoRan.ImageFilter.BigBrotherFilter;
+import HaoRan.ImageFilter.BlackWhiteFilter;
+import HaoRan.ImageFilter.BlindFilter;
+import HaoRan.ImageFilter.BlockPrintFilter;
+import HaoRan.ImageFilter.BrickFilter;
+import HaoRan.ImageFilter.BrightContrastFilter;
+import HaoRan.ImageFilter.CleanGlassFilter;
+import HaoRan.ImageFilter.ColorQuantizeFilter;
+import HaoRan.ImageFilter.ColorToneFilter;
+import HaoRan.ImageFilter.ComicFilter;
+import HaoRan.ImageFilter.EdgeFilter;
+import HaoRan.ImageFilter.FeatherFilter;
+import HaoRan.ImageFilter.FilmFilter;
+import HaoRan.ImageFilter.FocusFilter;
+import HaoRan.ImageFilter.GammaFilter;
+import HaoRan.ImageFilter.GaussianBlurFilter;
+import HaoRan.ImageFilter.Gradient;
+import HaoRan.ImageFilter.IImageFilter;
+import HaoRan.ImageFilter.IllusionFilter;
+import HaoRan.ImageFilter.Image;
+import HaoRan.ImageFilter.InvertFilter;
+import HaoRan.ImageFilter.LensFlareFilter;
+import HaoRan.ImageFilter.LightFilter;
+import HaoRan.ImageFilter.LomoFilter;
+import HaoRan.ImageFilter.MistFilter;
+import HaoRan.ImageFilter.MonitorFilter;
+import HaoRan.ImageFilter.MosaicFilter;
+import HaoRan.ImageFilter.NeonFilter;
+import HaoRan.ImageFilter.NightVisionFilter;
+import HaoRan.ImageFilter.NoiseFilter;
+import HaoRan.ImageFilter.OilPaintFilter;
+import HaoRan.ImageFilter.OldPhotoFilter;
+import HaoRan.ImageFilter.PaintBorderFilter;
+import HaoRan.ImageFilter.PixelateFilter;
+import HaoRan.ImageFilter.PosterizeFilter;
+import HaoRan.ImageFilter.R;
+import HaoRan.ImageFilter.RadialDistortionFilter;
+import HaoRan.ImageFilter.RainBowFilter;
+import HaoRan.ImageFilter.RaiseFrameFilter;
+import HaoRan.ImageFilter.RectMatrixFilter;
+import HaoRan.ImageFilter.ReflectionFilter;
+import HaoRan.ImageFilter.ReliefFilter;
+import HaoRan.ImageFilter.SaturationModifyFilter;
+import HaoRan.ImageFilter.SceneFilter;
+import HaoRan.ImageFilter.SepiaFilter;
+import HaoRan.ImageFilter.SharpFilter;
+import HaoRan.ImageFilter.ShiftFilter;
+import HaoRan.ImageFilter.SmashColorFilter;
+import HaoRan.ImageFilter.SoftGlowFilter;
+import HaoRan.ImageFilter.SupernovaFilter;
+import HaoRan.ImageFilter.ThreeDGridFilter;
+import HaoRan.ImageFilter.ThresholdFilter;
+import HaoRan.ImageFilter.TileReflectionFilter;
+import HaoRan.ImageFilter.TintFilter;
+import HaoRan.ImageFilter.VignetteFilter;
+import HaoRan.ImageFilter.VintageFilter;
+import HaoRan.ImageFilter.WaterWaveFilter;
+import HaoRan.ImageFilter.XRadiationFilter;
+import HaoRan.ImageFilter.ZoomBlurFilter;
+import HaoRan.ImageFilter.Distort.BulgeFilter;
+import HaoRan.ImageFilter.Distort.RippleFilter;
+import HaoRan.ImageFilter.Distort.TwistFilter;
+import HaoRan.ImageFilter.Distort.WaveFilter;
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Color;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
+import android.widget.Gallery;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+public class ImageFilterMain extends Activity {
+
+ private ImageView imageView;
+ private TextView textView;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+
+ imageView= (ImageView) findViewById(R.id.imgfilter);
+ textView = (TextView) findViewById(R.id.runtime);
+ //注:在android系统上,手机图片尺寸尽量控制在480*480范围内,否则在高斯运算时可以造成内存溢出的问题
+ Bitmap bitmap = BitmapFactory.decodeResource(ImageFilterMain.this.getResources(), R.drawable.image);
+ imageView.setImageBitmap(bitmap);
+
+ LoadImageFilter();
+ }
+
+ /**
+ * 加载图片filter
+ */
+ private void LoadImageFilter() {
+ Gallery gallery = (Gallery) findViewById(R.id.galleryFilter);
+ final ImageFilterAdapter filterAdapter = new ImageFilterAdapter(
+ ImageFilterMain.this);
+ gallery.setAdapter(new ImageFilterAdapter(ImageFilterMain.this));
+ gallery.setSelection(2);
+ gallery.setAnimationDuration(3000);
+ gallery.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ public void onItemClick(AdapterView> arg0, View arg1, int position, long id) {
+ IImageFilter filter = (IImageFilter) filterAdapter.getItem(position);
+ new processImageTask(ImageFilterMain.this, filter).execute();
+ }
+ });
+ }
+
+ public class processImageTask extends AsyncTask {
+ private IImageFilter filter;
+ private Activity activity = null;
+ public processImageTask(Activity activity, IImageFilter imageFilter) {
+ this.filter = imageFilter;
+ this.activity = activity;
+ }
+
+ @Override
+ protected void onPreExecute() {
+ // TODO Auto-generated method stub
+ super.onPreExecute();
+ textView.setVisibility(View.VISIBLE);
+ }
+
+ public Bitmap doInBackground(Void... params) {
+ Image img = null;
+ try
+ {
+ Bitmap bitmap = BitmapFactory.decodeResource(activity.getResources(), R.drawable.image);
+ img = new Image(bitmap);
+ if (filter != null) {
+ img = filter.process(img);
+ }
+ return img.getImage();
+ }
+ catch(Exception e){
+ }
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Bitmap result) {
+ if(result != null){
+ super.onPostExecute(result);
+ imageView.setImageBitmap(result);
+ }
+ textView.setVisibility(View.GONE);
+ }
+ }
+
+ public class ImageFilterAdapter extends BaseAdapter {
+ private class FilterInfo {
+ public int filterID;
+ public IImageFilter filter;
+
+ public FilterInfo(int filterID, IImageFilter filter) {
+ this.filterID = filterID;
+ this.filter = filter;
+ }
+ }
+
+ private Context mContext;
+ private List filterArray = new ArrayList();
+
+ public ImageFilterAdapter(Context c) {
+ mContext = c;
+ //加载滤镜列表
+
+ //v0.3 目前 共提供73种效果
+ filterArray.add(new FilterInfo(R.drawable.zoomblur_filter, new ZoomBlurFilter(30)));
+ filterArray.add(new FilterInfo(R.drawable.threedgrid_filter, new ThreeDGridFilter(16, 100)));
+ filterArray.add(new FilterInfo(R.drawable.colortone_filter, new ColorToneFilter(Color.rgb(33, 168, 254), 192)));
+ filterArray.add(new FilterInfo(R.drawable.colortone_filter2, new ColorToneFilter(0x00FF00, 192)));//green
+ filterArray.add(new FilterInfo(R.drawable.colortone_filter3, new ColorToneFilter(0xFF0000, 192)));//blue
+ filterArray.add(new FilterInfo(R.drawable.colortone_filter4, new ColorToneFilter(0x00FFFF, 192)));//yellow
+ filterArray.add(new FilterInfo(R.drawable.softglow_filter, new SoftGlowFilter(10, 0.1f, 0.1f)));
+ filterArray.add(new FilterInfo(R.drawable.tilereflection_filter, new TileReflectionFilter(20, 8)));
+ filterArray.add(new FilterInfo(R.drawable.blind_filter1, new BlindFilter(true, 96, 100, 0xffffff)));
+ filterArray.add(new FilterInfo(R.drawable.blind_filter2, new BlindFilter(false, 96, 100, 0x000000)));
+ filterArray.add(new FilterInfo(R.drawable.raiseframe_filter, new RaiseFrameFilter(20)));
+ filterArray.add(new FilterInfo(R.drawable.shift_filter, new ShiftFilter(10)));
+ filterArray.add(new FilterInfo(R.drawable.wave_filter, new WaveFilter(25, 10)));
+ filterArray.add(new FilterInfo(R.drawable.bulge_filter, new BulgeFilter(-97)));
+ filterArray.add(new FilterInfo(R.drawable.twist_filter, new TwistFilter(27, 106)));
+ filterArray.add(new FilterInfo(R.drawable.ripple_filter, new RippleFilter(38, 15, true)));
+ filterArray.add(new FilterInfo(R.drawable.illusion_filter, new IllusionFilter(3)));
+ filterArray.add(new FilterInfo(R.drawable.supernova_filter, new SupernovaFilter(0x00FFFF,20,100)));
+ filterArray.add(new FilterInfo(R.drawable.lensflare_filter, new LensFlareFilter()));
+ filterArray.add(new FilterInfo(R.drawable.posterize_filter, new PosterizeFilter(2)));
+ filterArray.add(new FilterInfo(R.drawable.gamma_filter, new GammaFilter(50)));
+ filterArray.add(new FilterInfo(R.drawable.sharp_filter, new SharpFilter()));
+
+ //v0.2
+ filterArray.add(new FilterInfo(R.drawable.invert_filter, new ComicFilter()));
+ filterArray.add(new FilterInfo(R.drawable.invert_filter, new SceneFilter(5f, Gradient.Scene())));//green
+ filterArray.add(new FilterInfo(R.drawable.invert_filter, new SceneFilter(5f, Gradient.Scene1())));//purple
+ filterArray.add(new FilterInfo(R.drawable.invert_filter, new SceneFilter(5f, Gradient.Scene2())));//blue
+ filterArray.add(new FilterInfo(R.drawable.invert_filter, new SceneFilter(5f, Gradient.Scene3())));
+ filterArray.add(new FilterInfo(R.drawable.invert_filter, new FilmFilter(80f)));
+ filterArray.add(new FilterInfo(R.drawable.invert_filter, new FocusFilter()));
+ filterArray.add(new FilterInfo(R.drawable.invert_filter, new CleanGlassFilter()));
+ filterArray.add(new FilterInfo(R.drawable.invert_filter, new PaintBorderFilter(0x00FF00)));//green
+ filterArray.add(new FilterInfo(R.drawable.invert_filter, new PaintBorderFilter(0x00FFFF)));//yellow
+ filterArray.add(new FilterInfo(R.drawable.invert_filter, new PaintBorderFilter(0xFF0000)));//blue
+ filterArray.add(new FilterInfo(R.drawable.invert_filter, new LomoFilter()));
+
+ //v0.1
+ filterArray.add(new FilterInfo(R.drawable.invert_filter, new InvertFilter()));
+ filterArray.add(new FilterInfo(R.drawable.blackwhite_filter, new BlackWhiteFilter()));
+ filterArray.add(new FilterInfo(R.drawable.edge_filter, new EdgeFilter()));
+ filterArray.add(new FilterInfo(R.drawable.pixelate_filter, new PixelateFilter()));
+ filterArray.add(new FilterInfo(R.drawable.neon_filter, new NeonFilter()));
+ filterArray.add(new FilterInfo(R.drawable.bigbrother_filter, new BigBrotherFilter()));
+ filterArray.add(new FilterInfo(R.drawable.monitor_filter, new MonitorFilter()));
+ filterArray.add(new FilterInfo(R.drawable.relief_filter, new ReliefFilter()));
+ filterArray.add(new FilterInfo(R.drawable.brightcontrast_filter,new BrightContrastFilter()));
+ filterArray.add(new FilterInfo(R.drawable.saturationmodity_filter, new SaturationModifyFilter()));
+ filterArray.add(new FilterInfo(R.drawable.threshold_filter, new ThresholdFilter()));
+ filterArray.add(new FilterInfo(R.drawable.noisefilter, new NoiseFilter()));
+ filterArray.add(new FilterInfo(R.drawable.banner_filter1, new BannerFilter(10, true)));
+ filterArray.add(new FilterInfo(R.drawable.banner_filter2, new BannerFilter(10, false)));
+ filterArray.add(new FilterInfo(R.drawable.rectmatrix_filter, new RectMatrixFilter()));
+ filterArray.add(new FilterInfo(R.drawable.blockprint_filter, new BlockPrintFilter()));
+ filterArray.add(new FilterInfo(R.drawable.brick_filter, new BrickFilter()));
+ filterArray.add(new FilterInfo(R.drawable.gaussianblur_filter, new GaussianBlurFilter()));
+ filterArray.add(new FilterInfo(R.drawable.light_filter, new LightFilter()));
+ filterArray.add(new FilterInfo(R.drawable.mosaic_filter,new MistFilter()));
+ filterArray.add(new FilterInfo(R.drawable.mosaic_filter,new MosaicFilter()));
+ filterArray.add(new FilterInfo(R.drawable.oilpaint_filter, new OilPaintFilter()));
+ filterArray.add(new FilterInfo(R.drawable.radialdistortion_filter,new RadialDistortionFilter()));
+ filterArray.add(new FilterInfo(R.drawable.reflection1_filter,new ReflectionFilter(true)));
+ filterArray.add(new FilterInfo(R.drawable.reflection2_filter,new ReflectionFilter(false)));
+ filterArray.add(new FilterInfo(R.drawable.saturationmodify_filter, new SaturationModifyFilter()));
+ filterArray.add(new FilterInfo(R.drawable.smashcolor_filter,new SmashColorFilter()));
+ filterArray.add(new FilterInfo(R.drawable.tint_filter, new TintFilter()));
+ filterArray.add(new FilterInfo(R.drawable.vignette_filter, new VignetteFilter()));
+ filterArray.add(new FilterInfo(R.drawable.autoadjust_filter,new AutoAdjustFilter()));
+ filterArray.add(new FilterInfo(R.drawable.colorquantize_filter, new ColorQuantizeFilter()));
+ filterArray.add(new FilterInfo(R.drawable.waterwave_filter, new WaterWaveFilter()));
+ filterArray.add(new FilterInfo(R.drawable.vintage_filter,new VintageFilter()));
+ filterArray.add(new FilterInfo(R.drawable.oldphoto_filter,new OldPhotoFilter()));
+ filterArray.add(new FilterInfo(R.drawable.sepia_filter, new SepiaFilter()));
+ filterArray.add(new FilterInfo(R.drawable.rainbow_filter,new RainBowFilter()));
+ filterArray.add(new FilterInfo(R.drawable.feather_filter,new FeatherFilter()));
+ filterArray.add(new FilterInfo(R.drawable.xradiation_filter,new XRadiationFilter()));
+ filterArray.add(new FilterInfo(R.drawable.nightvision_filter,new NightVisionFilter()));
+
+ filterArray.add(new FilterInfo(R.drawable.saturationmodity_filter,null/* 此处会生成原图效果 */));
+ }
+
+ public int getCount() {
+ return filterArray.size();
+ }
+
+ public Object getItem(int position) {
+ return position < filterArray.size() ? filterArray.get(position).filter
+ : null;
+ }
+
+ public long getItemId(int position) {
+ return position;
+ }
+
+ public View getView(int position, View convertView, ViewGroup parent) {
+ Bitmap bmImg = BitmapFactory
+ .decodeResource(mContext.getResources(),
+ filterArray.get(position).filterID);
+ int width = 100;// bmImg.getWidth();
+ int height = 100;// bmImg.getHeight();
+ bmImg.recycle();
+ ImageView imageview = new ImageView(mContext);
+ imageview.setImageResource(filterArray.get(position).filterID);
+ imageview.setLayoutParams(new Gallery.LayoutParams(width, height));
+ imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);// 设置显示比例类型
+ return imageview;
+ }
+ };
+
+}