Modify the AndroidImageProcessingActivity.java from last article "Image Processing with open JPG file dialog". Other files keep no change.
package com.AndroidImageProcessing; import java.io.File; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.Dialog; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.webkit.MimeTypeMap; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; public class AndroidImageProcessingActivity extends Activity { //for Load JPG dialog Button buttonUp; static final int LOAD_DIALOG_ID = 0; TextView textFolder; ListView dialog_ListView; private List<String> fileList = new ArrayList<String>(); File root; File curFolder; ImageView imageSource, imageAfter; Bitmap bitmap_Source; ProgressBar progressBar; private Handler handler; Bitmap afterProcess; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); imageSource = (ImageView)findViewById(R.id.imageSource); imageAfter = (ImageView)findViewById(R.id.imageAfter); progressBar = (ProgressBar)findViewById(R.id.progressBar); progressBar.setVisibility(View.GONE); bitmap_Source = BitmapFactory.decodeResource(getResources(), R.drawable.testpicture); handler = new Handler(); //performImageProcessing(bitmap_Source); root = new File(Environment .getExternalStorageDirectory() .getAbsolutePath()); curFolder = root; } private void performImageProcessing(Bitmap bmSrc){ imageSource.setImageBitmap(bmSrc); progressBar.setVisibility(View.VISIBLE); imageAfter.setVisibility(View.GONE); StratBackgroundProcess(bmSrc); } private void StratBackgroundProcess(final Bitmap bm_src){ Runnable runnable = new Runnable(){ @Override public void run() { //afterProcess = processingBitmap(bm_src, kernal_blur); afterProcess = InverseBitmap(bm_src); handler.post(new Runnable(){ @Override public void run() { progressBar.setVisibility(View.GONE); imageAfter.setVisibility(View.VISIBLE); imageAfter.setImageBitmap(afterProcess); } }); } }; new Thread(runnable).start(); } private Bitmap InverseBitmap(Bitmap src){ Bitmap dest = Bitmap.createBitmap( src.getWidth(), src.getHeight(), src.getConfig()); for(int i = 0; i < src.getWidth(); i++){ for(int j = 0; j < src.getHeight(); j++){ dest.setPixel(i, j, Color.argb( Color.alpha(src.getPixel(i, j)), 255 - Color.red(src.getPixel(i, j)), 255 - Color.green(src.getPixel(i, j)), 255 - Color.blue(src.getPixel(i, j)))); } } return dest; } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, 0, 0, "Load jpg"); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ case (0): showDialog(LOAD_DIALOG_ID); break; } return true; } @Override protected Dialog onCreateDialog(int id) { Dialog dialog = null; switch(id) { case LOAD_DIALOG_ID: dialog = new Dialog(AndroidImageProcessingActivity.this); dialog.setContentView(R.layout.load_dialog); dialog.setTitle("Load JPG"); dialog.setCancelable(true); dialog.setCanceledOnTouchOutside(true); textFolder = (TextView)dialog.findViewById(R.id.folder); buttonUp = (Button)dialog.findViewById(R.id.up); buttonUp.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub ListDir(curFolder.getParentFile()); }}); //Prepare ListView in dialog dialog_ListView = (ListView)dialog.findViewById(R.id.dialoglist); dialog_ListView.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { File selected = new File(fileList.get(position)); if(selected.isDirectory()){ ListDir(selected); }else { Toast.makeText(AndroidImageProcessingActivity.this, selected.toString() + " selected", Toast.LENGTH_LONG).show(); dismissDialog(LOAD_DIALOG_ID); Bitmap bm = BitmapFactory.decodeFile(selected.getAbsolutePath()); imageSource.setImageBitmap(bm); performImageProcessing(bm); } }}); break; } return dialog; } @Override protected void onPrepareDialog(int id, Dialog dialog, Bundle bundle) { // TODO Auto-generated method stub super.onPrepareDialog(id, dialog, bundle); switch(id) { case LOAD_DIALOG_ID: ListDir(curFolder); break; } } void ListDir(File f){ if(f.equals(root)){ buttonUp.setEnabled(false); }else{ buttonUp.setEnabled(true); } curFolder = f; textFolder.setText(f.getPath()); File[] files = f.listFiles(); fileList.clear(); for (File file : files){ if(file.isDirectory()){ fileList.add(file.getPath()); }else{ Uri selectedUri = Uri.fromFile(file); String fileExtension = MimeTypeMap.getFileExtensionFromUrl(selectedUri.toString()); if(fileExtension.equalsIgnoreCase("jpg")){ fileList.add(file.getPath()); } } } ArrayAdapter<String> directoryList = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, fileList); dialog_ListView.setAdapter(directoryList); } }
Read it: My "Image processing" series.
0 Response to "Image Processing - inverse bitmap to generate film like picture"
Posting Komentar