iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么在Android中实现绘制扭曲图像
  • 690
分享到

怎么在Android中实现绘制扭曲图像

android 2023-05-30 21:05:36 690人浏览 薄情痞子
摘要

怎么在Android中实现绘制扭曲图像?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。定义基本变量:MyView是用于显示扭曲的图像的自定义view,angle是圆形轨迹的当前角

怎么在Android中实现绘制扭曲图像?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

定义基本变量:MyView是用于显示扭曲的图像的自定义view,angle是圆形轨迹的当前角度:

private static Bitmap bitmap;private MyView myView;private int angle = 0;         // 圆形轨迹当前的角度private Handler handler = new Handler(){   public void handleMessage(Message msg)   {     switch (msg.what)     {       case 1:         Random random = new Random();         // 计算图形中心点坐标         int centerX = bitmap.getWidth() / 2;         int centerY = bitmap.getHeight() / 2;         double radian = Math.toRadians((double) angle);         // 通过圆心坐标、半径和当前角度计算当前圆周的某点横坐标         int currentX = (int) (centerX + 100 * Math.cos(radian));         // 通过圆心坐标、半径和当前角度计算当前圆周的某点纵坐标         int currentY = (int) (centerY + 100 * Math.sin(radian));         // 重绘View,并在圆周的某一点扭曲图像         myView.mess(currentX, currentY);         angle += 2;         if (angle > 360)           angle = 0;         break;     }     super.handleMessage(msg);   }};private TimerTask timerTask = new TimerTask(){   public void run()   {     Message message = new Message();     message.what = 1;     handler.sendMessage(message);   }

以下是自定义view,MyView的具体内容:

