Как сделать снимок экрана ImageView?

Здравствуйте, я пытаюсь сделать снимок экрана с изображением, на котором у меня есть рисунок. Я могу сделать часть рисования и сохранить часть, потому что я использовал

 "View v = view.getRootView();"

Чтобы захватить весь экран раньше, и я вижу, что он работает, потому что он может видеть его в галерее.

Однако мне нужно только захватить скриншот изображения в данный момент (не весь экран), и у меня проблемы. Когда мой пользователь нажимает кнопку сохранения, он хочет, чтобы он создал bmp только для изображения. В настоящее время он захватывает черный экран для меня с помощью двух предыдущих методов. Я думал, что он получил правильную высоту и ширину, но он все еще не работает.

я получаю идеи своего метода 2 от определенный макет в Android, но он не работает, хотя многие другие вопросы похожи на него, и я проверил их все.

//In constructor to let u guys know how i set up the imageView
imageView.setImageBitmap(bitmap);
...
imageView = (ImageView) this.findViewById(R.id.ImageView);
...

Способ 1 для захвата снимка экрана imageView

Bitmap bm = Bitmap.createBitmap(imageView.getWidth(), imageView.getHeight(), Bitmap.Config.ARGB_8888);

метод 2 для захвата снимка экрана imageView

View z = (ImageView) findViewById(R.id.ImageView);
               z.setDrawingCacheEnabled(true);   
               int totalHeight = z.getHeight();
               int totalWidth = z.getWidth();
                z.layout(0, 0, totalWidth, totalHeight);       
                z.buildDrawingCache(true);
                Bitmap bm = Bitmap.createBitmap(z.getDrawingCache());             
                z.setDrawingCacheEnabled(false);
                    Toast.makeText(Draw.this, "Taking Screenshot", Toast.LENGTH_SHORT).show();  
                    MediaStore.Images.Media.insertImage(getContentResolver(), bm, null, null); 

XML здесь:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/RL"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".Draw" >

    <ImageView
        android:id="@+id/ImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/btnLoad2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_launcher" />

    <Button
        android:id="@+id/BtnSave"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/ImageView"
        android:layout_alignTop="@+id/btnLoad2"
        android:text="Save Picture" />

    <Button
        android:id="@+id/btnLoad2"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/ImageView"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="40dp"
        android:layout_toLeftOf="@+id/BtnSave"
        android:text="@string/Load" />

</RelativeLayout>

Это скриншот eclipse, который был отображен в эмуляторе, затем нарисован одной линией вверху, затем сохранен и загружен обратно в  изображениеВид


person JamesEX    schedule 16.11.2013    source источник


Ответы (1)


Почему ты звонишь z.buildDrawingCache(true) ?

Этого должно быть достаточно для создания растрового изображения вашего представления.

View z = (ImageView) findViewById(R.id.ImageView);
z.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(v.getDrawingCache());
person SpecialTrooper    schedule 16.11.2013
comment
Это сработало после того, как я немного изменил код. Я могу захватить изображение с моим рисунком на нем. Однако есть странные две черные полосы, идущие по левой и правой сторонам изображения. У меня нет черных полос в моем приложении, поэтому я не уверен, откуда они взялись... я попробую еще раз, когда получу ширину. - person JamesEX; 16.11.2013
comment
Не могли бы вы добавить скриншот вашего ImageView? - person SpecialTrooper; 16.11.2013
comment
Я только что добавил Скриншот. - person JamesEX; 16.11.2013
comment
Возможно, эту проблему могут вызвать настройки paddingLeft и paddingRight вашего RelativeLayout. Удалите их и повторите попытку. - person SpecialTrooper; 16.11.2013