【问题标题】:Transform a canvas into a bitmap in AndroidStudio在 Android Studio 中将画布转换为位图
【发布时间】:2016-07-09 21:01:03
【问题描述】:

我在SurfaceView 中有一个画布,我可以在其中进行绘制。现在,按下一个按钮,我想要画布并制作一个位图,它将显示在底部。那么,我必须为制作位图编写什么代码?

 public class Square extends Activity implements Runnable {

private SurfaceView surface;
private SurfaceHolder holder;
private boolean locker = true;
private Thread thread;

int tmp1 = 0, tmp2 = 0;

Background sfondo;

Canvas canvas;

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    surface = (SurfaceView) findViewById(R.id.mysurface);
    surface.setFocusable(true);
    holder = surface.getHolder();

    sfondo = new Background((BitmapFactory.decodeResource(getResources(), R.drawable.sfondo)));


    thread = new Thread(this);
    thread.start();
}

@Override
public void run() {
    while (locker) {
        if (!holder.getSurface().isValid()) {
            continue;
        }
        canvas = new Canvas();
        canvas = holder.lockCanvas();
        draw(canvas);
        holder.unlockCanvasAndPost(canvas);
    }
}

private void draw(Canvas canvas) {
   sfondo.draw(canvas);

    tmp1 = (int)Math.random();
    tmp2 = (int)Math.random();

    canvas.drawCircle(tmp1, tmp2, 5, Color.BLACK);
}
}
}

【问题讨论】:

    标签: android android-studio canvas bitmap surfaceview


    【解决方案1】:

    对于 Lollo,请使用 {} 这是可读的代码

    @Override public void run() { 
        while(locker){
         if(!holder.getSurface().isValid()){ 
        continue; 
        } 
        AA = Bitmap.createBitmap(surface.getWidth(), surface.getHeight(), Bitmap.Config.ARGB_8888); 
        canvas = new Canvas(AA); 
        canvas = holder.lockCanvas(); 
        draw(canvas); 
        holder.unlockCanvasAndPost(canvas);
         }
      } 
        private void draw(Canvas canvas) {
        tmp1, tmp2 = (int)Math.random(...);
         canvas.drawCircle(tmp1, tmp2, gra, black);
         }
    

    【讨论】:

      【解决方案2】:
      private Bitmap generateBitmap(){
          Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
          Canvas canvas = new Canvas(bitmap);
          surface.draw(canvas);
          return bitmap;
      }
      

      然后就可以使用位图了。

      另一种解决方案就是

      Bitmap bitmap = surface.getDrawingCache()
      

      【讨论】:

      • 好的,但是我可以在哪里添加此代码??我有 2 个方法“public void run(){..}”,然后是“public void draw(Canvas canvas)”……你能解释一下吗?
      • @Override public void run() { while(locker){ if(!holder.getSurface().isValid()){ continue; AA = Bitmap.createBitmap(surface.getWidth(), surface.getHeight(), Bitmap.Config.ARGB_8888);画布=新画布(AA);画布 = holder.lockCanvas();画(画布); holder.unlockCanvasAndPost(canvas); } } private void draw(Canvas canvas) {tmp1, tmp2 = (int)Math.random(...); canvas.drawCircle(tmp1, tmp2, gra, black); }
      • 抱歉,有办法私下给您发送我的代码吗?如果你想......因为我需要这个来考试......
      • 能否将代码上传到 gist?这样其他人都可以从答案中受益。
      • 无法直接从画布中提取位图。您可以使用上面应该可以正常工作的代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多