`
wang_peng1
  • 浏览: 3944246 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android画图---图像的扭曲

阅读更多
这个实例 是图像的扭曲,代码比较复杂,很多不是很懂,只把大体意思几下:
canvas.drawBitmapMesh(mBitmap, WIDTH, HEIGHT, mVerts, 0,
                                  null, 0, null);
主要通过mesh创建一个图像,这个mesh呢是可以扭曲的,这里面一定要注意vmVerts,这个数组是宽高都加以后乘机的两倍 然后在加上 偏移数值 ,上面的偏移是0.
  private static final int WIDTH = 20;
        private static final int HEIGHT = 20;
        private static final int COUNT = (WIDTH + 1) * (HEIGHT + 1);
       
        private final Bitmap mBitmap;
        private final float[] mVerts = new float[COUNT*2];
        private final float[] mOrig = new float[COUNT*2];
       
        private final Matrix mMatrix = new Matrix();
        private final Matrix mInverse = new Matrix();
这是最基本的初始化,注意数组的变化。

下面是把成对的坐标放在一个数组中,其中奇数项存x,偶数项存y。
  private static void setXY(float[] array, int index, float x, float y) {
            array[index*2 + 0] = x;
            array[index*2 + 1] = y;
        }

@Override protected void onDraw(Canvas canvas) {
            canvas.drawColor(0xFFCCCCCC);

             canvas.concat(mMatrix);
          //  canvas.concat(mInverse);
            canvas.drawBitmapMesh(mBitmap, WIDTH, HEIGHT, mVerts, 0,
                                  null, 0, null);
       
        }
其中canvas.concat(mMatrix);不是很懂貌似是用参数来取代默认的Matrix,就是说要对哪个进行绘画。


public SampleView(Context context) {
            super(context);
            setFocusable(true);

            mBitmap = BitmapFactory.decodeResource(getResources(),
                                                     R.drawable.beach);
           
            float w = mBitmap.getWidth();
            float h = mBitmap.getHeight();
            // construct our mesh
            int index = 0;
            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(mVerts, index, fx, fy);
                   setXY(mOrig, index, fx, fy);
                    index += 1;
                }
            }
           
            mMatrix.setTranslate(100, 10);
            mMatrix.invert(mInverse);
           // mInverse.setTranslate(100, 100);
         
        }
        上面就是一个view的构造函数, mMatrix.setTranslate(100, 10);
用来设置mMatrix在屏幕上的位置。for循环是把图像上的每个点都存储在数组中。
最后动过一个事件来改变数组中值产生图像的变化。
@Override public boolean onTouchEvent(MotionEvent event) {
            float[] pt = { event.getX(), event.getY() };
           mInverse.mapPoints(pt);
           
            int x = (int)pt[0];
            int y = (int)pt[1];
            if (mLastWarpX != x || mLastWarpY != y) {
                mLastWarpX = x;
                mLastWarpY = y;
                warp(pt[0], pt[1]);
                invalidate();
            }
            return true;
       
分享到:
评论

相关推荐

    Android代码-画图工具源码.zip

    《Android画图工具源码详解》 在移动设备领域,Android操作系统以其开源、灵活的特点深受开发者喜爱。在Android平台上开发一款画图工具,不仅可以满足用户日常的手绘需求,还可以为艺术家提供创作空间。本篇文章将...

    任意画图--电子教鞭

    比较好用的电子教鞭,可以不锁定屏幕情况下画图。

    Android代码-画图程序源码.zip

    在Android平台上,开发一款画图程序可以为用户提供一个创意表达的平台,让他们通过手指或触控笔绘制出自己的作品。这个"Android代码-画图程序源码.zip"压缩包包含了实现这样一个功能的源代码,我们可以从中学到许多...

    如何使用pandas解析数据并存储,再利用matplotlib画图------data1.csv

    如何使用pandas解析数据并存储,再利用matplotlib画图------data1.csv

    海龟画图-凯蒂猫-python代码

    海龟画图-凯蒂猫-python代码

    Android学习-画图着色

    Android提供了Bitmap类来处理位图图像,我们可以将当前画布转换为Bitmap,然后使用MediaStore或Intent来保存到设备上。反之,也可以从设备中读取图片,将其加载到画布上供用户着色。 5. **权限管理**:由于涉及到...

    海龟画图-机器猫-python代码

    海龟画图-机器猫-python代码

    Android 画图程序源码-IT计算机-毕业设计.zip

    在Android平台上,开发一款画图程序是一个常见的毕业设计项目,旨在让学习者深入理解Android应用开发的基本原理和实践技能。这个源码示例提供了一个完整的Android画图应用程序,可以帮助学生和开发者了解如何在...

    python mat 画图-樱花树

    python mat 画图-樱花树

    Android 画图程序源码.rar

    Android 画图程序源码分析 在Android平台上开发一款画图程序,涉及到许多核心技术和组件。这个"Android 画图程序源码.rar"文件提供了一个实际的案例,可以帮助我们深入理解Android图形系统的工作原理,以及如何创建...

    地震数据剖面画图-Matlab程序

    地震数据剖面画图-Matlab程序

    【国家自然科学基金】-画图-基金支持热词逐年推荐-【万方软件创新助手】-20140801.pdf

    【国家自然科学基金】-画图-基金支持热词逐年推荐-【万方软件创新助手】-20140801.pdf

    Unity 画图-画板-画笔.zip

    在这个“Unity 画图-画板-画笔”项目中,我们可以看到开发者正在构建一个在Unity环境中实现的绘画应用。这个应用可能允许用户在3D空间内绘制,或者创建一个2D画布作为游戏的一部分,为用户提供创意性的互动体验。 ...

    android 画图软件源码 markers-for-android

    "markers-for-android"是一款专为Android平台设计的画图软件的源代码库,它提供了丰富的绘图功能,包括压感支持和多指触控画图。这个项目对于想要深入理解Android图形绘制、触摸事件处理以及自定义View的开发者来说...

    JavaScript应用实例-n阶贝塞尔曲线画图-2.js

    JavaScript应用实例-n阶贝塞尔曲线画图-2.js

    dino用opengl描点画图-恐龙

    本主题“dino用OpenGL描点画图-恐龙”聚焦于如何使用OpenGL来绘制恐龙的形象,这是一个常见的学习实践项目,旨在帮助初学者理解和掌握基本的图形绘制技巧。 在OpenGL中,描点和画线是最基础的绘图操作。描点...

    第21章__用JS来画图-VML.ppt

    第21章__用JS来画图-VML.ppt 很有用处!

    Android画图示例集合

    这个"Android画图示例集合"项目,通过实际代码示例,将帮助开发者熟悉以上知识点,并能熟练地在Android应用中进行自定义图形绘制。在实践中不断探索和学习,你将能够创建出更多创新和吸引人的用户界面。

    LOGO海龟画图-易语言

    《LOGO海龟画图-易语言》是一个基于易语言编程环境的图形绘制程序,它利用了LOGO语言的核心概念,让初学者和爱好者能够通过简单的指令实现复杂的图形创作。LOGO海龟画图工具使用易语言编写,提供了一个直观且用户...

    Android新手入门2016(16)--画图

    在Android开发领域,画图是实现用户界面个性化和复杂功能的重要手段。本教程将带你走进Android画图的世界,让你从新手快速成长为能绘制出丰富多彩图形的开发者。在2016年的这个系列教程中,我们将重点探讨如何在...

Global site tag (gtag.js) - Google Analytics