简体   繁体   English

如何在图像上绘画并将图像保存到android中的手机库

[英]how to paint on an image and save the image to phone gallery in android

** my intent is to save the painted image along with my background view to gallery** // **我的意图是将绘制的图像以及背景视图保存到图库** //

public boolean onTouch(View view, MotionEvent event) {

        // draw the new Points to our internal canvas / bitmap

        System.out.println("onTouch(View vc) { IS CALLING11111111111");

        if (event.getAction() == MotionEvent.ACTION_DOWN) {

            paint.setColor(Color.RED);

            path = new Path();

            path.moveTo(event.getX(), event.getY());

        } else 
                      if (event.getAction() == MotionEvent.ACTION_MOVE) {

            int historySize = event.getHistorySize();

            for (int i = 0; i < historySize; i++) {

                path.lineTo(event.getHistoricalX(i),            
                                               event.getHistoricalY(i));

            }

            path.lineTo(event.getX(), event.getY());

            canvas.drawPath(path, paint);

        } 
                 else {
            return super.onTouchEvent(event);
        }

        invalidate();

        return true;
    }

please try below working code i think it should be helpful to you 请尝试下面的工作代码,我认为它应该对您有帮助

   import android.content.Context;
   import android.graphics.Bitmap;
   import android.graphics.Canvas;
   import android.graphics.Matrix;
   import android.graphics.Paint;
   import android.view.MotionEvent;
   import android.view.View;

public class DrawableImageView extends View {
private Bitmap mBitmap;
private Bitmap pic;
private Canvas mCanvas;
private final Paint mPaint;
private int a = 255;
private int r = 255;
private int g = 255;
private int b = 255;
private float width = 4;

public DrawableImageView(Context c, Bitmap img) {
    super(c);
    pic = img;
    mPaint = new Paint();
    mPaint.setAntiAlias(true);
    mPaint.setARGB(a,r,g,b);


    Bitmap newBitmap = Bitmap.createBitmap(img.getWidth(), img.getHeight(),   Bitmap.Config.RGB_565);
  Canvas newCanvas = new Canvas();
  newCanvas.setBitmap(newBitmap);
 if (img != null) {
   newCanvas.drawBitmap(img, 0, 0, null);
  }
 mBitmap = newBitmap;
 mCanvas = newCanvas;

    mCanvas.setBitmap(mBitmap);
}

public DrawableImageView(Context c, Bitmap img, int alpha, int red, int green, int blue) {
 this(c, img);
 setColor(alpha, red, green, blue);
}    
public DrawableImageView(Context c, Bitmap img, int alpha, int red, int green, int blue, float w) {
 this(c, img, alpha, red, green, blue);
 width = w;
}

public Bitmap getBitmap() {return mBitmap;}
public void setWidth(float w) {width = w;}
public void setColor(int alpha, int red, int green, int blue) {
 a = alpha;
 r = red;
 g = green;
 b = blue;
    mPaint.setARGB(a,r,g,b);
}
  public void Undo() {
 mCanvas.drawBitmap(pic, 0, 0, null);
 invalidate();
}

float scaleX;
float scaleY;
float scale;
@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) {        
 scaleX = (float) w/mBitmap.getWidth();
 scaleY = (float) h/mBitmap.getHeight();
 scale = scaleX > scaleY ? scaleY : scaleX;
}

@Override protected void onDraw(Canvas canvas) {
    if (mBitmap != null) {
        Matrix matrix = new Matrix();
     matrix.postScale(scale, scale);
     canvas.drawBitmap(mBitmap, matrix, null);
        //canvas.drawBitmap(mBitmap, 0,0, null);
    }
}

float lastX;
float lastY;
@Override public boolean onTouchEvent(MotionEvent event) {
    mPaint.setStrokeWidth(width/scale);

    float curX =  event.getX()/scale;
    float curY =  event.getY()/scale;
   switch (event.getAction()){ 
   case MotionEvent.ACTION_DOWN:{
           mCanvas.drawCircle(curX, curY,width/2/scale, mPaint);
         break;
  }
   case MotionEvent.ACTION_MOVE:{
    mCanvas.drawLine(lastX, lastY, curX, curY, mPaint);
         mCanvas.drawCircle(curX, curY,width/2/scale, mPaint);  //fix for weird jaggies   occur between line start and line stop
         break;
  } 
   case MotionEvent.ACTION_CANCEL:
 case MotionEvent.ACTION_UP:{
   mCanvas.drawLine(lastX, lastY, curX, curY, mPaint);
         mCanvas.drawCircle(curX, curY,width/2/scale, mPaint);
         break;
 }

}
 lastX = curX;
 lastY = curY;
    invalidate();  //invalidate only modified rect...

 return true;
  }
  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM