在android中实现徒手裁剪

2023-11-23

我正在尝试使用画布在 Android 中实现徒手裁剪。我用drawPath并将其存储在列表中并将其绘制在画布路径绘图中,

像这样

enter image description here

但现在我想用这段代码使该路径中的所有像素都位于侧面区域,但我不知道该怎么做。

public  Bitmap getBitmapWithTransparentBG(Bitmap srcBitmap) 
    {
        Bitmap result = srcBitmap.copy(Bitmap.Config.ARGB_8888, true);
        int nWidth = result.getWidth();
        int nHeight = result.getHeight();
        for (int y = 0; y < nHeight; ++y)
        {
          for (int x = 0; x < nWidth; ++x) 
          {
             for (int i = 0; i < points.size() ; i++) 
             {

             }
              result.setPixel(x, y, Color.TRANSPARENT);
          }
        }
        return result;
    }

点是路径坐标列表,听是绘制路径的代码

package com.org;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;

public class SomeView extends View implements OnTouchListener {

    private Paint paint;
    List<Point> points;
    int DIST = 2;
    boolean flgPathDraw = true;

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.waterlilies);

    public SomeView(Context c  ) {
        super(c);
        setFocusable(true);
        setFocusableInTouchMode(true);

        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(2);
        paint.setColor(Color.WHITE);

        this.setOnTouchListener(this);
        points = new ArrayList<Point>();
    }
    public SomeView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setFocusable(true);
        setFocusableInTouchMode(true);

        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(2);
        paint.setColor(Color.WHITE);

        this.setOnTouchListener(this);
        points = new ArrayList<Point>();

    }

    public void onDraw(Canvas canvas) 
    {
        canvas.drawBitmap(bitmap, 0, 0, null);

        Path path = new Path();
        boolean first = true;

        for (int i = 0; i < points.size(); i += 2) 
        {
            Point point = points.get(i);
            if (first) {
                first = false;
                path.moveTo(point.x, point.y);
            } else if (i < points.size() - 1) {
                Point next = points.get(i + 1);
                path.quadTo(point.x, point.y, next.x, next.y);
            } else {
                path.lineTo(point.x, point.y);
            }
        }
        canvas.drawPath(path, paint);
    }

    public boolean onTouch(View view, MotionEvent event) {
        // if(event.getAction() != MotionEvent.ACTION_DOWN)
        // return super.onTouchEvent(event);
        Point point = new Point();
        point.x = (int) event.getX();
        point.y = (int) event.getY();

        if (flgPathDraw) {
            points.add(point);
        }

        invalidate();
        Log.e("Hi  ==>", "Size: " + points.size());

        return true;
    }
    public void fillinPartofPath()
    {
        Point point = new Point();
        point.x = points.get(0).x;
        point.y = points.get(0).y;

        points.add(point);
        invalidate();
    }
    public void resetView()
    {
        points.clear();
        paint.setColor(Color.WHITE);
        paint.setStyle(Style.STROKE);
        flgPathDraw=true;
        invalidate();
    }
}

class Point {
    public float dy;
    public float dx;
    float x, y;

    @Override
    public String toString() {
        return x + ", " + y;
    }
}

您好,我认为下面的链接提供了您的确切解决方案,您尝试什么?

Android:自由裁剪图像

不要忘记在这里留下您的投票和反馈。

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

