【HarmonyOS NEXT】如何实现裁剪框固定不动,拖拽或缩放图片裁剪成适当矩形的图片裁剪功能

 【关键字】

裁剪框 / 固定 / 拖拽 / 缩放 / 图片裁剪

【问题描述】

开发中遇到选择图片上传到服务器的功能。图片可根据需要裁剪成适当的矩形,具体操作是图片从相册选择,然后拖拽、缩放图片,裁剪框固定不动。目前鸿蒙中是否有提供类似的API或者SDK可以使用?

iOS demo地址:https://github.com/Vesincc/HQImageEditViewController/tree/master

【解决方案】

Demo:https://gitee.com/openharmony/codelabs/tree/master/Media/ImageEdit

实际效果示例。

ImageEdit.gif

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
FreeBASIC本身并没有内置处理图片的库,需要使用第三方库。这里我使用了FreeImage库,你需要先安装该库并在代码中引用。 以下是一个读取PNG图片裁剪圆形的例子: ``` #include once "freeimage.bi" Const As String FILENAME = "test.png" Const As Integer RADIUS = 150 ' 圆的半径 Dim As FreeImage_Bitmap Ptr bmp, mask, cropped Dim As Integer width, height, x, y, i, j, k Dim As UByte Ptr p, m, c, q ' 读取原始图片 bmp = FreeImage_Load(FIF_PNG, FILENAME, 0) ' 获取图片大小 width = FreeImage_GetWidth(bmp) height = FreeImage_GetHeight(bmp) ' 创建掩码图像 mask = FreeImage_Allocate(width, height, 24, 0, 0, 0) m = FreeImage_GetBits(mask) ' 创建裁剪后的图像 cropped = FreeImage_Allocate(RADIUS * 2, RADIUS * 2, 24, 0, 0, 0) q = FreeImage_GetBits(cropped) ' 构造掩码图像 For y = 0 To height - 1 For x = 0 To width - 1 ' 获取像素值 p = FreeImage_GetPixelColor(bmp, x, y) c = p + 2 ' 从RGB转换到BGR ' 通过计算像素到中心的距离,判断是否在圆内 If (x - width/2)^2 + (y - height/2)^2 <= RADIUS^2 Then ' 在圆内,掩码为白色 m[y*width*3 + x*3] = 255 m[y*width*3 + x*3 + 1] = 255 m[y*width*3 + x*3 + 2] = 255 Else ' 不在圆内,掩码为黑色 m[y*width*3 + x*3] = 0 m[y*width*3 + x*3 + 1] = 0 m[y*width*3 + x*3 + 2] = 0 End If Next Next ' 裁剪图像 For j = 0 To RADIUS * 2 - 1 For i = 0 To RADIUS * 2 - 1 ' 获取掩码位置 k = (j - RADIUS) * width * 3 + (i - RADIUS) * 3 If m[k] = 255 Then ' 在圆内,复制像素到裁剪后的图像 q[j * RADIUS * 2 * 3 + i * 3] = c[k] q[j * RADIUS * 2 * 3 + i * 3 + 1] = c[k + 1] q[j * RADIUS * 2 * 3 + i * 3 + 2] = c[k + 2] End If Next Next ' 保存裁剪后的图像 FreeImage_Save(FIF_PNG, cropped, "cropped.png", 0) ' 释放内存 FreeImage_Unload(bmp) FreeImage_Unload(mask) FreeImage_Unload(cropped) ``` 请注意,这个例子只是简单的将图片裁剪圆形,但是并没有处理透明背景。如果你需要处理透明背景,需要在掩码的计算中增加对Alpha通道的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值