使用 ACTION_IMAGE_CAPTURE 拍照并 setImageBitmap 来显示它

2024-03-19

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

这是我的相机/图片类的全部内容(除了imports) 这个类应该拍摄一张照片,将其显示到屏幕上,并让另一个类拥有图片的字符串路径以用作附件。 它拍摄的照片很好,它通过电子邮件发送的照片也很好,但我不知道如何让它在拍摄后显示照片。我知道那里有一些草率的代码(就像在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) {
        ...

Code in takePhoto()将在之后立即执行startActivityForResult()(即它不会等待完成调用的活动)。处理结果必须在onActivityResult().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ACTION_IMAGE_CAPTURE 拍照并 setImageBitmap 来显示它 的相关文章

随机推荐

  • 返回模拟方法的参数作为结果

    最简单的例子 我有以下方法 public String testMethod String arg 我想模拟这个方法以返回传递的参数作为结果 例如 testMethod aString returns aString testMethod
  • cURL 错误:SSL 对等证书或 SSH 远程密钥不正常 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions Using
  • 将 php 变量从一个文件传递到另一个文件?

    我在主文件 main php 中设置了一个变量 并且需要第二个文件 uploads php 来引用第一个文件中设置的变量 它现在返回未定义 第二个文件使用 load 加载到第一个文件中 下面的代码示例 Main php 内容 div div
  • 用于检查 MySQL TABLE LOCK 状态的 Php 脚本

    我使用 mysqldump 进行 MySQL 备份 mysqldump lock tables DB大约2GB 因此mysqldump需要很长时间 如果有人在备份期间尝试访问数据库 我会显示一条消息 数据库正在备份 请在10分钟后返回 我的
  • Android中View和ViewGroup的区别

    和有什么区别View and a ViewGroup在Android编程中 View View对象是 Android 中用户界面 UI 元素的基本构建块 View是一个简单的矩形框 它响应用户的操作 例子是EditText Button C
  • 关于 [base + index*scale + disp] 和 AT&T disp(base,index,scale) 的几个问题

    Intel 和 AT T 语法中内存寻址的一般形式如下 base index scale disp Intel including GAS intel syntax noprefix disp base index scale AT T 我
  • AngularJS 的面向对象方法

    Angular 似乎没有提供内置的解决方案来定义具有属性和方法的类实例 并且需要开发人员来构建它 您认为这样做的最佳做法是什么 如何将其与后端链接 我收集的一些技巧使用工厂服务和命名函数 资料来源 Tuto 1 https medium c
  • 使用 Spring boot 和 JWT 保护 REST Api

    我正在尝试使用以下方法来保护我的 REST 服务器JWT我已经实现了自己的 这意味着 JWT 中没有 spring 的东西可以自行处理 其他一切都是Spring当然 我有这门课 JWTToken implements Authenticat
  • Windows 应用程序认证工具包验证期间出现“检测到高操作系统版本验证”错误

    运行时出现以下测试失败Windows App Certification Kit 10 0 Platform version launch Error Found The high OS version validation detecte
  • 尝试使用空的捕获[重复]

    这个问题在这里已经有答案了 假设我有一个 try 语句和空 catch 是不好的做法吗 例如 假设我有两次单独的尝试 其中一次可能失败 但另一次成功 或者两者都成功 或者任何可能的组合 处理这样的代码是不好的做法吗 Example if m
  • 定义全局 android.widget var/val 时的“lateinit”或“by懒惰”

    定义全局时android widget变量 例如TextView 是否最好使用lateinit or by lazy 我最初想使用by lazy会被首选 因为它是不可变的 但我不完全确定 by lazy例子 class MainActivi
  • React-router - 如何在 React 中的页面之间传递数据?

    我正在开发一个项目 必须将数据从一个页面传递到另一个页面 例如 我有data在第一页上 let data id 1 name Ford color Red id 2 name Hyundai color Blue 这是第一个组件页面 我在其
  • javascript:如何调试键盘事件

    想象一个使用自定义键盘事件处理程序的 Web 应用程序 该处理程序可能会执行事件冒泡或事件捕获 有没有办法 例如 Firefox Firebug 插件 调试每个击键 键盘事件 就像是 显示事件类型和所有属性 跟踪哪个 javascript
  • 在三个js中使用鼠标悬停更改网格的颜色

    我已经编写了一个 WebGL 脚本 该脚本使用 jsonloader 和 Three js 显示多个网格 现在我想添加 MouseOver 和 onClick 事件 第一个是当鼠标悬停在网格上时简单地更改网格的颜色 function ren
  • PHP/Smarty 来自数据库的嵌套数组

    好的 我正在尝试通过嵌套查询访问 php mysql 数据库 例如 我有 2 张桌子 1 人和 2 登记 我在注册中有一个推荐 ID 选项卡 因此 当用户登录时 他应该能够看到在其 ID 下完成的 4 级注册 表结构 登记 编号 注册ID
  • Seaborn FacetGrid 包括用于删除级别的空列/行[重复]

    这个问题在这里已经有答案了 我正在使用内置的 Seaborn 数据集钻石建立一个基于 切割 和 颜色 的 FacetGrid 然而 我首先删除颜色 D 和 E 以及剪切 Fair 希望得到 5x5 网格 我的代码是 diamonds sns
  • PHP 类型转换混乱

    我有以下代码 我一直认为 res 应该是 false 就像上面的表达式一样 PHP 会尝试将 val 类型转换为布尔类型 其中零将被转换为 false 和字符串 非空字符串为 true 但是如果我执行上面的代码输出将是 boolean tr
  • 何时使用 Hashie::Mash?

    正在从这个 JSON API 获取一些产品 我想知道 我真的需要吗Hashie Mash 直播应用程序 http runnable com U QJCIFvY2RGWL9B pretty json keys http runnable co
  • 获取每秒音频文件的最大幅度

    我知道这里有一些类似的问题 但大多数都与生成波形有关images 这不是我想要的 我的目标是为音频文件生成波形可视化 类似于 SoundCloud 但不是图像 我希望获得数组中音频剪辑每秒 或半秒 的最大幅度数据 然后我可以使用这些数据创建
  • 使用 ACTION_IMAGE_CAPTURE 拍照并 setImageBitmap 来显示它

    编辑我更新了代码以反映两个答案中建议的更改 不幸的是 现在我的应用程序强制关闭 错误列在底部 这是我的相机 图片类的全部内容 除了imports 这个类应该拍摄一张照片 将其显示到屏幕上 并让另一个类拥有图片的字符串路径以用作附件 它拍摄的