Snapchat と同じようにフィルターを適用するアプリケーションを開発しています。PagerAdapter を使用していることは理解できますが、画像やビデオにフィルターを適用する方法がわかりません。別の画像ではありません。それに適用されたフィルター。同じことができるアイデアやコードスニペットは、画像とビデオの両方で高く評価され、それらを保存することもできます. ありがとう
4291 次
2 に答える
5
ここで行っているのは、2 つのビットマップを重ね合わせることです。いずれかのビットマップをどれだけ表示するかは、ユーザーのタッチを使用して決定されます。ユーザーが基本的に左または右となしの方向にスクロールしている列挙型があります。ユーザーがスクロールする方向に応じて、異なるビットマップが現在のビットマップに適用されます。
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if (mCurrentScrollDirection.ordinal() == ScrollDirection.NONE.ordinal()) {
if (distanceX > 0) {
mCurrentScrollDirection = ScrollDirection.LEFT;
} else {
mCurrentScrollDirection = ScrollDirection.RIGHT;
}
}
mTouchX = (int) e2.getX();
overlayBitmaps(mTouchX);
return false;
}
private void overlayBitmaps(int coordinateX) {
switch (mCurrentScrollDirection) {
case NONE: {
//do nothing here
break;
}
case LEFT: {
overlayNextBitmap(coordinateX);
break;
}
case RIGHT: {
overlayPreviousBitmap(coordinateX);
break;
}
}
}
private void overlayPreviousBitmap(int coordinateX) {
mImageCanvas.save();
Bitmap OSBitmap = Bitmap.createBitmap(mCurrentBitmap, coordinateX, 0, mCurrentBitmap.getWidth() - coordinateX, mCurrentBitmap.getHeight());
mImageCanvas.drawBitmap(OSBitmap, coordinateX, 0, null);
Bitmap FSBitmap = Bitmap.createBitmap(mPreviousBitmap, 0, 0, coordinateX, mCurrentBitmap.getHeight());
mImageCanvas.drawBitmap(FSBitmap, 0, 0, null);
mImageCanvas.restore();
mCapturedImageView.setImageDrawable(new BitmapDrawable(getResources(), mResultBitmap));
}
private void overlayNextBitmap(int coordinateX) {
mImageCanvas.save();
Bitmap OSBitmap = Bitmap.createBitmap(mCurrentBitmap, 0, 0, coordinateX, mCurrentBitmap.getHeight());
mImageCanvas.drawBitmap(OSBitmap, 0, 0, null);
Bitmap FSBitmap = Bitmap.createBitmap(mNextBitmap, coordinateX, 0, mCurrentBitmap.getWidth() - coordinateX, mCurrentBitmap.getHeight());
mImageCanvas.drawBitmap(FSBitmap, coordinateX, 0, null);
mImageCanvas.restore();
mCapturedImageView.setImageDrawable(new BitmapDrawable(getResources(), mResultBitmap));
}
これは非常にうまく機能します。多くを見つけることができなかったことを考慮して、メモリの少ないデバイスでテストしていません:)
完全なコード リファレンスについては、このリンクをチェックしてください。画像をキャプチャしてフィルターを適用し、呼び出し元のアクティビティへのコールバックを取得できるのは、私自身のライブラリです。それはまだ進行中の作業です。
于 2016-07-19T10:30:54.407 に答える