android - 图像和视频过滤器,如 android 中的 snapchat

标签 android image imagefilter snapchat

我正在开发一个应用程序,我希望像 snapchat 那样应用滤镜,据我所知,他们正在使用 PagerAdapter,但我不知道他们是如何在图像或视频上应用滤镜的,但事实并非如此另一个应用了滤镜的图像。对于图像和视频以及保存它们,任何可以做同样事情的想法或代码 fragment 都会受到高度赞赏。谢谢:D this is what I am trying to achieve[![][1][1]

最佳答案

我在这里所做的是将两个位图相互叠加。使用用户的触摸来确定应显示多少位图。我有一个枚举,用户基本上向左或向右滚动,没有。根据用户滚动的方向,在当前位图上应用不同的位图。

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

这工作得很好,我只是没有在低内存设备上测试,因为我找不到很多:)

完整代码引用检查this链接出来。这是我自己的库,您可以在其中捕获图像应用过滤器并获得对调用 Activity 的回调。它仍在进行中。

关于android - 图像和视频过滤器,如 android 中的 snapchat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31981207/

相关文章:

android - 按下返回键后Android Activity的生命周期

python - 如何使用 Python PIL 模糊图像的非矩形或圆形区域?

python - 将图像转换为不同类的 PIL

android - 不同Android SDK版本的不同主题

java - 如果有子键,如何直接从根获取子节点的值

android - 将多个 XML 文件合并为一个文件效率更高吗?

c++ - 如何在 YUV 到 RGB 转换期间垂直翻转缓冲区

javascript - 如何显示特定宽度和高度的图像的一部分?

python - 使用HoughLine变换检测角度并旋转图像

image-processing - 图像处理 - 如何应用盒式滤波器平滑