Soru Android: görüntüleri nasıl çözebilirim?


Bu gibi görüntüleri çözmek istiyorum:

Example image

08-04-2013 tarihinde eklendi: Bu kodu kullandım ama düzgün çalışmıyor:

    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();

    private 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.ic_launcher);

        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(10, 10);
        mMatrix.invert(mInverse);
    }

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

        canvas.concat(mMatrix);
        canvas.drawBitmapMesh(mBitmap, WIDTH, HEIGHT, mVerts, 0,
                              null, 0, null);
    }

    private void warp(float cx, float cy) {
        final float K = 10000;
        float[] src = mOrig;
        float[] dst = mVerts;
        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 / (dd + 0.000001f);

            pull /= (d + 0.000001f);
         //   android.util.Log.d("skia", "index " + i + " dist=" + d + " pull=" + pull);

            if (pull >= 1) {
                dst[i+0] = cx;
                dst[i+1] = cy;
            } else {
                dst[i+0] = x + dx * pull;
                dst[i+1] = y + dy * pull;
            }
        }
    }

    private int mLastWarpX = -9999; // don't match a touch coordinate
    private int mLastWarpY;

    @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;
    }

18
2018-04-03 05:40


Menşei


code.google.com/p/javamorph bu kütüphaneyi dene. - Harshid
Bunu gördün mü? github.com/huntergdavis/Easy_Image_Morph Umarım bu size yardımcı olabilir. - Shadow
Araştırmanızı paylaşmak herkese yardımcı olur. Bize neyi denediğini ve neden ihtiyaçlarınızı karşılamadığını söyle. Bu, kendinize yardım etmeye çalışmak için zaman ayırdığınızı gösterir. Bu, açık cevapları yinelemekten kurtarır ve en önemlisi daha spesifik ve alakalı bir yanıt almanıza yardımcı olur! - NullPoiиteя
@NullPonyPointer benim araştırma kodu ekledim ama bana uygun çıktı vermez .. - Roadies
btw, bu çözgü ve morphing değil. - Daniel Mošmondor


Cevaplar:


Kendininkini kodlamaktan çok daha kolay bir yol var. Görmek TransitionDrawable

Katmanlar arasında çapraz olarak çözülecek bir LayerDrawables uzantısı   birinci ve ikinci katman. Geçişi başlatmak için   startTransition (int). Sadece ilk katmanı görüntülemek için   resetTransition ().
  Bu bir XML dosyasında tanımlanabilir   <geçiş> öğesi. Geçişteki her bir Çizelge, bir   iç içe <öğe>

Hat üzerinde birçok örnek bulabilirsiniz. İşte biridir:

<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/first_image" />
  <item android:drawable="@drawable/second_image" />
</transition>

ve kod

final ImageView image = (ImageView) findViewById(R.id.image);
final ToggleButton button = (ToggleButton) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(final View v) {
    TransitionDrawable drawable = (TransitionDrawable) image.getDrawable();
    if (button.isChecked()) {
      drawable.startTransition(500);
    } else {
      drawable.reverseTransition(500);
    }
  }
}); 

4
2018-05-09 09:15



Herhangi bir örnek veya kodunuz varsa, lütfen yapıştırın ... - Roadies
Teşekkürler ama bu cevap ihtiyacımı karşılamıyor. Resim nesnesini dokunarak görüntüyü değiştirmemeye çalışıyorum. - Roadies
@Roadies Siz de biraz iş yapmak için beklediğiniz, örneğin bir düğme için, ancak ben bağlandığım belgeleri okursanız, sınıfın genel olarak çekilebilirliklere yönelik olduğunu anlayacaksınız. kendi kodunuzu kendi çekmecelerinize yazmanız gerekir. - ilomambo
@Roadies İstediğiniz şey değiştiğinden beri, çarpışıyor, bu size yardımcı olmayacaktır. Sorunuzu ve başlığı da düzenlemeniz gerekir. - ilomambo


Bu OpenCV tarafından başarılabilir, bu yüzden bir deneyin bu


0
2017-12-18 12:09