package com.jarlen.picturetest; import com.jarlen.view.VerticalSeekBar; import com.js.photosdk.filter.FilterType; import com.js.photosdk.filter.NativeFilters; import com.js.photosdk.utils.FileUtils; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Bitmap.Config; import android.graphics.BitmapFactory.Options; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; public class ImageFilterActivity extends Activity implements OnClickListener { private ImageView pictureShow; private String picturePath = null; private Bitmap pictureBitmap = null; private ImageButton backBtn, okBtn; private int scale = 2; private ImageView filterImg; private VerticalSeekBar mVerticalSeekBar; private TextView mSeekBarProgress; private NativeFilters nativeFilters = new NativeFilters(); private int updateTimeTip = 5; private int srcWidth, srcHeight; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_filter); initializateView(); findDate(); } private void initializateView() { pictureShow = (ImageView) findViewById(R.id.pictureShow); mVerticalSeekBar = (VerticalSeekBar) findViewById(R.id.verticalSeekBar); mSeekBarProgress = (TextView) findViewById(R.id.verticalSeekBarProgressText); backBtn = (ImageButton) findViewById(R.id.btn_cancel); backBtn.setOnClickListener(this); okBtn = (ImageButton) findViewById(R.id.btn_ok); okBtn.setOnClickListener(this); mVerticalSeekBar.setMax(100); mVerticalSeekBar .setOnSeekBarChangeListener(new OnSeekBarChangeListener() { int mProgress = 0; @Override public void onStopTrackingTouch(SeekBar seekBar) { mSeekBarProgress.setText(mProgress + "%"); float degree = mProgress / 100.0f; updatePicture(degree); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { mProgress = progress; } }); initFiltersView(); } Bitmap newBitmap; private void findDate() { Intent filterIntent = getIntent(); picturePath = filterIntent.getStringExtra("camera_path"); Options option = new Options(); option.inSampleSize = 1; pictureBitmap = BitmapFactory.decodeFile(picturePath, option); newBitmap = pictureBitmap; srcWidth = pictureBitmap.getWidth(); srcHeight = pictureBitmap.getHeight(); Log.i("jarlen", "srcWidth = " + srcWidth + " srcHeight = " + srcHeight); pictureShow.setImageBitmap(newBitmap); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_cancel : Intent cancelData = new Intent(); setResult(RESULT_CANCELED, cancelData); recycle(); this.finish(); break; case R.id.btn_ok : FileUtils.writeImage(resultImg, picturePath, 100); Intent intent = new Intent(); intent.putExtra("camera_path", picturePath); setResult(Activity.RESULT_OK, intent); recycle(); this.finish(); break; default : break; } } private int filterType = FilterType.FILTER4GRAY; Bitmap resultImg = null; private void updatePicture(float degree) { int[] dataResult = null; int[] pix = new int[srcWidth * srcHeight]; newBitmap.getPixels(pix, 0, srcWidth, 0, 0, srcWidth, srcHeight); switch (filterType) { case FilterType.FILTER4GRAY : dataResult = nativeFilters.ToGray(pix, srcWidth, srcHeight, degree); break; case FilterType.FILTER4MOSATIC : int mosatic = (int) (degree * 30); dataResult = nativeFilters.ToMosatic(pix, srcWidth, srcHeight, mosatic); break; case FilterType.FILTER4LOMO : dataResult = nativeFilters.ToLOMO(pix, srcWidth, srcHeight, degree); break; case FilterType.FILTER4NOSTALGIC : dataResult = nativeFilters.ToNostalgic(pix, srcWidth, srcHeight, degree); break; case FilterType.FILTER4COMICS : dataResult = nativeFilters.ToComics(pix, srcWidth, srcHeight, degree); break; case FilterType.FILTER4BlackWhite : dataResult = nativeFilters.ToBlackWhite(pix, srcWidth, srcHeight, degree); break; case FilterType.FILTER4NEGATIVE : dataResult = nativeFilters.ToNegative(pix, srcWidth, srcHeight, degree); break; case FilterType.FILTER4BROWN : dataResult = nativeFilters.ToBrown(pix, srcWidth, srcHeight, degree); break; case FilterType.FILTER4SKETCH_PENCIL : dataResult = nativeFilters.ToSketchPencil(pix, srcWidth, srcHeight, degree); break; case FilterType.FILTER4OVEREXPOSURE : dataResult = nativeFilters.ToOverExposure(pix, srcWidth, srcHeight, degree); break; case FilterType.FILTER4WHITELOG : dataResult = nativeFilters.ToWhiteLOG(pix, srcWidth, srcHeight, FilterType.BeitaOfWhiteLOG, degree); break; // // case FilterType.FILTER4SOFTNESS : dataResult = nativeFilters.ToSoftness(pix, srcWidth, srcHeight, degree); break; case FilterType.FILTER4NiHong : dataResult = nativeFilters.ToNiHong(pix, srcWidth, srcHeight, degree); break; case FilterType.FILTER4SKETCH : dataResult = nativeFilters.ToSketch(pix, srcWidth, srcHeight, degree); break; // case FilterType.FILTER4CARVING : // dataResult = nativeFilters.ToCarving(pix, w, h, degree); // break; case FilterType.FILTER4RELIEF : dataResult = nativeFilters.ToRelief(pix, srcWidth, srcHeight, degree); break; // case FilterType.FILTER4RUIHUA : // dataResult = nativeFilters.ToRuiHua(pix, w, h, degree); // break; default : break; } resultImg = Bitmap.createBitmap(dataResult, srcWidth, srcHeight, Config.ARGB_8888); // FilterType filterType = new FilterType(); // Bitmap resultImg = filterType.createPencli(newBitmap); pictureShow.setImageBitmap(resultImg); } private TextView filterWhite, filterGray, filterMosatic, filterLOMO, filterNostalgic, filterComics, filterBlackWhite, filterNegative, filterBrown, filterSketchPencil, filterOverExposure, filterSoftness, filterNiHong, filterSketch, filterCarving, filterSelief, filterRuiHua; private void initFiltersView() { filterWhite = (TextView) findViewById(R.id.filterWhite); filterWhite.setOnClickListener(new FilterOnClickListener()); filterGray = (TextView) findViewById(R.id.filterGray); filterGray.setOnClickListener(new FilterOnClickListener()); filterMosatic = (TextView) findViewById(R.id.filterMosatic); filterMosatic.setOnClickListener(new FilterOnClickListener()); filterLOMO = (TextView) findViewById(R.id.filterLOMO); filterLOMO.setOnClickListener(new FilterOnClickListener()); filterNostalgic = (TextView) findViewById(R.id.filterNostalgic); filterNostalgic.setOnClickListener(new FilterOnClickListener()); filterComics = (TextView) findViewById(R.id.filterComics); filterComics.setOnClickListener(new FilterOnClickListener()); filterBlackWhite = (TextView) findViewById(R.id.filterBlackWhite); filterBlackWhite.setOnClickListener(new FilterOnClickListener()); filterNegative = (TextView) findViewById(R.id.filterNegative); filterNegative.setOnClickListener(new FilterOnClickListener()); filterBrown = (TextView) findViewById(R.id.filterBrown); filterBrown.setOnClickListener(new FilterOnClickListener()); filterSketchPencil = (TextView) findViewById(R.id.filterSketchPencil); filterSketchPencil.setOnClickListener(new FilterOnClickListener()); filterOverExposure = (TextView) findViewById(R.id.filterOverExposure); filterOverExposure.setOnClickListener(new FilterOnClickListener()); // //// filterSoftness = (TextView) findViewById(R.id.filterSoftness); filterSoftness.setOnClickListener(new FilterOnClickListener()); filterNiHong = (TextView) findViewById(R.id.filterNiHong); filterNiHong.setOnClickListener(new FilterOnClickListener()); filterSketch = (TextView) findViewById(R.id.filterSketch); filterSketch.setOnClickListener(new FilterOnClickListener()); // filterCarving = (TextView) findViewById(R.id.filterCarving); // filterCarving.setOnClickListener(new FilterOnClickListener()); // filterSelief = (TextView) findViewById(R.id.filterSelief); // filterSelief.setOnClickListener(new FilterOnClickListener()); // // filterRuiHua = (TextView) findViewById(R.id.filterRuiHua); // filterRuiHua.setOnClickListener(new FilterOnClickListener()); } private class FilterOnClickListener implements OnClickListener { @Override public void onClick(View view) { // Log.i("jarlen", " view.getId = " + view.getId()); switch (view.getId()) { case R.id.filterWhite : filterType = FilterType.FILTER4WHITELOG; break; case R.id.filterGray : filterType = FilterType.FILTER4GRAY; break; case R.id.filterBlackWhite : filterType = FilterType.FILTER4BlackWhite; break; case R.id.filterMosatic : filterType = FilterType.FILTER4MOSATIC; break; case R.id.filterComics : filterType = FilterType.FILTER4COMICS; break; case R.id.filterBrown : filterType = FilterType.FILTER4BROWN; break; case R.id.filterLOMO : filterType = FilterType.FILTER4LOMO; break; case R.id.filterNegative : filterType = FilterType.FILTER4NEGATIVE; break; case R.id.filterNostalgic : filterType = FilterType.FILTER4NOSTALGIC; break; case R.id.filterOverExposure : filterType = FilterType.FILTER4OVEREXPOSURE; break; case R.id.filterSketchPencil : filterType = FilterType.FILTER4SKETCH_PENCIL; break; // +6 by jarlen 2014/11/9 case R.id.filterSoftness : filterType = FilterType.FILTER4SOFTNESS; break; case R.id.filterNiHong : filterType = FilterType.FILTER4NiHong; break; case R.id.filterSketch : filterType = FilterType.FILTER4SKETCH; break; // case R.id.filterCarving : // filterType = FilterType.FILTER4CARVING; // break; // case R.id.filterSelief : // filterType = FilterType.FILTER4RELIEF; // break; // case R.id.filterRuiHua : // filterType = FilterType.FILTER4RUIHUA; // break; default : break; } updatePicture(1); mVerticalSeekBar.setProgress(100); mSeekBarProgress.setText(100 + "%"); mVerticalSeekBar.setProgressAndThumb(mVerticalSeekBar.getMax()); } } private void recycle() { if (pictureBitmap != null) { pictureBitmap.recycle(); pictureBitmap = null; } if (newBitmap != null) { newBitmap.recycle(); newBitmap = null; } } }