Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 面扭曲技术使其变老_Android_Image Processing - Fatal编程技术网

Android 面扭曲技术使其变老

Android 面扭曲技术使其变老,android,image-processing,Android,Image Processing,我正在开发face应用程序,比如“Aging Booth”。我已经成功地检测到了脸上的皱纹。 现在我想像下面的例子一样扭曲面 有谁能帮助我解决这个问题,指导我应该使用哪种技术,或者任何源代码来扭曲这样的图像 我尝试使用以下代码来解决它。 但它并没有给出所需的结果。因此,任何人请编辑它,以获得所需的结果或任何其他技术 import android.app.Activity; import android.content.Context; import android.graphics.Bitm

我正在开发face应用程序,比如“Aging Booth”。我已经成功地检测到了脸上的皱纹。 现在我想像下面的例子一样扭曲面

有谁能帮助我解决这个问题,指导我应该使用哪种技术,或者任何源代码来扭曲这样的图像

我尝试使用以下代码来解决它。 但它并没有给出所需的结果。因此,任何人请编辑它,以获得所需的结果或任何其他技术

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class MainActivity extends Activity {

    ////////////////////////////////////////////////////////
   ImageView img;
    Bitmap face;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        LinearLayout ll01 = (LinearLayout) findViewById(R.id.linearLayout1);

        SampleView sv = new SampleView(this);
        ll01.addView(sv);
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    private static class SampleView extends View {
        static int WIDTH = 8; // sections
        static int HEIGHT = 8;
        static int COUNT = (WIDTH + 1) * (HEIGHT + 1); // total verts count

        Bitmap mBitmap; // declaring a bitmap
        float[] matrixVertsMoved = new float[COUNT * 2]; // declaring an array with double amount of vert count, one for x and one for y
        float[] matrixOriganal = new float[COUNT * 2];

        float clickX;
        float clickY;

        static void setXY(float[] array, int index, float x, float y) {
            array[index * 2 + 0] = x;
            array[index * 2 + 1] = y;
        }

        ///

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

            mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.w);


            // construct our mesh
            int index = 0;
            for (int y = 0; y <= HEIGHT; y++) {
                float fy = mBitmap.getHeight() * y / HEIGHT;

                for (int x = 0; x <= WIDTH; x++) {
                    float fx = mBitmap.getWidth() * x / WIDTH;
                    setXY(matrixVertsMoved, index, fx, fy);
                    setXY(matrixOriganal, index, fx, fy);
                    index += 1;
                }

            }

        }

////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        @Override
        protected void onDraw(Canvas canvas) {


            canvas.drawBitmapMesh(mBitmap, WIDTH, HEIGHT, matrixVertsMoved, 0, null, 0, null);

            Paint p1 = new Paint();
            p1.setColor(0x660000FF);

            Paint p2 = new Paint();
            p2.setColor(0x99FF0000);

            Paint p3 = new Paint();
            p3.setColor(0xFFFFFB00);

            for (int i = 0; i < COUNT * 2; i += 2) {
                float x = matrixOriganal[i + 0];
                float y = matrixOriganal[i + 1];
                canvas.drawCircle(x, y, 4, p1);

                float x1 = matrixOriganal[i + 0];
                float y1 = matrixOriganal[i + 1];
                float x2 = matrixVertsMoved[i + 0];
                float y2 = matrixVertsMoved[i + 1];
                canvas.drawLine(x1, y1, x2, y2, p1);
            }

            for (int i = 0; i < COUNT * 2; i += 2) {
                float x = matrixVertsMoved[i + 0];
                float y = matrixVertsMoved[i + 1];
                canvas.drawCircle(x, y, 4, p2);
            }

            canvas.drawCircle(clickX, clickY, 6, p3);


        }

////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        private void smudge() {


            for (int i = 0; i < COUNT * 2; i += 2) {

                float xOriginal = matrixOriganal[i + 0];
                float yOriginal = matrixOriganal[i + 1];

                float dist_click_to_origin_x = clickX - xOriginal; // distance from current vertex in the original matrix to the place clicked.
                float dist_click_to_origin_y = clickY - yOriginal;

                float kv_kat = dist_click_to_origin_x * dist_click_to_origin_x + dist_click_to_origin_y * dist_click_to_origin_y;

                float pull = (1000000 / kv_kat / (float) Math.sqrt(kv_kat));

                if (pull >= 1) {
                    matrixVertsMoved[i + 0] = clickX;
                    matrixVertsMoved[i + 1] = clickY;
                } else {
                    matrixVertsMoved[i + 0] = xOriginal + dist_click_to_origin_x * pull;
                    matrixVertsMoved[i + 1] = yOriginal + dist_click_to_origin_y * pull;
                }

            }


        }


////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        @Override
        public boolean onTouchEvent(MotionEvent event) {

            clickX = event.getX();
            clickY = event.getY();
            smudge(); // change the matrix.
            invalidate(); // calls a redraw on the canvas.

            return true;
        }

////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    }
}
导入android.app.Activity;
导入android.content.Context;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.graphics.Canvas;
导入android.graphics.Paint;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.view.MotionEvent;
导入android.view.view;
导入android.view.Window;
导入android.widget.ImageView;
导入android.widget.LinearLayout;
公共类MainActivity扩展了活动{
////////////////////////////////////////////////////////
图像视图img;
位图面;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE\u NO\u TITLE);
setContentView(R.layout.activity_main);
LinearLayout ll01=(LinearLayout)findViewById(R.id.linearLayout1);
SampleView sv=新的SampleView(本);
ll01.addView(sv);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
私有静态类SampleView扩展视图{
静态int-WIDTH=8;//节
静态整数高度=8;
静态整数计数=(宽度+1)*(高度+1);//总顶点计数
位图mBitmap;//声明位图
float[]matrixVertsMoved=new float[COUNT*2];//声明一个数组的vert COUNT值为两倍,一个用于x,一个用于y
float[]matrixOriganal=新的float[COUNT*2];
浮动clickX;
轻快地浮动;
静态void setXY(float[]数组,int索引,float x,float y){
数组[索引*2+0]=x;
数组[索引*2+1]=y;
}
///
公共样本视图(上下文){
超级(上下文);
设置聚焦(真);
mBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.w);
//构建我们的网格
int指数=0;
对于(int y=0;y):您应该查看这篇文章。Stackoverflow不会提供代码,但可以帮助您解决代码中遇到的错误。
public Bitmap ExtendBitmap(Bitmap normalImage){


    int w = normalImage.getWidth();
    int h =  normalImage.getHeight();
    int thirdWidht = w / 3;

//create a new blank image
    Bitmap stretchImage = Bitmap.createBitmap(w + thirdWidht, h, Bitmap.Config.ARGB_8888 );

    Canvas c = new Canvas(stretchImage);

//draw left bit
    c.drawBitmap(normalImage, new Rect(0,0,thirdWidht,h), new Rect(0,0,thirdWidht,h), null);

//draw stretched middle bit
    c.drawBitmap(normalImage, new Rect(thirdWidht,0,thirdWidht * 2, h), new Rect(thirdWidht,0,thirdWidht * 3,h), null);

//draw right bit
    c.drawBitmap(normalImage, new Rect(thirdWidht * 2,0,w,h), new Rect(thirdWidht * 3,0,w + thirdWidht,h), null);

    return stretchImage;
}