2013-03-28 90 views
0

我开发的涂料应用程序,我想插入剪切功能,我用从CanvasView此代码:如何裁剪位图?

public void Crop() { 
    // TODO Auto-generated method stub 
    int value = 0; 
    if (bitmap.getHeight() <= bitmap.getWidth()) { 
     value = bitmap.getHeight(); 
    } else { 
     value = bitmap.getWidth(); 
    } 

    Bitmap finalBitmap = null; 
    finalBitmap = Bitmap.createBitmap(bitmap, 0, 0, value, value); 
    Bitmap lastBitmap = null; 
    lastBitmap = Bitmap.createScaledBitmap(finalBitmap, 144, 144, true); 

} 

但我recive以下错误

03-28 03:10:18.365: E/AndroidRuntime(19708): FATAL EXCEPTION: main 
03-28 03:10:18.365: E/AndroidRuntime(19708): java.lang.NullPointerException 
03-28 03:10:18.365: E/AndroidRuntime(19708): at baked.soft.CanvasView.Crop(CanvasView.java:670) 
03-28 03:10:18.365: E/AndroidRuntime(19708): at baked.soft.FirstActivity$7.onClick(FirstActivity.java:157) 
03-28 03:10:18.365: E/AndroidRuntime(19708): at android.view.View.performClick(View.java:4232) 
03-28 03:10:18.365: E/AndroidRuntime(19708): at android.view.View$PerformClick.run(View.java:17318) 
03-28 03:10:18.365: E/AndroidRuntime(19708): at android.os.Handler.handleCallback(Handler.java:615) 
03-28 03:10:18.365: E/AndroidRuntime(19708): at android.os.Handler.dispatchMessage(Handler.java:92) 
03-28 03:10:18.365: E/AndroidRuntime(19708): at android.os.Looper.loop(Looper.java:137) 
03-28 03:10:18.365: E/AndroidRuntime(19708): at android.app.ActivityThread.main(ActivityThread.java:4921) 
03-28 03:10:18.365: E/AndroidRuntime(19708): at java.lang.reflect.Method.invokeNative(Native Method) 
03-28 03:10:18.365: E/AndroidRuntime(19708): at java.lang.reflect.Method.invoke(Method.java:511) 
03-28 03:10:18.365: E/AndroidRuntime(19708): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
03-28 03:10:18.365: E/AndroidRuntime(19708): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
03-28 03:10:18.365: E/AndroidRuntime(19708): at dalvik.system.NativeStart.main(Native Method) 

这是错误行:

从FirstActivity

if (bitmap.getHeight() <= bitmap.getWidth()) { 

位图

+0

你在哪里声明位变量: -/ – 2013-03-28 01:17:36

回答

2

输入bitmap为空,因此为NullPoinerException


顺便问一下,你的代码应该看起来更像是这样的:

public void Crop() { 
    if(bitmap == null) { 
     return; 
    } 

    final int value; 
    if (bitmap.getHeight() <= bitmap.getWidth()) { 
     value = bitmap.getHeight(); 
    } else { 
     value = bitmap.getWidth(); 
    } 

    final Bitmap finalBitmap = Bitmap.createBitmap(bitmap, 0, 0, value, value); 
    final Bitmap lastBitmap = Bitmap.createScaledBitmap(finalBitmap, 144, 144, true); 
} 
+0

确定,但在FirstActivity – 2013-03-28 01:29:01

+1

检查创建了'如果(位图我的位图=='null)'或者在你将它发送到'Crop()'之前,或者在'Crop()'中使用它之前。 – 2013-03-28 01:31:03

+0

'imageViewCrop =(ImageView)this.findViewById(R.id.imageViewCrop); imageViewCrop.setOnClickListener(新OnClickListener(){ \t \t \t \t \t \t公共无效的onClick(视图v){ \t \t \t \t位图的位图= Bitmap.createBitmap(myView.getWidth(),myView.getHeight(), Config.ARGB_8888); \t \t \t \t帆布帆布=新画布(位图); \t \t \t \t myView.draw(画布); \t \t \t \t Toast.makeText(getApplicationContext(),“重做工具单击”,Toast.LENGTH_SHORT).show(); \t \t \t \t myView.Crop(); \t \t \t \t \t bitmap.recycle(); \t \t \t} \t \t});'这是从FirstActivity – 2013-03-28 01:34:36