居中裁剪图像以适当的尺寸在 ImageView 上设置

2023-12-22

我正在使用相机 API 来拍照,我必须根据我的图像视图大小打开不同尺寸的相机。我正在关注我们在 Android sdk/sample/adroid-18 中获得的名为“ApiDemo”的示例项目,我所做的更改不是在 setcontentview 上设置相机。我已将相机设置为“框架布局”。起初我的相机预览是浆糊的,所以我得到了相机 OptimalPreviewSize 并将 FrameLayout 参数宽度和高度设置为换行内容。现在相机预览比 ImageView 小(我想要的大小)。如果我将 FrameLayout 参数的大小设置为 match-parent,则相机视图会拉伸。如何解决此问题。

找到此链接以获取更多规范。Android 相机预览看起来很奇怪 https://stackoverflow.com/questions/12751016/android-camera-preview-look-strange/12751221#12751221

UPDATE

我的相机预览大小很好,现在我使用 on Layout 方法,想法是我有比 ImageView 更大的布局,现在相机预览看起来不错。 现在我面临的问题是设置适当尺寸的图像,为此我必须将裁剪和缩放以相同的尺寸居中,就像我的 ImageView 一样。我通过 TakePicture 方法获得此图像并将其保存在 SD 卡中。

为此,我使用这种方法:-

    public Bitmap scaleCenterCrop(Bitmap source, int newHeight, int newWidth) {
    int sourceWidth = source.getWidth();
    int sourceHeight = source.getHeight();

    // Compute the scaling factors to fit the new height and width, respectively.
    // To cover the final image, the final scaling will be the bigger 
    // of these two.
    float xScale = (float) newWidth / sourceWidth;
    float yScale = (float) newHeight / sourceHeight;
    float scale = Math.max(xScale, yScale);

    // Now get the size of the source bitmap when scaled
    float scaledWidth = scale * sourceWidth;
    float scaledHeight = scale * sourceHeight;

    // Let's find out the upper left coordinates if the scaled bitmap
    // should be centered in the new size give by the parameters
    float left = (newWidth - scaledWidth) / 2;
    float top = (newHeight - scaledHeight) / 2;

        // The target rectangle for the new, scaled version of the source bitmap will now
        // be
        RectF targetRect = new RectF(left+50, top, left + scaledWidth, top + scaledHeight+50);
//      RectF targetRect = new RectF(0, 0, newWidth, newHeight/2);
        // Finally, we create a new bitmap of the specified size and draw our new,
        // scaled bitmap onto it.
        Bitmap dest = Bitmap.createBitmap(newWidth, newHeight, source.getConfig());
        Canvas canvas = new Canvas(dest);
        canvas.drawBitmap(source, null, targetRect, null);

        return dest;
}

但结果图像质量不好。高度角从顶部和底部切割,结果图像质量不好。像素被拉伸。

不要告诉我使用scaleType=Center_crop,我在我的情况下不能使用它,并且不想向用户显示裁剪框,所有过程不应该显示在用户界面上。

UPDATE

我使用打击方法从中心裁剪图像并根据我的 imageView 大小进行缩放

Bitmap dstBmp = ThumbnailUtils.extractThumbnail(source, newWidth, newHeight);

但我得到的位图看起来与 FrameLayout 上显示的相机预览不一样。因为相机预览很大。我认为这些代码裁剪了很大的区域。 我尝试减小宽度并更改高度,但没有得到我想要的相同裁剪图像。

在图片裁剪后,我还有一个想法,即在 FrameLayout 上自动设置最后一个图像帧。我们可以从框架布局中获取设置的框架吗?这怎么可能?

这是这样的问题如何在 Android 中检索 SurfaceView 的可见部分 https://stackoverflow.com/questions/19781598/how-to-retrieve-the-visible-part-of-a-surfaceview-in-android有没有人有解决办法。

我想通过这条线实现这一点ThumbnailUtils.extractThumbnail(source, newWidth, newHeight);通过这一行,我得到了类似于图中描述的图像的 src 。

这一行到底要改变什么???


中心裁剪图像可能会帮助您。

