绘画应用程序中的比例因子错误

时间:2018-08-02 18:18:20

标签: android imageview

我的目标是将手指移到屏幕上方以在图像视图mImageView中的图片上绘画。此处的图片已调整为imageview大小,以提高性能。稍后,我想再次将其导出到大图像上,这就是scaleFactor的位置。当将真实设备坐标与此因子相乘时,我应该获得真实图像上绘制的位置。

path是基础图片的uri。

但是它总是关闭,我要绘制的区域没有在最终图像中绘制。通常,scaleFactor太大。问题出在哪里?还是此代码正确,问题可能在其他地方出现?

scaleFactor是第一次在这里定义。

private void displayFunction(Uri path) {   
    iv = (ImageView)findViewById(R.id.mImageView);
    int ivWidth = iv.getWidth();
    int ivHeight = iv.getHeight();

    Bitmap v = null;
    try {
        v = MediaStore.Images.Media.getBitmap(this.getContentResolver(), path);
    }
    catch (Exception vc)
    {
        return;
    }
    if (v == null) return;
    int originalWidth = v.getWidth(); 
    int originalHeight = v.getHeight(); 
    float rs = (float)originalWidth / (float)originalHeight;
    Bitmap bitmap2 = null;
    if (rs > 1)
        bitmap2 = getResizedBitmap(v,(int)((float)ivWidth / rs),ivWidth);
    else
        bitmap2 = getResizedBitmap(v,ivHeight,(int)((float)ivHeight * rs));
    scaleFactor = Math.max((float)originalWidth/(float)ivWidth, (float)originalHeight/(float)ivHeight);

    v = null;
    bmpTemp = clearPainting(bitmap2, Color.RED, 1, Paint.Style.STROKE);
    iv.post(new Runnable() {
        public void run() {
            iv.setScaleType(ImageView.ScaleType.FIT_XY);
            iv.setImageBitmap(bmpTemp);
        }
    });
}

<android.support.design.widget.CoordinatorLayout
    android:id="@+id/myCoordinatorLayout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:ads="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="de.noahsofie.bildzuschneiden.MainActivity">

        <ImageView
            android:id="@+id/mImageView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentStart="true"
            android:contentDescription="@string/html"
            android:scaleType="centerCrop" />


    </RelativeLayout>

</android.support.design.widget.CoordinatorLayout>

1 个答案:

答案 0 :(得分:0)

您只想显示大图像还是要在其上绘画?如果目标是仅显示大位图,则可以使用画布在位图上绘制路径,然后将位图缩放到所需的任何大小。