Android: imgView.getDrawingCache () обрезает растровое изображение при сохранении в хранилище - PullRequest
0 голосов
/ 30 октября 2018

Я добавляю точку на растровое изображение Canvas. В ImageView включены жесты Масштаб, Поворот и Перемещение. После этого я сохраняю изображение во внешнем хранилище нажатием кнопки. Но растровое изображение обрезается (размер растрового изображения такой же, как у моего пользовательского imageView). Я сохраняю точку на холсте, используя imgView.getDrawingCache (). Я не хочу обрезать сохраненное растровое изображение.

Save Function - 
private void saveFunction() {
    iv.setDrawingCacheEnabled(true);
    Bitmap bitmap = iv.getDrawingCache(true);

  /*  BitmapDrawable drawable = (BitmapDrawable) iv.getDrawable();
    Bitmap newBitmap = drawable.getBitmap();*/

    String path = 
Environment.getExternalStorageDirectory().getAbsolutePath();
    File file = new File(path + File.separator + "name" + ".png");
    Toast.makeText(getApplicationContext(), file.getAbsolutePath(), 
Toast.LENGTH_LONG).show();
    try {
        if (!file.exists())

        {
            file.createNewFile();
        }
        FileOutputStream ostream = new FileOutputStream(file);
        bitmap.compress(Bitmap.CompressFormat.PNG, 10, ostream);
        ostream.close();
        System.out.println("Rushi : saveFunction : saved");
    } catch (Exception e) {
        e.printStackTrace();
    }

}

Мой пользовательский класс ImageView публичный класс

DrawImageView extends ImageView {

    private Paint currentPaint;
    public boolean drawRect = false;
    public float x;
    public float y;
    public Bitmap newBitmap;
    public Matrix matrix;


    public DrawImageView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        currentPaint = new Paint();
        currentPaint.setDither(true);
        currentPaint.setColor(0xFF00CC00);
        currentPaint.setStyle(Paint.Style.STROKE);
        currentPaint.setStrokeJoin(Paint.Join.ROUND);
        currentPaint.setStrokeCap(Paint.Cap.ROUND);
        currentPaint.setStrokeWidth(60);
    }

    public void setNewBitmap(Bitmap bmp) {
        newBitmap = bmp;
    }

    public Bitmap getNewBitmap() {
        return newBitmap;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (drawRect) {
            canvas.drawPoint(x, y, currentPaint);
          /*  Matrix matrix = this.getImageMatrix();
            float[] pts = {0, 0};
            matrix.mapPoints(pts);
            System.out.println("Rushi : NewPoint : "+pts[0]+","+pts[1]);*/
           // canvas.drawBitmap(newBitmap, getImageMatrix(), null);
        }
    }

}

Итак, нажимая кнопку, я рисую точку, а затем сохраняю изображение.

This is right after I clicked 'Add checkpoint'. The green point appears.

But when I opened my storage. The image is cropped

...