2

I've been trying to save my canvas as an Image in android but my code seems to keep on crashing every time it tries to save. I found code on the internet to do so (since there seems to be alot out there) but I can't seem to get it working for my code.

Here's what I have:

private File APP_FILE_PATH = new File("/sdcard/newpics");
protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.onDraw(canvas);
    paint.setStyle(Paint.Style.FILL);


         Bitmap toDisk = Bitmap.createBitmap(canvas.getWidth(),canvas.getHeight(),Bitmap.Config.ARGB_8888);
         canvas.setBitmap(toDisk);



         try {
            toDisk.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(new File(APP_FILE_PATH + "/myAwesomeDrawing.png")));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }            
    }

Any suggestions on whats going bad?

Thanks

UPDATE: Heres my logcat if that helps:

12-03 22:39:48.593: E/AndroidRuntime(17637): FATAL EXCEPTION: main

12-03 22:39:48.593: E/AndroidRuntime(17637): java.lang.UnsupportedOperationException

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.HardwareCanvas.setBitmap(HardwareCanvas.java:37)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at com.example.myDraw.Draw_View.onDraw(Draw_View.java:56)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.View.draw(View.java:13707)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.View.getDisplayList(View.java:12645)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.View.getDisplayList(View.java:12689)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2910)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.View.getDisplayList(View.java:12583)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.View.getDisplayList(View.java:12689)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2910)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.View.getDisplayList(View.java:12583)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.View.getDisplayList(View.java:12689)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2910)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.View.getDisplayList(View.java:12583)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.View.getDisplayList(View.java:12689)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2910)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.View.getDisplayList(View.java:12583)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.View.getDisplayList(View.java:12689)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2910)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.View.getDisplayList(View.java:12583)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.View.getDisplayList(View.java:12689)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2910)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.View.getDisplayList(View.java:12583)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.View.getDisplayList(View.java:12689)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1198)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.ViewRootImpl.draw(ViewRootImpl.java:2173)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2045)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1854)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.Choreographer.doCallbacks(Choreographer.java:562)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.Choreographer.doFrame(Choreographer.java:532)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.os.Handler.handleCallback(Handler.java:725)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.os.Handler.dispatchMessage(Handler.java:92)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.os.Looper.loop(Looper.java:137)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at android.app.ActivityThread.main(ActivityThread.java:5039)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at java.lang.reflect.Method.invokeNative(Native Method)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at java.lang.reflect.Method.invoke(Method.java:511)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)

12-03 22:39:48.593: E/AndroidRuntime(17637):    at dalvik.system.NativeStart.main(Native Method)
Loktar
  • 34,764
  • 7
  • 90
  • 104
user818502
  • 711
  • 6
  • 12
  • Have a look at this, it will most certainly help! http://stackoverflow.com/a/13667141/1851478 – logray Dec 04 '12 at 04:04
  • rrrrrrrrrrrrrrrrrrrrrrrrrr browser is giving me issues sorry – logray Dec 04 '12 at 04:05
  • @logray - i looked at that example before and i had the same issue. What is the var screenshot? im assuming thats my canvas? – user818502 Dec 04 '12 at 04:14
  • 1
    I'm not really a fan of soon feeding, but here have a look at this one: http://stackoverflow.com/questions/8962374/android-convert-canvas-to-bitmap-then-save-to-sd-card – logray Dec 04 '12 at 04:18
  • @logray - thanks that helped...That was the only solution that actually worked in my solution. – user818502 Dec 04 '12 at 06:55

1 Answers1

0

Look at this code hope this is what you want.

View content = findViewById(R.id.layoutroot);

you can take screen shot of which view you want. R.id.CanvasView . Hope this helps

Community
  • 1
  • 1
Zohaib
  • 2,845
  • 2
  • 23
  • 33