Android как сбросить холст / растровое изображение для захвата нового изображения - PullRequest
0 голосов
/ 20 февраля 2012

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

//save is the button to click
this.save.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        AlertDialog.Builder alert=new AlertDialog.Builder(MyActivity.this);
        alert.setTitle("Save");
        alert.setMessage("Enter a file name");        
        final EditText input=new EditText(MyActivity.this);
        alert.setView(input);         
        alert.setPositiveButton("OK", new DialogInterface.OnClickListener(){
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                table.setDrawingCacheEnabled(true); 
                Bitmap b=table.getDrawingCache();
                Bitmap combo=Bitmap.createBitmap(b.getWidth(), b.getHeight(), Bitmap.Config.ARGB_8888);
                Canvas canvas=new Canvas(combo);
                canvas.drawBitmap(b, 0f, 175f, null);               
                OutputStream outStream = null;
                String value=input.getText().toString();
                File directory =new File(extStorageDirectory+"/Files/");
                if(!directory.mkdir())
                    directory.mkdir();
                File file = new File(directory, value);
                try {
                    outStream = new FileOutputStream(file);
                    combo.compress(Bitmap.CompressFormat.PNG, 100, outStream);
                    FileOutputStream fOut=openFileOutput("public.dat", Context.MODE_PRIVATE|Context.MODE_APPEND);
                    OutputStreamWriter osw=new OutputStreamWriter(fOut);
                                osw.write(value+"\n");                          
                    osw.flush();
                    osw.close();
                    fOut.flush();
                    fOut.close();
                    outStream.flush();
                    outStream.close();                                              
                } catch (FileNotFoundException e) {                     
                    e.printStackTrace();                    
                } catch (IOException e) {                       
                    e.printStackTrace();                    
                }
            }               
        });

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

  canvas.restore();

Но это не работает. Но когда я перезапускаю приложение на симуляторе, я могу сохранить новое изображение. Может кто-нибудь, пожалуйста, помогите мне решить эту проблему.

1 Ответ

0 голосов
/ 21 февраля 2012

Я нашел решение своей проблемы.Мне просто нужно было добавить

table.destroyDrawingCache();

как раз перед тем, как ловить исключения.

...