在android中实现徒手裁剪 的相关文章

  • 如何从 SDK 实现每个会话的 Google Places 自动完成功能?

    是否可以从 Android 和 iOS 应用程序的 place sdk 实现基于会话的自动完成 根据 6 月 11 日生效的新 Google 地图框架定价 对自动完成的请求可以分为基于击键 会话的请求 我找不到描述实施步骤的文档 除了这个参
  • 如何自定义菜单项的背景颜色?

    我正在尝试定制Toolbar的弹出菜单 现在我无法设置菜单项的背景颜色 我的 styles xml 如下所示
  • 从响应中获取标头(Retrofit / OkHttp 客户端)

    我正在使用 Retrofit 与 OkHttp 客户端和 Jackson 进行 Json 序列化 并希望获取响应的标头 我知道我可以扩展 OkClient 并拦截它 但这发生在反序列化过程开始之前 我基本上需要的是获取标头以及反序列化的 J
  • 按下按钮时应用不同的样式

    有没有办法在按下按钮时将样式应用于按钮 如果我有一种风格样式 xml
  • Android WebView里面的ScrollView只滚动scrollview

    在我的应用程序中 我有一个 ScrollView 其中包含一些线性视图 一些文本视图和一个 Webview 然后是其他线性布局等 问题是 WebView 不滚动 Scroll 仅侦听 ScrollView 有什么建议么
  • 通过 WhatsApp 发送消息

    由于我发现了一些较旧的帖子 表明 Whatsapp 不支持此功能 我想知道是否发生了变化 以及是否有办法打开与我通过意图发送的号码进行 Whatsapp 聊天 UPDATE请参阅https faq whatsapp com en andro
  • Dialog.setTitle 不显示标题

    我正在尝试向我的对话框添加自定义标题 但是每当我运行我的应用程序时 它都不会显示标题 我创建对话框的代码是 final Dialog passwordDialog new Dialog this passwordDialog setCont
  • 以编程方式将文本颜色设置为主要 Android 文本视图

    如何设置我的文本颜色TextView to android textColorPrimary以编程方式 我已经尝试了下面的代码 但它将 textColorPrimary 和 textColorPrimary Inverse 的文本颜色始终设
  • 当它的父级是 ConstraintLayout 时设计 CardView 吗?

    我在编辑包含Relativelayout的Cardview内的RelativeLayout时搞砸了 ConstraintLayout会将相对布局的wrap content更改为0并添加工具 layout editor absoluteX 1
  • Android - AudioRecord类不读取数据,audioData和fftArray返回零

    我是 Android 新手 一直在开发音调分析器应用程序 最低 SDK 8 我读了很多关于如何实现 Audiorecord 类的文章 但我想知道为什么它在我录制时不读取任何数据 我尝试显示 audioData 和 fftArray 的值 但
  • Mipmap 与可绘制文件夹[重复]

    这个问题在这里已经有答案了 我正在使用 Android Studio 1 1 Preview 1 我注意到 当我创建一个新项目时 我得到以下层次结构 不同 DPI 的 Mipmap 文件夹 不再有不同 DPI 的可绘制文件夹 我应该将所有资
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • WorkManager 或 AlarmManager 用于日常请求然后通知工作?

    这是用例 用户设置具有特定时间的每日通知 在指定时间 发出网络请求以获取一些数据 然后使用检索到的数据显示通知 我不确定是否应该使用 AlarmManager 还是 WorkManager 来实现这个用例 据我了解 AlarmManager
  • 如何在 Android 中从 WorkManager 取消工作?

    我已经保存了 WorkManagerUUID转换成String在领域数据库中 这是代码 Constraints constraints new Constraints Builder setRequiredNetworkType Netwo
  • Android 如何将总天数准确更改为年、月、日?

    我正在做一个应用程序 该应用程序与根据给定的生日日期输入获取一个人的年龄有关 为此 我从下面的代码中获取从该日期到当前日期的总天数 String strThatDay 1991 05 10 SimpleDateFormat formatte
  • 在 Samsung Galaxy S5 Android 5.0 上使用 MediaPlayer 加载音频流需要超过 10 秒

    由于更新至 Android 5 0 MediaPlayer 在 Samsung Galaxy S5 上无法正常工作 启动音频流后加载时间超过 10 秒 示例代码 MediaPlayer mPlayer new MediaPlayer Str
  • Android - 以编程方式选择菜单选项

    有没有办法以编程方式选择菜单选项 基本上 我希望视图中的按钮能够执行与按特定菜单选项相同的操作 我正在考虑尝试调用 onOptionsItemSelected MenuItem item 但我不知道要为菜单项添加什么 是的 有一种方法可以选
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • Android:如何从网络异步获取搜索建议?

    我创建了一个可搜索的活动 现在 我想添加从网络服务获取的搜索建议 我想异步获取这些建议 根据添加自定义建议 http developer android com guide topics search adding custom sugge
  • 发布的 Android apk 出现错误“包文件未正确签名”

    我最近将我的应用程序上传到 Android 市场 但是由于错误 下载时它拒绝运行 包文件未正确签名 我首先使用 eclipse 发布了数据包 右键单击导出 创建密钥库然后发布 但它拒绝工作 然后我下载了 keytool 和 jarsigne

