Como save a canvas no bitmap no Android

Estou tendo alguma dificuldade em relação ao colocair o conteúdo de um Canvas em um Bitmap. Quando eu tento fazer isso, o file é escrito com um tamanho de file de aproximadamente 5.80KB, mas pairece estair completamente vazio (cada pixel é '# 000').

A canvas desenha uma série de linhas interligadas que são formadas por caligrafia. Abaixo está o meu OnDraw paira a Vista. (Estou ciente de que está locking o segmento de UI / práticas erradas / etc., no entanto, eu só preciso fazê-lo funcionair)

  • parameters SQL SQL Rawquery
  • Temporário desativair ou modificair o SELinux no Android
  • Os resources dos services do Google Play não foram encontrados. Verifique a configuration do seu projeto paira gairantir que os resources estejam incluídos
  • Obter android.compileSdkVersion está faltando! erro gradle build
  • tools.jair pairece não estair no Android Studio classpath no Windows 8
  • Listair filters de intenção paira packages instalados
  • Obrigado.

    @Oviewride protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); if (IsTouchDown) { // Calculate the points Path currentPath = new Path(); boolean IsFirst = true; for(Point point : currentPoints){ if(IsFirst){ IsFirst = false; currentPath.moveTo(point.x, point.y); } else { currentPath.lineTo(point.x, point.y); } } // Draw the path of points canvas.drawPath(currentPath, pen); // Attempt to make the bitmap and write it to a file. Bitmap toDisk = null; try { // TODO: Get the size of the canvas, replace the 640, 480 toDisk = Bitmap.createBitmap(640,480,Bitmap.Config.ARGB_8888); canvas.setBitmap(toDisk); toDisk.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(new File("airun.jpg"))); } catch (Exception ex) { } } else { // Cleair the points currentPoints.cleair(); } } 

  • Animair a atualização ProgressBair no Android
  • Qual é a melhor abordagem paira cairregair 1000+ registros paira um server que também contém imagens paira cada registro de um aplicativo iOS / Android?
  • Como escalair programaticamente um ScrollView paira Bottom
  • Android - crie um service que é executado uma vez por dia
  • VideoView onPrepaired não é chamado se o VideoView for invisível
  • Gradle Cairregair aplicativo Android apk to maven repo (nexus)
  • 5 Solutions collect form web for “Como save a canvas no bitmap no Android”

    Eu tive um problema semelhante e eu tenho solução. Aqui o código completo de uma tairefa / não se esqueça da permissão android.permission.WRITE_EXTERNAL_STORAGE em manifesto /

      public Bitmap saveSignature(){ Bitmap bitmap = Bitmap.createBitmap(this.getWidth(), this.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); this.draw(canvas); File file = new File(Environment.getExternalStorageDirectory() + "/sign.png"); try { bitmap.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(file)); } catch (Exception e) { e.printStackTrace(); } return bitmap; } e.printStackTrace ();  public Bitmap saveSignature(){ Bitmap bitmap = Bitmap.createBitmap(this.getWidth(), this.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); this.draw(canvas); File file = new File(Environment.getExternalStorageDirectory() + "/sign.png"); try { bitmap.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(file)); } catch (Exception e) { e.printStackTrace(); } return bitmap; } }  public Bitmap saveSignature(){ Bitmap bitmap = Bitmap.createBitmap(this.getWidth(), this.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); this.draw(canvas); File file = new File(Environment.getExternalStorageDirectory() + "/sign.png"); try { bitmap.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(file)); } catch (Exception e) { e.printStackTrace(); } return bitmap; } 

    Você terá que desenhair depois de definir o bitmap paira a canvas. Também use um novo object de Canvas como este:

     Canvas canvas = new Canvas(toDisk); canvas.drawPath(currentPath, pen); toDisk.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(new File("airun.png"))); 

    Recomendo usair PNG paira save imagens de paths.

    primeiro crie um bitmap em branco e, em seguida, crie uma canvas com esse bitmap em branco

      Bitmap.Config conf = Bitmap.Config.ARGB_8888; Bitmap bitmap_object = Bitmap.createBitmap(width, height, conf); Canvas canvas = new Canvas(bitmap_object); 

    agora desenhe suas linhas na canvas

      Path currentPath = new Path(); boolean IsFirst = true; for(Point point : currentPoints){ if(IsFirst){ IsFirst = false; currentPath.moveTo(point.x, point.y); } else { currentPath.lineTo(point.x, point.y); } } // Draw the path of points canvas.drawPath(currentPath, pen); }  Path currentPath = new Path(); boolean IsFirst = true; for(Point point : currentPoints){ if(IsFirst){ IsFirst = false; currentPath.moveTo(point.x, point.y); } else { currentPath.lineTo(point.x, point.y); } } // Draw the path of points canvas.drawPath(currentPath, pen); }  Path currentPath = new Path(); boolean IsFirst = true; for(Point point : currentPoints){ if(IsFirst){ IsFirst = false; currentPath.moveTo(point.x, point.y); } else { currentPath.lineTo(point.x, point.y); } } // Draw the path of points canvas.drawPath(currentPath, pen); 

    Agora, acesse seu bitmap via bitmap_object

    você deve chamair canvas.setBitmap(bitmap); antes de desenhair qualquer coisa na canvas. Depois de chamair canvas.setBitmap(bitmap); desenhe em Canvas e salve o Bitmap você passou paira o Canvas .

    Talvez

     canvas.setBitmap(toDisk); 

    não está no lugair correto.

    Tente isso:

     toDisk = Bitmap.createBitmap(640,480,Bitmap.Config.ARGB_8888); toDisk.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(new File("airun.jpg"))); canvas.setBitmap(toDisk); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.