public Bitmap scaleCenterCrop(Bitmap source, int newHeight, int newWidth) {
    int sourceWidth = source.getWidth();
    int sourceHeight = source.getHeight();

    // Compute the scaling factors to fit the new height and width, respectively.
    // To cover the final image, the final scaling will be the bigger
    // of these two.
    float xScale = (float) newWidth / sourceWidth;
    float yScale = (float) newHeight / sourceHeight;
    float scale = Math.max(xScale, yScale);

    // Now get the size of the source bitmap when scaled
    float scaledWidth = scale * sourceWidth;
    float scaledHeight = scale * sourceHeight;

    // Let's find out the upper left coordinates if the scaled bitmap
    // should be centered in the new size give by the parameters
    float left = (newWidth - scaledWidth) / 2;
    float top = (newHeight - scaledHeight) / 2;

    // The target rectangle for the new, scaled version of the source bitmap will now
    // be
    RectF targetRect = new RectF(left, top, left + scaledWidth, top + scaledHeight);

    // Finally, we create a new bitmap of the specified size and draw our new,
    // scaled bitmap onto it.
    Bitmap dest = Bitmap.createBitmap(newWidth, newHeight, source.getConfig());
    Canvas canvas = new Canvas(dest);
    canvas.drawBitmap(source, null, targetRect, null);

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

居中裁剪图像以适当的尺寸在 ImageView 上设置 的相关文章

  • 确定是否在已取得 root 权限的设备上运行

    我的应用程序具有某些功能 该功能只能在具有 root 权限的设备上运行 与其让此功能在使用时失败 然后向用户显示适当的错误消息 我更喜欢能够先默默地检查 root 是否可用 如果不可用 则首先隐藏相应的选项 有没有办法做到这一点 这是一个类
  • fresco 的 Proguard 错误

    我正在使用 ProGuard 当我在发布配置中运行项目时 出现以下错误 Warning com facebook imagepipeline bitmaps DalvikBitmapFactory can t find referenced
  • 如何检测android中的颠倒方向?

    在我的 Android 应用程序中 我有全景图像 并且我使用 TYPE ORIENTATION 传感器根据手机运动旋转该图像 它对于横向和纵向都工作良好 这是旋转逻辑的代码 Override public void onSensorChan
  • Sqlite 查询检查 - 小于和大于

    return mDb query DATABASE TABLE new String KEY ROWID KEY LEVEL KEY LEVEL gt 3 lt 5 null null null null 我究竟做错了什么 它返回的值全部高
  • ActionBarCompat 支持库 android:selectableItemBackground 不起作用

    我正在使用新的 ActionBarCompat 支持库 操作栏中的操作按钮在按下时应更改其背景 它适用于 Android 4 3 但不适用于 Gingerbread 在姜饼中 如果我按下按钮 它不会改变背景 我什至改变了选择器 它再次适用于
  • 如何使用 (a)smack 在 Android 上保持 XMPP 连接稳定?

    我使用适用于 Android 的 asmack android 7 beem 库 我有一个后台服务正在运行 例如我的应用程序保持活动状态 但 XMPP 连接迟早会在没有任何通知的情况下消失 服务器表示客户端仍然在线 但没有发送或接收数据包
  • Android 上通过 JSCH 的基本 SSH 连接

    作为来自此的用户question https stackoverflow com questions 14323661 simple ssh connect with jsch和这个tutorial http eridem net andr
  • 如何从静态快捷方式启动活动的现有实例

    我的应用程序中有一个活动 MainActivity 并且有一个静态快捷方式 指向 TempActivity 由于静态快捷方式将始终设置 FLAG ACTIVITY NEW TASK 和 FLAG ACTIVITY CLEAR TASK 因此
  • 不使用 CookieManager 的 Android 会话 cookie

    我的应用程序进行多次网络调用以获得身份验证 我需要将此会话存储在 cookie 中 我想使用 Cookie Manager 但经过一些研究后 我发现它仅适用于 API 9 及更高版本 并且我的应用程序需要向后兼容 我使用 HTTPURLCo
  • 注销时Firebase facebook按钮android身份验证

    我在我的 Android 应用程序中使用 firebase 并在 facebook SDK 中使用登录 我面临的唯一问题是 当我使用 facebook 登录然后注销时 facebook 登录按钮处于 注销 状态 当我单击它时 它会询问我是否
  • 在 Android 中关闭 Spinner 中的下拉菜单

    在 Android 中打开和关闭微调器时 我需要为箭头图标设置动画 打开微调器时我可以旋转箭头 我只是放了一个setOnTouchListener on the Spinner 当下拉菜单关闭或隐藏时 问题就来了 因为我不知道如何在该操作上
  • Twitter 集成期间获取访问令牌函数行为不当

    我只是想使用 twitter4j 从我的 Android 应用程序向 Twitter 分享文本 首先 我尝试的是我创建了一个新项目 并且这个特定的代码运行成功 然后我在我的应用程序中混合了该特定代码 登录 Twitter 成功完成 之后我发
  • NullPointerException org.chromium.android_webview.AwContents$AwViewMethodsImpl.onDragEvent

    大约 10 天前 我的应用程序开始记录此异常 在开发控制台上看到 java lang NullPointerException at org chromium android webview AwContents AwViewMethods
  • Android 在创建时出现 SQLiteException

    首先我想说我是android新手 所以如果这个问题太愚蠢我很抱歉 我正在为带有两个表的 SQLite 数据库编写一个内容提供程序 表格上是在导航抽屉活动中显示列表 第二个表格是在 ListFragment 中显示 每次启动应用程序时 我都会
  • Android - 内容值覆盖现有行

    我正在尝试使用插入值ContentValues 我已将 5 个值插入到 5 列中 运行应用程序后 我只有最后一组值的行ContentValues 前四组未插入 ContentValues cv new ContentValues cv pu
  • Android框架结构与MFC/Win32结构的比较?

    我为 Android 和 Windows 进行开发 使用 MFC 有时使用 win32 昨天我随意比较了这两个框架 它们显然非常非常不同 因此 Windows 开发与 Android 开发有很大不同 我想知道人们认为 Android 这样的
  • 在Android的activity中调用onResume

    在活动的过程中通过调用 this OnResume 强制 onResume 事件可以吗 或者我应该实现另一个由 OnResume 和第一个成员调用的过程 实现在您的重写中调用的另一个过程onResume 后者不打算由您调用 它是一种方便的方
  • Android apk 调试模式工作正常,但发布模式给出太多警告

    我正在尝试从 eclipse 获取签名的 APK 我有一个可调试的 apk 版本 运行良好 现在发布时 当我尝试使用 Eclipse ADT 进行编译和签名时 我收到很多警告 其中大部分是can t find superclass or i
  • 在Android中提取视频帧

    我想知道是否可以从 Android 中正在运行的视频中提取帧 我需要定期提取帧并将其发送以进行进一步处理 有人能为我找到答案吗 Thanks Abhi 您可以使用媒体元数据检索器 http developer android com ref
  • 将数据放入短信发送意图中?

    我想发送短信 如果文字太长 我会将其分成多条消息 我试图将一些额外的信息放入 已发送 意图中 以了解哪个部分已发送 以及所有部分何时完成 ArrayList

随机推荐

  • 旧版本的 spring boot 无法在 Java 11 上启动

    我正在使用 spring boot 应用程序的 1 4 1 RELEASE Java 8 一切正常 但是 当我将 java 版本更新到 11 时 我无法使用命令运行应用程序mvn clean spring boot run 同时我可以打包成
  • 覆盖getter只需要@synthesize

    我想覆盖惰性实例化的 getter 并保留默认的 setter 我需要 synthesize 吗 Why interface Foo property strong nonatomic NSObject bar end implementa
  • 表达式/语句树

    进一步更新问题 我一直在尝试使用 NET 4 中的表达式树在运行时生成代码 并且我一直在尝试实现foreach通过构建表达式树来声明 最后 表达式应该能够生成执行此操作的委托 Action
  • 如何在 git 上执行 3 向视觉差异?

    我想对存在于 2 个不同分支中的单个文件进行 3 路比较 即每个分支中的最后一次提交 并考虑共同的祖先 我想使用一个允许进行三向比较的外部工具 我正在考虑使用 git difftool 但据我所知 它只允许比较给定文件的任何两个版本 我可以
  • 计算嵌套列表中包含特定元素的列表的数量

    我有一个列表 例如 res a b a a b c a 我想计算有多少个列表包含特定字母 例如 a 包含在 3 个列表中 b 包含在 2 个列表中 c 包含在 1 个列表中 下面的代码是我到目前为止所拥有的 count 0 docs a l
  • Visual Studio 2013 的 RC 更新 2 共享项目

    我最近安装了 Visual Studio 2013 的 RC 更新 2 在浏览通用应用程序的模板时 我发现了一个项目 Shared其中有一个扩展 shproj 当我在网上浏览一些材料时 我发现它是一个用于共享代码和文件的项目模板 我认为这很
  • clang-format 正则表达式语法参考

    我希望 clang format 不修改我用来分隔函数的注释行 我认为commentPragmas是正确的选择 但我找不到有关 clang format 正则表达式格式的信息 I tried commentPragmas 捕捉我的分隔线 看
  • 如何在 PHP 中包含其他文件?

    我刚刚开始在家里创建一个网站 当然 我必须有这两个页面才能快速完成我的网站 footer php header php 所以我创建了这些页面并放置了一些内容 还创建了一个索引页作为index php在 的里面htdocs folder 然后
  • 并行运行多个查询动画

    我有两个路由组件及其容器 我已为其设置了动画触发器 slide 其中我查询每个并相应地设置动画 div div
  • 如何检测屏幕脚轮android,检测点击压力

    我开发了一个玩起来很有趣的应用程序 但有一些顽皮的人通过使用不同类型的方式破坏其他人的乐趣屏幕脚轮然后玩弄自动化脚本并欺骗用户 这是一个链接 http code google com p androidscreencast 一位非常著名的屏
  • MagicalRecords 从 JSON / NSDictionary 导入数据。导入关系

    我对人际关系有疑问 我必须使用 NSManagedObject 类 Team 和 Player 团队可以包含许多玩家 玩家只能包含一支球队 以下是两个请求的 JSON team id 1 name Chicago Bulls city Ch
  • Excel VBA 工作簿.ChangeFileAccess

    我在使用 VBA 更改 Excel 工作簿上的文件访问模式时遇到问题 我使用的是 Office 2010 我希望能够适当地在只读和读写模式之间切换 然而 似乎将工作簿从读 写更改为只读 然后再返回 如下面的代码所示 在尝试访问工作簿对象的任
  • XML 两个同名标签

    在我的 XML 文档中 我有两个同名的标签 都称为 item 我现在已经为此文档创建了一个 XML 架构 考虑到我有两个同名的标签 我的 XML 架构准确吗 XML文档
  • 无法在我自己的代码中将 CHOLMOD 与 CUDA 加速一起使用

    我正在尝试使用CHOLMOD with CUDA加速度SuiteSparse 4 4 4 我按照用户指南编译了它 我可以运行gpu sh under Demo文件夹成功 这表明GPU正在做部分工作 但是 当我尝试使用运行我自己的代码时CHO
  • 以编程方式加载 SSIS 包配置

    我正在 SSIS 中制作一个框架 用于从可配置文件夹加载文件并将它们与数据库中的逻辑作业相匹配 在此作业中配置了包名称 并在 SSIS 中我在运行时执行此包 我想根据加载的作业以编程方式加载此包的包配置 SSIS SQL Server 包配
  • 基于 SAML 断言的 SAML2 身份验证和授权

    我在用着spring security saml2 service provider针对 SAML IdP 验证我的 SpringBoot Web 应用程序 这有效 我还可以使用 REST 控制器访问 SAML 断言 Authenticat
  • H2数据库:使用jdbcTemplate插入记录时,列“ID”不允许为NULL

    我使用 hibernate 的 hbm2ddl 自动生成模式 这是我的域名 Entity public class Reader Id GeneratedValue strategy GenerationType AUTO Long id
  • 推送通知加密错误

    我在 PHP Laravel 应用程序中使用 Push Notifs 我创建了一个 pem 文件并对其进行了测试 在我的开发机器上使用它时 它可以正确推送到移动设备 当我现在将整个项目推送到生产服务器并启动 Pushnotif 调用时 我收
  • Spark:reduce和reduceByKey之间的语义差异

    在 Spark 的文档中 它说 RDDs 方法reduce http spark apache org docs latest api scala index html org apache spark rdd RDD需要一个结合与交换的二
  • 居中裁剪图像以适当的尺寸在 ImageView 上设置

    我正在使用相机 API 来拍照 我必须根据我的图像视图大小打开不同尺寸的相机 我正在关注我们在 Android sdk sample adroid 18 中获得的名为 ApiDemo 的示例项目 我所做的更改不是在 setcontentvi