Autore Topic: Screenshot con surfaceview  (Letto 433 volte)

Offline first100

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Imarish
    • Mostra profilo
    • Getimage
  • Sistema operativo:
    Ubuntu 10.10
Screenshot con surfaceview
« il: 17 Ottobre 2013, 20:09:42 CEST »
0
Salve,

Ho creato un semplice progetto android seguendo vari tutorial
Tuttavia non riesco ad eseguire uno screenshot o meglio viene catturato ma rimane nero senza il contenuto.
Sarei grato a chi mi darà una mano  che ci sto perdendo un sacco di tempo senza venirne a capo.
Il codice è questo :
Codice (Java): [Seleziona]
package net.getimage.imagetouch;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.Toast;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Canvas;
import android.graphics.PixelFormat;

public class MainActivity extends Activity {
    BallBounces ball;
    File imageFile;
   
    public RelativeLayout CamView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        //CamView =(RelativeLayout) findViewById(R.id.LayoutRoot);
        setContentView(R.layout.activity_main);
        CamView =(RelativeLayout) findViewById(R.id.LayoutRoot);
        ball = new BallBounces(this);
        setContentView(ball);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
        case R.id.Menu:
            //newGame();
        case R.id.screenshot:
            //showHelp();
                // TakeScreenshot3();
                 ScreenshotCapture();
                 Context context=getApplicationContext();
                         CharSequence text="Catturato screenshot";
                         int duration=Toast.LENGTH_LONG;
                 Toast toast=Toast.makeText(context, text, duration);
                 toast.show();
            return true;       
           
        case R.id.About:
            //showHelp();
               
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }
   
    public void TakeScreenshot()
    {    //THIS METHOD TAKES A SCREENSHOT AND SAVES IT AS .jpg
        Random num = new Random();
        int nu=num.nextInt(1000); //PRODUCING A RANDOM NUMBER FOR FILE NAME
        CamView.setDrawingCacheEnabled(true); //CamView OR THE NAME OF YOUR LAYOUt
        CamView.buildDrawingCache(true);
        Bitmap bmp = Bitmap.createBitmap(CamView.getDrawingCache());
        CamView.setDrawingCacheEnabled(true); // clear drawing cache
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        bmp.compress(CompressFormat.JPEG, 70, bos);
        byte[] bitmapdata = bos.toByteArray();
        ByteArrayInputStream fis = new ByteArrayInputStream(bitmapdata);
        String picId=String.valueOf(nu);
        String myfile="Ghost"+picId+".jpeg";
        File dir_image = new  File(Environment.getExternalStorageDirectory()+File.separator+"ImageTouch");          //<---
        dir_image.mkdirs();                                                  //<---
        try {
            File tmpFile = new File(dir_image,myfile);
            FileOutputStream fos = new FileOutputStream(tmpFile);
             byte[] buf = new byte[1024];
                int len;
                while ((len = fis.read(buf)) > 0)
                {
                    fos.write(buf, 0, len);
                }
                    fis.close();
                    fos.close();
                    Toast.makeText(getApplicationContext(),
                            "The file is saved at :SD/ImageTouch",Toast.LENGTH_LONG).show();
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        }
 
 
    }
}

xml:
Codice (XML): [Seleziona]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:id="@+id/LayoutRoot"
   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=".MainActivity" >
   
  <ImageView
   android:id="@+id/camera_image"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:contentDescription="@string/app_name" />
   
</RelativeLayout>