private static class MyView extends View{    private static final int WIDTH = 20;    private static final int HEIGHT = 20;    private static final int COUNT = (WIDTH + 1) * (HEIGHT + 1);    private final float[] verts = new float[COUNT * 2];    private final float[] orig = new float[COUNT * 2];    private final Matrix matrix = new Matrix();    private final Matrix m = new Matrix();    // 设置verts数组的值    private static void setXY(float[] array, int index, float x, float y)    {      array[index * 2 + 0] = x;      array[index * 2 + 1] = y;    }    public MyView(Context context)    {      super(context);      setFocusable(true);      bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);      float w = bitmap.getWidth();      float h = bitmap.getHeight();      int index = 0;      // 生成verts和orig数组的初始值,这两个数组的值是一样的,只是在扭曲的过程中需要修改verts      // 的值,而修改verts的值要将原始的值保留在orig数组中      for (int y = 0; y <= HEIGHT; y++)      {        float fy = h * y / HEIGHT;        for (int x = 0; x <= WIDTH; x++)        {          float fx = w * x / WIDTH;          setXY(verts, index, fx, fy);          setXY(orig, index, fx, fy);          index += 1;        }      }      matrix.setTranslate(10, 10);      setBackgroundColor(Color.WHITE);    }    @Override    protected void onDraw(canvas canvas)    {      canvas.concat(matrix);      canvas.drawBitmapMesh(bitmap, WIDTH, HEIGHT, verts, 0, null, 0,null);    }    // 用于扭曲图像的方法,在该方法中根据当前扭曲的点(扭曲区域的中心点),也就是cx和cy参数,    // 来不断变化verts数组中的坐标值    private void warp(float cx, float cy)    {      final float K = 100000;  // 该值越大,扭曲得越严重(扭曲的范围越大)      float[] src = orig;      float[] dst = verts;      // 按一定的数学规则生成verts数组中的元素值      for (int i = 0; i < COUNT * 2; i += 2)      {        float x = src[i + 0];        float y = src[i + 1];        float dx = cx - x;        float dy = cy - y;        float dd = dx * dx + dy * dy;        float d = FloatMath.sqrt(dd);        float pull = K / ((float) (dd *d));        if (pull >= 1)        {          dst[i + 0] = cx;          dst[i + 1] = cy;        }        else        {          dst[i + 0] = x + dx * pull;          dst[i + 1] = y + dy * pull;        }      }    }    // 用于MyView外部控制图像扭曲的方法。该方法在handleMessage方法中被调用    public void mess(int x, int y)    {      float[] pt ={ x, y };      m.mapPoints(pt);      // 重新生成verts数组的值      warp(pt[0], pt[1]);      invalidate();    }  }}

以下是Activity的onCreate方法:

protected void onCreate(Bundle savedInstanceState){    super.onCreate(savedInstanceState);    myView = new MyView(this);    setContentView(myView);    Timer timer = new Timer();    // 开始定时器    timer.schedule(timerTask, 0, 100);}

下面来看看扭曲后的效果,不同时刻,图片呈现出不同的扭曲效果:

怎么在Android中实现绘制扭曲图像

看完上述内容,你们掌握怎么在Android中实现绘制扭曲图像的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: 怎么在Android中实现绘制扭曲图像

本文链接: https://www.lsjlt.com/news/221275.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在Android中实现绘制扭曲图像
    怎么在Android中实现绘制扭曲图像?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。定义基本变量:MyView是用于显示扭曲的图像的自定义view,angle是圆形轨迹的当前角...
    99+
    2023-05-30
    android
  • Android使用API实现图像扭曲效果示例
    本文实例讲述了Android使用API实现图像扭曲效果。分享给大家供大家参考,具体如下:public class BitmapMesh extends GraphicsActivity { @Override protected void ...
    99+
    2023-05-30
    android api 图像
  • Android怎么实现动态曲线绘制
    这篇文章主要介绍了Android怎么实现动态曲线绘制的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android怎么实现动态曲线绘制文章都会有所收获,下面我们一起来看看吧。我们在安卓开发中,有时会用到统计图表的...
    99+
    2023-07-02
  • Android实现动态曲线绘制
    我们在安卓开发中,有时会用到统计图表的功能,而曲线绘制是其中比较典型的一种,一般是利用给定的坐标点集和安卓自带的绘图模块进行绘制,直接得到的是一张完整的静态的曲线图。但有时,我们需要...
    99+
    2024-04-02
  • 怎么在Android中实现绘制各种图形
    怎么在Android中实现绘制各种图形?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先自定义一个View类,这个view类里面需要一个Paint对象来控制图形的属性,需要...
    99+
    2023-05-30
    android
  • PyQt5+QtChart实现绘制曲线图
    目录QSplineSeries实现代码效果图QSplineSeries QSplineSeries类将数据序列显示为曲线图。核心代码: spline = QSplineSeries(...
    99+
    2022-12-15
    PyQt5 QtChart绘制曲线图 PyQt5 QtChart曲线图 PyQt5 QtChart
  • C#怎么绘制实时曲线图
    这篇文章将为大家详细讲解有关C#怎么绘制实时曲线图,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:        /...
    99+
    2023-06-29
  • OpenCV 图像绘制的实现
    目录+直线绘制圆形绘制矩形绘制椭圆型绘制自定义形状绘制文本+直线绘制 参数解析:(图像矩阵,直线起始坐标, 直线终止坐标、颜色、线条厚度) import cv2 import n...
    99+
    2024-04-02
  • 利用Python实现绘制论文中的曲线图
    目录1.折线图 plt.plot()2.实际案例3.颜色补充1.折线图 plt.plot() 常用的一些参数: 颜色(color): ‘c’ 青红(cyan)...
    99+
    2023-03-24
    Python绘制论文曲线图 Python绘制曲线图 Python 曲线图
  • Python+OpenCV实现在图像上绘制矩形
    话不多说,直接上代码 import copy import cv2 import numpy as np WIN_NAME = 'draw_rect' class Rec...
    99+
    2024-04-02
  • 怎么在pytorch中绘制一个曲线
    本篇文章为大家展示了怎么在pytorch中绘制一个曲线,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。具体内容如下import torchimport torch.nn.funct...
    99+
    2023-06-07
  • 怎么用Python绘制论文中的曲线图
    本篇内容主要讲解“怎么用Python绘制论文中的曲线图”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python绘制论文中的曲线图”吧!1.折线图 plt.plot()常用的一些参数:颜色...
    99+
    2023-07-05
  • C#怎么绘制实时曲线
    这篇文章主要讲解了“C#怎么绘制实时曲线”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#怎么绘制实时曲线”吧!要做一个调试工具,采集传感器数据并显示。绘制曲线注意坐标反转,线条的张力即可。...
    99+
    2023-06-29
  • WPF+WriteableBitmap实现高性能曲线图的绘制
    目录一、前言二、正文三、运行效果一、前言 之前分享过一期关于DrawingVisual来绘制高性能曲线的博客,今天再分享一篇通过另一种方式来绘制高性能曲线的方法,也就是通过Write...
    99+
    2022-11-13
    WPF WriteableBitmap绘制曲线图 WPF WriteableBitmap 曲线图 WPF WriteableBitmap
  • MATLAB怎么用数据绘制曲线图
    要使用MATLAB绘制曲线图,可以按照以下步骤进行:1. 准备数据:首先,准备好要绘制的数据。可以是向量、矩阵或表格数据。2. 创建...
    99+
    2023-10-08
    matlab
  • Android怎么用Canvas绘制贝塞尔曲线
    这篇文章主要介绍了Android怎么用Canvas绘制贝塞尔曲线的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android怎么用Canvas绘制贝塞尔曲线文章都会有所收获,下面我们一起来看看吧。用Canvas...
    99+
    2023-07-02
  • Python+OpenCV如何实现在图像上绘制矩形
    小编给大家分享一下Python+OpenCV如何实现在图像上绘制矩形,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!代码import copyimport cv2import numpy&nbs...
    99+
    2023-06-29
  • MATLAB-在一个图中绘制多个曲面拟合
    要在一个图中绘制多个曲面拟合,你可以使用MATLAB中的`surf`函数。下面是一个示例代码,演示如何绘制多个曲面拟合:```mat...
    99+
    2023-09-26
    MATLAB
  • Python中ROC曲线怎么绘制
    本篇内容介绍了“Python中ROC曲线怎么绘制”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先以支持向量机模型为例先导入需要使用的包,我...
    99+
    2023-06-22
  • Python利用Pytorch实现绘制ROC与PR曲线图
    目录ROC曲线PR曲线Pytorch 多分类模型绘制 ROC, PR 曲线(代码 亲测 可用) ROC曲线 示例代码 import torch import torch.nn as ...
    99+
    2022-12-30
    Python Pytorch绘制ROC PR曲线图 Python ROC曲线图 Python PR曲线图
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作