gpt4 book ai didi

android - 徒手绘画不能正常工作?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:50 26 4
gpt4 key购买 nike

我使用了一张图片,我们可以从图库中选择或者使用相机。我正在使用自定义 View 进行缩放和徒手绘画。我已经使用 canvas 和 paint 对图像进行编辑,它可以工作,但我的问题是,当我们开始在触摸事件上绘画时,它被绘制但不是相同的 x,y 坐标,它显示在触摸点下方很多。请帮助我如何改进我的代码以实现我的目标我的代码在这里...

public class EditImage extends Activity implements OnTouchListener{ 
TouchImageView edit_img;//custom image view
Bitmap bitmap;
String imagepath;
Bitmap alteredBitmap,alteredBitmap1;
Canvas canvas;
Paint paint;
Matrix matrix;
float downx = 0;
float downy = 0;
float upx = 0;
float upy = 0;
int count=0;

/** Called when the activity is first created. */
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.editscreen2);
// TODO Auto-generated method stub
Button back_btn=(Button)findViewById(R.id.back_button);
back_btn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
});

Intent extras=getIntent();
Uri imageFileUri = Uri.parse(extras.getStringExtra("imagepath"));
edit_img=(TouchImageView)findViewById(R.id.editimage);
Log.i("imagepath2",imageFileUri+"");
try {
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
bmpFactoryOptions.inJustDecodeBounds = false;
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream
(imageFileUri), null, bmpFactoryOptions);

alteredBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap
.getHeight(), Config.ARGB_8888);

canvas = new Canvas(alteredBitmap);
paint = new Paint();
paint.setColor(Color.BLACK);
paint.setAntiAlias(true);
paint.setDither(true);

paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);

paint.setStrokeWidth(5);
matrix = new Matrix();
canvas.drawBitmap(bitmap, matrix, paint);
Drawable drawable = (Drawable)new BitmapDrawable(alteredBitmap);
edit_img.setBackgroundDrawable(drawable);

} catch (Exception e) {
Log.v("ERROR", e.toString());
}
edit_img.setOnTouchListener(this);
setfunction();
}
private void setfunction()
{

Button done_btn=(Button)findViewById(R.id.done);
done_btn.setVisibility(View.VISIBLE);
done_btn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String root = Environment.getExternalStorageDirectory().toString();
// File myDir = new File(root + "/saved_image);
String imagename = "Image.png";
File file = new File (root, imagename);
if (file.exists ()) file.delete ();
try {
FileOutputStream out = new FileOutputStream(file);
alteredBitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
out.flush();
out.close();

} catch (Exception e) {
e.printStackTrace();
}

Intent intent=new Intent(EditImage2.this,SaveImage.class);
intent.putExtra("imagepath",alteredBitmap);
startActivity(intent);
}
});

Button erase_btn=(Button)findViewById(R.id.erase);
erase_btn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
canvas.drawColor(0, Mode.CLEAR);
canvas.drawBitmap(bitmap,matrix, paint);
}
});
}
public boolean onTouch(View v, MotionEvent event) {
if(event.getPointerCount()>1)
{
edit_img.setMaxZoom(4f);
}
else
{
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
downx = event.getX();
downy = event.getY();
Log.i("touch points x,y",downx+"/"+downy);
break;
case MotionEvent.ACTION_MOVE:
upx = event.getX();
upy = event.getY();
Log.i("touch points upx,upy",upx+"/"+upy);
canvas.drawLine(downx, downy, upx, upy, paint);
downx = upx;
downy = upy;
Log.i("touch points x,y",downx+"/"+downy);
//edit_img.invalidate();
v.invalidate();
break;
case MotionEvent.ACTION_UP:
upx = event.getX();
upy = event.getY();
break;
case MotionEvent.ACTION_CANCEL:
break;
default:
break;
}
}
return true;
}

最佳答案

您使用的坐标(来自 event.getX/Y())与您认为的点无关。检查文档,和/或放置一些 System.out.printlns 来验证这一点。

例如,您可能需要使用手动偏移(由 Canvas 绝对位置指定)。

抱歉,我没有说得更具体:我已经离开 Android 很长时间了。这开始是评论,但有点长。

关于android - 徒手绘画不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15305376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com