随机推荐

  • ASP.NET MVC 4 缩小和背景图像

    我目前正在使用 ASP NET MVC 4 CSS JavaScript 优化器 它与我自己的 CSS JavaScript 配合得很好 但我也想将它与插件一起使用 每个插件都有自己的文件夹 Content css my own css o
  • 上个月的最后一天 - BigQuery

    我正在尝试选择其中时间戳字段 recdate 的日期值高达并包含该月最后完成日期的行 例如 由于现在是 2016 年 7 月 我希望所有行的日期值在 2016 年 6 月 31 日 含 之前 这曾经在 T SQL 中工作得很好 我会使用以下
  • 无法连接到 mySQL 数据库

    所以我在使用 Java 连接 MySQL 时遇到问题 这是我的代码 import java sql Connection import java sql DriverManager import java sql SQLException
  • JQuery 延迟立即拒绝

    使用JQuery Deferred时可以直接调用reject 吗 没有调用异步函数 也许我想在异步函数的开头进行某种测试 如果测试失败我想立即拒绝 请参阅下面的第一个 if 块 function doSomethingAsync Test
  • 用于选择的 Angular 2 RouterLink

    我想使用页面上的选择元素创建导航 在锚标记上使用 RouterLink 指令很简单 但是选择下拉菜单是否有等效的指令 或者我是否需要在我的组件上创建自己的导航方法 以便在我的选择发生更改时调用 a Location a
  • 计时器刻度不增加时间间隔的值

    我想增加计时器滴答事件的值 但它没有增加 不知道我忘记了什么 它只显示1
  • 异步任务“堵塞”

    最近 我开始尝试大规模抓取网站以进行存档 我认为让多个 Web 请求异步工作以加快速度是一个好主意 10 000 000 个页面绝对需要存档 因此我冒险进入并行性的严厉女主人 三分钟后我开始想知道为什么我正在创建的任务 通过Task Fac
  • 在不使用 EF 的情况下在 appsettings.json 中获取多个连接字符串

    刚刚通过迁移我开发的当前 MVC Net 应用程序开始使用 Net Core RC2 在我看来 由于 appsettings json 处理配置的方式 如果我有多个连接字符串 我要么必须使用 EF 来检索连接字符串 要么必须创建为每个连接字
  • 为什么 Promise 的“then()”处理程序会立即执行?

    我想更彻底地了解 Promise 在 JavaScript 中的工作原理 我尝试了以下代码 function delay timeout return new Promise function resolve reject setTimeo
  • 如何在Flutter gridview中从右向左填充数据

    我试图从右到左填充网格视图数据 因为应用程序是阿拉伯语 并且一切都是 RTL Here is what I want 我正在使用 Stream 生成器来填充数据和以下 Gridview 小部件 Widget productGrid List
  • MySQL - 将两列拆分为两个不同的行

    如果这是一个愚蠢的问题 我不知道要创建这个抱歉 我有一个表 两个团队和总观察 稍后我将在不同的地方使用此信息 所以我的想法是将这两列连接在一列中 但两个不同的行 HomeTeam AwayTeam Totalwatch A B 100 A
  • 反序列化包含字典的对象列表

    我见过很多例子 似乎表明我所做的事情应该有效 但无论出于何种原因 它都不起作用 我正在尝试反序列化对象的集合 其中一个属性是字典 如下所示 class Program static void Main string args var jso
  • min - 子项设置为位置的高度:绝对

    我有一个容器 div 其中一个子 div 设置为相对于其父级的绝对位置 容器 div 有其最小高度设置 但是当子 div 的高度超出父级的高度时 父级不会拉伸 这是由于孩子的绝对定位所致 有什么想法可以让父母随着孩子身高的增加而伸展身体吗
  • 使用命令行工具将 JSON 数组拆分为多个文件

    假设我们有一个长度为 5 的 JSON 数组 我们想使用 Linux 命令行工具将该数组拆分为多个长度为 2 的数组 并将分组的项保存到不同的文件中 我尝试使用jq and split工具 我对任何可以从 bash 脚本执行的方法都很满意
  • 仅从 Twitter API 请求地理标记状态

    我如何要求 twitter API 只提供地理标记状态 我目前正在过滤 但更加 友好 会更有意义 似乎你应该能够用流 API 和位置过滤器 只需将边界框设置为覆盖整个地球即可 正如跟踪参数一样 查询受跟踪限制 如跟踪限制中所述 和访问角色
  • 如何使用 BigQuery 补丁?

    BigQuery API 文档中有一个名为 patch 的方法 我希望我可以使用它来更改现有表的架构 不幸的是 bq 不支持它 但根据他们的网站 你可以尝试一下https developers google com bigquery doc
  • 在活动之间从列表视图传递数据到另一个活动

    我正在尝试将数据从这个主要活动传递到另一个活动 我成功地在活动之间发送数据 就像从编辑文本到下一个活动的数据一样putExtra and GetExtra方法并作为意图传递 但我在这项特定任务中面临挑战 将数据从列表视图发送到普通活动 数据
  • 将函数应用于 pandas Python 中的每一行时出现数据转换错误

    我在 python 的 pandas 中有一个数据框 类似于这样的东西 contest login count contest participation count ipn ratio 0 1 1 0 000000 1 3 3 0 083
  • Linux 中的“find -exec”shell 函数

    有没有办法得到find执行我在 shell 中定义的函数 例如 dosomething echo Doing something with 1 find exec dosomething 其结果是 find dosomething No s
  • 在android中实现徒手裁剪

    我正在尝试使用画布在 Android 中实现徒手裁剪 我用drawPath并将其存储在列表中并将其绘制在画布路径绘图中 像这样 但现在我想用这段代码使该路径中的所有像素都位于侧面区域 但我不知道该怎么做 public Bitmap getB