You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android中使用RectangleF边界裁剪Bitmap?

Android Bitmap 裁剪指定区域的正确实现

你之前用Bitmap.CreateScaledBitmap的问题在于,这个方法是把整个图片缩放到指定的宽高,而不是从原图片里裁剪出你想要的矩形区域——这就难怪达不到预期效果啦!

在Android中,要实现和iOS里WithImageInRect相同的裁剪功能,应该使用Bitmap.createBitmap()方法,它支持直接从源Bitmap中截取指定的矩形区域。下面是适配你需求的正确代码:

// Crop a certain rectangle of your image
Bitmap CropImage(Bitmap srcImage, RectangleF rect) {
    // 将浮点型的RectangleF转换为Android需要的int型Rect(注意坐标和尺寸的取整)
    int x = (int)Math.Round(rect.X);
    int y = (int)Math.Round(rect.Y);
    int width = (int)Math.Round(rect.Width);
    int height = (int)Math.Round(rect.Height);
    
    // 确保裁剪区域不超出源图片的范围(可选但推荐,避免抛出异常)
    x = Math.Max(0, x);
    y = Math.Max(0, y);
    width = Math.Min(width, srcImage.Width - x);
    height = Math.Min(height, srcImage.Height - y);
    
    // 执行裁剪操作
    return Bitmap.CreateBitmap(srcImage, x, y, width, height);
}

关键说明:

  • Bitmap.CreateBitmap(srcImage, x, y, width, height)是Android裁剪Bitmap的核心方法,它会从源Bitmap的(x,y)位置开始,截取宽为width、高为height的区域,生成新的Bitmap。
  • 因为Android的裁剪参数要求是整数,所以需要把RectangleF里的浮点值转换为int,这里用Math.Round做四舍五入处理,比直接强转更精确。
  • 额外添加的边界检查是为了防止裁剪区域超出原图片的尺寸范围,避免运行时抛出IllegalArgumentException。

对比你之前的代码,这个方法才是真正对应iOS中WithImageInRect的功能,而不是缩放整个图片。

内容的提问来源于stack exchange,提问作者Ramon Brokking

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:58:01