我使用ImageView创建了一个应用程序,该应用程序显示了用户绘制的位图,一切顺利,但现在我想让用户将图像从ImageView保存到jpeg文件我点击一个按钮。 我怎么能这样做?
这是我的代码:
ImageView imageview;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imageview=(ImageView)findViewById(R.id.imageviewcomponent);
imageview.setDrawingCacheEnabled(true);
}
//This method sets the Bitmap into the ImageView from the ActivityResult of the Drawing Activity
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == get_code && resultCode == RESULT_OK)
{
iv.setImageBitmap((Bitmap) data.getParcelableExtra("Painting"));
}
}
//This is the onClick method of the button for saving the image
public void SaveAsImage(View btsave) throws FileNotFoundException {
Bitmap b=Bitmap.createBitmap(imageview.getWidth(), imageview.getHeight(), Bitmap.Config.ARGB_8888);
OutputStream fOut = null;
new File("/sdcard/signatures").mkdir();
fOut = new FileOutputStream("/sdcard/myPaintings/image.jpg");
b.compress(CompressFormat.JPEG, 95, fOut);
}
用于创建文件夹和保存图像的代码正常工作,因为我可以在myPainting文件夹中找到image.jpg文件,但图像的内容完全是黑色的,没有用户绘制的图像。 如何获取ImageView的内容? (而不是Bitmap格式,然后是其他东西)
答案 0 :(得分:0)
试试这段代码,让我知道发生了什么......
//This is the onClick method of the button for saving the image
public void SaveAsImage(View btsave) throws FileNotFoundException {
Bitmap b = Bitmap.createBitmap(imageview.getWidth(), imageview.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(b);
imageview.draw(canvas);
OutputStream fOut = null;
new File("/sdcard/signatures").mkdir();
fOut = new FileOutputStream("/sdcard/myPaintings/image.jpg");
b.compress(CompressFormat.JPEG, 95, fOut);
}
答案 1 :(得分:0)
稍微修改后的user370305代码也应该可以使用
static void saveDrawable(ImageView imageView) throws FileNotFoundException{
Drawable drawable = imageView.getDrawable();
Rect bounds = drawable.getBounds();
Bitmap bitmap = Bitmap.createBitmap(bounds.width(),bounds.height(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.draw(canvas);
OutputStream fOut = null;
try {
new File("/sdcard/signatures").mkdir();
fOut = new FileOutputStream("/sdcard/myPaintings/image.jpg");
bitmap.compress(Bitmap.CompressFormat.JPEG, 95, fOut);
} finally {
if ( fOut != null ){
try {
fOut.close();
} catch (IOException e) {
//report error
}
}
}
}
答案 2 :(得分:0)
Imageview内部使用 ScaleType 。 它会根据屏幕的像素缩放图像,如果你想获得图像的原始质量,可以使用图纸缓存,
public void SaveAsImage(Holder imageview) throws FileNotFoundException {
View view=findViewById(R.id.holder_frame);
Bitmap bmp=viewToBitmap(imageview);
imageview.setDrawingCacheEnabled(true);
imageview.buildDrawingCache(true);
Bitmap bitmap1=imageview.getDrawingCache();
OutputStream fOut = null;
new File("/sdcard/Pic").mkdir();
fOut = new FileOutputStream("/sdcard/Pic/image4.jpg");
bitmap1.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
imageview.setDrawingCacheEnabled(false);
imageview.destroyDrawingCache();
}