目前我正在制作用于裁剪图像的自定义视图视图基本上是一个网格,它定义了裁剪区域,如3x3,3x2,3x1,并且在按钮点击时基本上将网格从3x3更改为3x2或一个查看图像所在的触摸图像,并根据网格调整图像(自定义视图)
现在问题是一些图像没有在3x3中调整,大多数图像都在调整
这里看到我的应用程序的图像
实际应该是什么样的
这是问题,甚至在3x2,3x1图像被削减我认为问题是我的观察者在哪里我推出代码来调整图像
private class CObserver implements ViewTreeObserver.OnGlobalLayoutListener {
public void onGlobalLayout() {
MainActivity.this.gridLineView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
GridLineView.gridHeight = MainActivity.this.gridLineView.getGridHeight();
Uri parse = Uri.parse(MainActivity.this.getIntent().getExtras().getString("imageUri"));
Log.e("selectedImage", parse.toString());
Point point = new Point();
MainActivity.this.getWindowManager().getDefaultDisplay().getSize(point);
int i = point.x;
int i2 = point.y;
if (i == 0 || i2 == 0) {
DisplayMetrics displayMetrics = new DisplayMetrics();
MainActivity.this.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
i = displayMetrics.widthPixels;
i2 = displayMetrics.heightPixels;
}
try {
MainActivity mainActivity = MainActivity.this;
Context context = MainActivity.this;
double d = (double) i;
i = (int) (d * 1.5d);
Log.e("i",i+"");
Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver() ,parse);
Bitmap samplebitmap=scaleBitmap(bitmap,i,i2);
//Bitmap samplebitmap = mainActivity.decodeSampledBitmapFromInputStream(context, parse, i, i2);
//Bitmap samplebitmap = Bitmap.createScaledBitmap(bitmap,i,i2,false);
MainActivity.this.origBitmap = samplebitmap;
if (samplebitmap != null) {
MainActivity.this.touchImageView.setImageBitmap(samplebitmap);
}
} catch (IOException e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
}
}
因此,如果有人可以帮助我修复我的代码来修复3x3中显示的图像,并获得3x2网格中的半图像
这是我的所有项目文件Project Files
如果要根据屏幕大小动态绘制线条,则应在相机预览类中使用以下代码。
@Override
protected void onDraw(Canvas canvas)
{
if(grid){
// Find Screen size first
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
int screenWidth = metrics.widthPixels;
int screenHeight = (int) (metrics.heightPixels*0.9);
// Set paint options
paint.setAntiAlias(true);
paint.setStrokeWidth(3);
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.argb(255, 255, 255, 255));
canvas.drawLine((screenWidth/3)*2,0,(screenWidth/3)*2,screenHeight,paint);
canvas.drawLine((screenWidth/3),0,(screenWidth/3),screenHeight,paint);
canvas.drawLine(0,(screenHeight/3)*2,screenWidth,(screenHeight/3)*2,paint);
canvas.drawLine(0,(screenHeight/3),screenWidth,(screenHeight/3),paint);
}
}
我们在上面的代码中尝试做的是在水平和垂直方向上绘制三条线,在@OnDraw中的代码之间使用均匀间距,您试图绘制一个您不需要的圆,如问题中所述需要在相机预览类的构造函数中添加以下行:
this.setWillNotDraw(false);
下面的代码来源:Divide Image into parts
public ArrayList<Bitmap> splitBitmap(Bitmap bitmap, int xCount, int yCount) {
ArrayList<Bitmap> pieces = new ArrayList<>(piecesNumber);
int width, height;
width = bitmap.getWidth() / xCount;
height = bitmap.getHeight() / yCount;
for(int x = 0; x < xCount; ++x) {
for(int y = 0; y < yCount; ++y) {
pieces.add(Bitmap.createBitmap(bitmap, x * width, y * height, width, height));
}
}
return pieces;
}
上面的代码将以9个相等的部分剪切图像