我的目标是在资源图像之上绘制。
所以,我从我的资源加载图像:
bm = BitmapFactory.decodeResource(getResources(), R.drawable.image).copy(Bitmap.Config.ARGB_8888, true);
我知道这不是最好的方法,因为它可以解决内存问题,但现在不是我关心的问题...... 然后,我创建一个画布并在其上绘制
Canvas canv = new Canvas(bm);
canv.drawLine(0, 10, 50, 70, paint);
然后我将Bitmap导出到一个文件。
现在,问题是:
有没有办法指定w.r.t坐标。原始图像的像素,或在不同设备中获得图像结果相同的方法?
谢谢!
答案 0 :(得分:1)
您面临的行为是因为Android密度概念。这意味着当您从R.drawable.id创建位图时,它会根据设备密度缩放图像。 机制几乎如下:
您可以在此处查看详细信息:http://developer.android.com/guide/practices/screens_support.html
但是,如果您只需要在所有设备上使用相同的位图分辨率,我可以建议两种方法:
1)将图像放入drawable /文件夹中,但只放入一个:/ drawable- nodpi 。它将阻止它进行缩放,并将拒绝Android调整设备密度
2)您可以尝试这种方法:
InputStream is = getResources().openRawResource(imageId);
originalBitmap = BitmapFactory.decodeStream(is);
通过这种方式,您可以避免使用Android密度缩放系统,并获得与/ drawable /文件夹中资源大小完全相同的位图。
如果需要更多细节,请告诉我。祝你好运
答案 1 :(得分:0)
我相信这可能是因为您将Bitmap放入res/drawable
文件夹。根据您运行应用程序的设备,分辨率将改变位图,因此不会按照需要绘制线条。
您可以通过将位图放在assets文件夹中并按以下方式加载来解决此问题:
public Bitmap readBitmapFromMemory(String filename) {
Bitmap defautBitmap = null;
File filePath = this.getFileStreamPath(filename);
FileInputStream fi;
try {
fi = new FileInputStream(filePath);
defautBitmap = BitmapFactory.decodeStream(fi);
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
return defautBitmap;
}
我希望这会有所帮助。