0

重複の可能性:
あるアクティビティから別のアクティビティに画像データを渡す方法は?
あるアクティビティから別のアクティビティにビットマップ イメージを渡す

以下のようなビューからビットマップを取得しようとしました

     View s = ml.getRootView();
                s.setDrawingCacheEnabled(true);

            Bitmap  b = s.getDrawingCache();


                System.out.println(b.isRecycled());


                Log.e("ok","ok");
                Intent i=new Intent(CameraActivity.this,Update.class);
                 i.putExtra("data",b);
                 startActivity(i);
//                 s.setDrawingCacheEnabled(false);
                 s.setVisibility(View.GONE);
                 finish();

I tried to transfer the bitmap from this Activity to another,but it is showing me black screen and app gets crashed.
       s.setVisibility(View.GONE); If I dont give this statement it is showing me this modified Activity and then it is showing Black screen.

このビットマップの転送に時間がかかっていると思います。

この問題を解決するにはどうすればよいですか?

助けてください

ありがとう

黒い画面になった後の Logcat

12-06 11:23:34.654: E/AndroidRuntime(16900): FATAL EXCEPTION: main
12-06 11:23:34.654: E/AndroidRuntime(16900): java.lang.NullPointerException
12-06 11:23:34.654: E/AndroidRuntime(16900):    at android.app.ActivityThread.handleStopActivity(ActivityThread.java:2595)
12-06 11:23:34.654: E/AndroidRuntime(16900):    at android.app.ActivityThread.access$1800(ActivityThread.java:124)
12-06 11:23:34.654: E/AndroidRuntime(16900):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:985)
12-06 11:23:34.654: E/AndroidRuntime(16900):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-06 11:23:34.654: E/AndroidRuntime(16900):    at android.os.Looper.loop(Looper.java:123)
12-06 11:23:34.654: E/AndroidRuntime(16900):    at android.app.ActivityThread.main(ActivityThread.java:3806)
12-06 11:23:34.654: E/AndroidRuntime(16900):    at java.lang.reflect.Method.invokeNative(Native Method)
12-06 11:23:34.654: E/AndroidRuntime(16900):    at java.lang.reflect.Method.invoke(Method.java:507)
12-06 11:23:34.654: E/AndroidRuntime(16900):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-06 11:23:34.654: E/AndroidRuntime(16900):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-06 11:23:34.654: E/AndroidRuntime(16900):    at dalvik.system.NativeStart.main(Native Method)
12-06 11:23:36.490: W/InputManagerService(1318): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@40a84730
4

1 に答える 1

2

ビットマップをインテントに渡し、バンドルから次のアクティビティでビットマップを取得していますが、問題は、その時点でビットマップ/画像のサイズが大きい場合、次のアクティビティで画像が読み込まれないことです。

この問題を解決するには、以下の2つのソリューションを使用してください。

1)最初に画像をバイト配列に変換してからインテントに渡し、次のアクティビティでバンドルからバイト配列を取得して画像(ビットマップ)に変換し、ImageViewに設定します。

ビットマップをバイト配列に変換します:-

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();

バイト配列をインテントに渡します:-

Intent intent = new Intent(this, NextActivity.class);
intent.putExtra("picture", byteArray);
startActivity(intent);

バンドルからバイト配列を取得し、ビットマップイメージに変換します:-

Bundle extras = getIntent().getExtras();
byte[] byteArray = extras.getByteArray("picture");

Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
ImageView image = (ImageView) findViewById(R.id.imageView1);

image.setImageBitmap(bmp);

2)最初に画像をSDCardに保存し、次のアクティビティでこの画像をImageViewに設定します。

于 2012-12-06T06:25:05.390 に答える