Android的保存的图像质量低 [英] Android Saved images are low quality
本文介绍了Android的保存的图像质量低的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是通过以下code拍照并保存到SD卡,但它产生的图像是这样低质量,真正甚至100%的质量片断。也许bitmap.com preSS是不正确的方式去(或位图呢?!)
我的继承人code:
公共类TakePhoto延伸活动{ ImageView的IV; @覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_take_photo);
IV =(ImageView的)findViewById(R.id.imageView1); 按钮B =(按钮)findViewById(R.id.button1);
b.setOnClickListener(新OnClickListener(){ @覆盖
公共无效的onClick(视图v){ 意向意图=新意图(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(意向,0); }
});
} @覆盖
保护无效的onActivityResult(INT申请code,INT结果code,意图数据){
// TODO自动生成方法存根
super.onActivityResult(要求code,结果code,数据); 。位图BM =(位图)data.getExtras()获得(数据);
随机数发生器=新的随机();
字符串randFileName =将String.valueOf(generator.nextInt(965)+ 32);
这两个字符串=到/ mnt / extSdCard / DirectEnquiries /+ randFileName +.JPG;
文件镜像文件=新的文件(两个); writeBitmapToMemory(镜像文件,BM);
iv.setImageBitmap(BM); } 公共无效writeBitmapToMemory(档案文件,位图位图){
FileOutputStream中FOS; 尝试{
Log.e(汤姆,启动取流);
FOS =新的FileOutputStream(文件);
Log.e(汤姆,GOT流);
bitmap.com preSS(Bitmap.Com pressFormat.JPEG,100,FOS);
Log.e(汤姆,保存的图像);
fos.close(); }
赶上(FileNotFoundException异常五){
e.printStackTrace();
}
赶上(IOException异常五){
e.printStackTrace();
} }}
解决方案
请拨打下面的函数从相机拍照。
私人最终静态字符串FOLDER_NAME =YourAppName /图片/;
私人乌里selectedImageUri = NULL;公共无效startCamera()
{
文件照片= NULL;
意向意图=新意图(android.media.action.IMAGE_CAPTURE);
字符串的timeStamp =新的SimpleDateFormat(YYYYMMDD_HHMMSS)格式(新的Date());
如果(android.os.Environment.getExternalStorageState()。等于(android.os.Environment.MEDIA_MOUNTED))
{
照片=新的文件(android.os.Environment.getExternalStorageDirectory(),FOLDER_NAME +文件分割符+的timeStamp +PNG);
}
其他
{
照片=新的文件(getCacheDir(),FOLDER_NAME +文件分割符+的timeStamp +PNG);
}
如果(照片!= NULL)
{
intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(照片));
selectedImageUri = Uri.fromFile(照片);
startActivityForResult(意向,CAPTURE_IMAGE_CALLBACK);
}
}
您可以在selectedImageUri变量获得的图像URI。 (图片存储在SD卡)
保护无效的onActivityResult(INT申请code,INT结果code,意图数据)
{
开关(要求code)
{
案例CAPTURE_IMAGE_CALLBACK: 打破;
}
}
I'm taking pictures through the following code and saving to SD card, but the pictures that it produces are such low quality and really bitty even with 100% quality. Maybe bitmap.compress isn't the right way to go (or bitmap at all?!)
Heres my code:
public class TakePhoto extends Activity {
ImageView iv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_take_photo);
iv = (ImageView) findViewById(R.id.imageView1);
Button b = (Button) findViewById(R.id.button1);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
Bitmap bm = (Bitmap) data.getExtras().get("data");
Random generator = new Random();
String randFileName = String.valueOf (generator.nextInt(965) + 32);
String both = "/mnt/extSdCard/DirectEnquiries/"+ randFileName + ".jpg";
File imageFile = new File(both);
writeBitmapToMemory(imageFile, bm);
iv.setImageBitmap(bm);
}
public void writeBitmapToMemory(File file, Bitmap bitmap) {
FileOutputStream fos;
try {
Log.e("Tom", "Starting take stream");
fos = new FileOutputStream(file);
Log.e("Tom", "Got stream");
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
Log.e("Tom", "Saved Image");
fos.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
解决方案
Please call the below function to capture image from camera.
private final static String FOLDER_NAME = "YourAppName/Image/";
private Uri selectedImageUri = null;
public void startCamera()
{
File photo = null;
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
{
photo = new File(android.os.Environment.getExternalStorageDirectory(), FOLDER_NAME+File.separator+timeStamp+".png");
}
else
{
photo = new File(getCacheDir(), FOLDER_NAME+File.separator+timeStamp+".png");
}
if (photo != null)
{
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
selectedImageUri = Uri.fromFile(photo);
startActivityForResult(intent, CAPTURE_IMAGE_CALLBACK);
}
}
You can get image Uri in selectedImageUri variable . (Image is stored in Sdcard)
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
switch (requestCode)
{
case CAPTURE_IMAGE_CALLBACK:
break;
}
}
这篇关于Android的保存的图像质量低的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文