//下面是主程序代码
import android.app.Activity;import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.graphics.BitmapFactory;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.ImageView;public class PhotoShop extends Activity { private String tag = "IBMPhotoPhun"; private Bitmap bitmapOrig = null; private Bitmap bitmapGray = null; private Bitmap bitmapWip = null; private ImageView ivDisplay = null; // NDK STUFF static { try{ System.loadLibrary("haha");} catch(Exception e) { System.out.println("dd"); } } public native void convertToGray(Bitmap bitmapIn, Bitmap bitmapOut); public native void changeBrightness(int direction, Bitmap bitmap); public native void findEdges(Bitmap bitmapIn, Bitmap bitmapOut); // END NDK STUFF /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.i(tag, "before image stuff"); ivDisplay = (ImageView) findViewById(R.id.ivDisplay); // load bitmap from resources BitmapFactory.Options options = new BitmapFactory.Options(); // Make sure it is 24 bit color as our image processing algorithm // expects this format options.inPreferredConfig = Config.ARGB_8888; bitmapOrig = BitmapFactory.decodeResource(this.getResources(), R.drawable.sample, options); if (bitmapOrig != null) ivDisplay.setImageBitmap(bitmapOrig); } public void onResetImage(View v) { Log.i(tag, "onResetImage"); ivDisplay.setImageBitmap(bitmapOrig); } // 边缘化 public void onFindEdges(View v) { Log.i(tag, "onFindEdges"); // make sure our target bitmaps are happy bitmapGray = Bitmap.createBitmap(bitmapOrig.getWidth(), bitmapOrig.getHeight(), Config.ALPHA_8); bitmapWip = Bitmap.createBitmap(bitmapOrig.getWidth(), bitmapOrig.getHeight(), Config.ALPHA_8); // before finding edges, we need to convert this image to gray convertToGray(bitmapOrig, bitmapGray); // find edges in the image findEdges(bitmapGray, bitmapWip); ivDisplay.setImageBitmap(bitmapWip); } public void onConvertToGray(View v) { Log.i(tag, "onConvertToGray"); //创建一个和原图宽和高相等的灰色(一个像素是一个字节)图片,内容不确定或者为空(bitmapWip != null),就是说造好了格子只等填充数据 bitmapWip = Bitmap.createBitmap(bitmapOrig.getWidth(), bitmapOrig.getHeight(), Config.ALPHA_8); /** * java中图片的config(相当于格式) * ALPHA_8 (2), RGB_565 (4), ARGB_4444 (5), ARGB_8888 (6); 与android不同: ANDROID_BITMAP_FORMAT_RGBA_8888:1 ANDROID_BITMAP_FORMAT_A_8:8 */ convertToGray(bitmapOrig, bitmapWip); ivDisplay.setImageBitmap(bitmapWip); } //先要获得bitmapWip才能处理,否则setImageBitmap(byll)虽然不会报错,但是空白的 public void onDimmer(View v) { Log.i(tag, "onDimmer"); changeBrightness(2, bitmapWip); ivDisplay.setImageBitmap(bitmapWip); } //先要获得bitmapWip才能处理,否则setImageBitmap(byll)虽然不会报错,但是空白的 public void onBrighter(View v) { Log.i(tag, "onBrighter"); changeBrightness(1, bitmapWip); ivDisplay.setImageBitmap(bitmapWip); }}impo