gpt4 book ai didi

android - 使用 ACTION_IMAGE_CAPTURE 拍照并设置 ImageBitmap 显示它

转载 作者:搜寻专家 更新时间:2023-11-01 08:14:29 27 4
gpt4 key购买 nike

编辑我更新了代码以反射(reflect)两个答案中建议的更改,不幸的是,现在我的应用程序强制关闭。错误列在底部

这是我的完整相机/图片类(import 除外)这个类应该拍照,将其显示到屏幕上,并让另一个类具有字符串路径用作附件的图片。它可以很好地拍摄照片,可以很好地通过电子邮件发送照片,但我无法弄清楚如何让它在拍摄后显示照片。我知道那里有一些草率的代码(比如在 onActivityResult 中)但是除了

Bitmap bm = BitmapFactory.decodeFile(image_string);
imageview.setImageBitmap(bm);

效果很好,所以我很想找到解决方案。您对如何清理它的任何其他建议也将非常受欢迎,这只是从多个不同的来源拼凑而成。

public class LooksLike extends Activity
{
Button camera;
Intent intent;
static String image_string;
ImageView imageview;
public void onCreate (Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.lookslike);
camera = (Button) findViewById(R.id.camera);
imageview = (ImageView) findViewById(R.id.debris_view);
camera.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
takePhoto();
}
});
}

public void takePhoto()
{
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(this)) );
startActivityForResult(intent, 1);
Bitmap bm = BitmapFactory.decodeFile(image_string);
imageview.setImageBitmap(bm);
}

private File getTempFile(Context context)
{
File path = new File(Environment.getExternalStorageDirectory(), context.getPackageName() );
if(!path.exists())
path.mkdir();
return new File(path, "debris.jpg");
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode == RESULT_OK)
{
switch(requestCode)
{
case 1:
final File file = getTempFile(this);
try
{
Media.getBitmap(getContentResolver(), Uri.fromFile(file) );
image_string = Uri.fromFile(file).toString();
Bitmap bm = Bitmap.createScaledBitmap(
BitmapFactory.decodeFile(image_string),
getResources().getDisplayMetrics().widthPixels,
getResources().getDisplayMetrics().heightPixels,
true);
imageview = (ImageView) findViewById(R.id.debris_view);
imageview.setImageBitmap(bm);
}
catch (FileNotFoundException e)
{
Toast.makeText(getApplicationContext(), "file not found exception", Toast.LENGTH_SHORT).show();
}
catch (IOException e)
{
Toast.makeText(getApplicationContext(), "ioexception", Toast.LENGTH_SHORT).show();
}
break;
}
}
}
}

此外,这是我的 xml 文件:

<merge xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:id="@+id/debris_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="centerCrop"
android:src="@drawable/icon"
/>
<Button
android:id="@+id/camera"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dip"
android:layout_gravity="center_horizontal|bottom"
android:padding="12dip"
android:background="#AA000000"
android:textColor="#ffffffff"
android:text="would you like to take a new debris picture?"
/>
</merge>

最佳答案

您需要将这两行移动到 onActivityResult() 中:

case 1:
final File file = getTempFile(this);
try {
Media.getBitmap(getContentResolver(), Uri.fromFile(file) );
image_string = Uri.fromFile(file).toString();
Bitmap bm = BitmapFactory.decodeFile(image_string);
imageview.setImageBitmap(bm);
} catch (FileNotFoundException e) {
...

takePhoto() 中的代码将在 startActivityForResult() 之后立即执行(即它不会等待完成调用的 Activity )。处理结果必须在onActivityResult()中完成。

关于android - 使用 ACTION_IMAGE_CAPTURE 拍照并设置 ImageBitmap 显示它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6231645/

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