Search in sources :

Example 1 with GeometryHolder

use of com.android.gallery3d.filtershow.imageshow.GeometryMathUtils.GeometryHolder in project android_packages_apps_Gallery2 by LineageOS.

the class ImageFilterDualCamera method apply.

@Override
public Bitmap apply(Bitmap bitmap, float scaleFactor, int quality) {
    if (mParameters == null) {
        return bitmap;
    }
    Point point = new Point(mParameters.getPoint());
    if (!point.equals(-1, -1)) {
        MasterImage image = MasterImage.getImage();
        Size size = getFilteredSize(image, quality);
        DualCameraEffect effect = image.getDualCameraEffect(size.getWidth(), size.getHeight());
        if (effect == null) {
            return bitmap;
        }
        size = effect.size();
        Bitmap filteredBitmap = image.getBitmapCache().getBitmap(size.getWidth(), size.getHeight(), BitmapCache.FILTERS);
        Log.d(TAG, "filtered: " + size.getWidth() + "x" + size.getHeight());
        filteredBitmap.setHasAlpha(mSupportFusion);
        float intensity = getIntensity();
        effect.map(point);
        int effectType = getEffectType();
        boolean result = effect.render(effectType, point.x, point.y, filteredBitmap, intensity);
        if (!result) {
            showToast(R.string.dualcam_no_segment_toast, Toast.LENGTH_SHORT);
            return bitmap;
        }
        mPaint.reset();
        mPaint.setAntiAlias(true);
        if (quality == FilterEnvironment.QUALITY_FINAL) {
            mPaint.setFilterBitmap(true);
            mPaint.setDither(true);
        }
        Canvas canvas = new Canvas(bitmap);
        ImagePreset preset = getEnvironment().getImagePreset();
        int bmWidth = bitmap.getWidth();
        int bmHeight = bitmap.getHeight();
        GeometryHolder holder;
        if (preset.getDoApplyGeometry()) {
            holder = GeometryMathUtils.unpackGeometry(preset.getGeometryFilters());
        } else {
            holder = new GeometryHolder();
        }
        RectF roiRectF = new RectF();
        roiRectF.left = 0;
        roiRectF.top = 0;
        roiRectF.right = 1;
        roiRectF.bottom = 1;
        int zoomOrientation = image.getZoomOrientation();
        if (isRotated(zoomOrientation)) {
            Matrix mt = new Matrix();
            mt.preRotate(GeometryMathUtils.getRotationForOrientation(zoomOrientation), 0.5f, 0.5f);
            mt.mapRect(roiRectF);
        }
        // Check for ROI cropping
        if (!FilterCropRepresentation.getNil().equals(roiRectF)) {
            if (FilterCropRepresentation.getNil().equals(holder.crop)) {
                // no crop filter, set crop to be roiRect
                holder.crop.set(roiRectF);
            } else if (!roiRectF.contains(holder.crop)) {
                // take smaller intersecting area between roiRect and crop rect
                holder.crop.left = Math.max(holder.crop.left, roiRectF.left);
                holder.crop.top = Math.max(holder.crop.top, roiRectF.top);
                holder.crop.right = Math.min(holder.crop.right, roiRectF.right);
                holder.crop.bottom = Math.min(holder.crop.bottom, roiRectF.bottom);
            }
        }
        RectF crop = new RectF();
        Matrix m = GeometryMathUtils.getOriginalToScreen(holder, crop, true, size.getWidth(), size.getHeight(), bmWidth, bmHeight);
        if (mSupportFusion)
            canvas.drawColor(0, PorterDuff.Mode.CLEAR);
        canvas.save();
        canvas.clipRect(crop);
        canvas.drawBitmap(filteredBitmap, m, mPaint);
        canvas.restore();
        image.getBitmapCache().cache(filteredBitmap);
    }
    return bitmap;
}
Also used : MasterImage(com.android.gallery3d.filtershow.imageshow.MasterImage) GeometryHolder(com.android.gallery3d.filtershow.imageshow.GeometryMathUtils.GeometryHolder) Size(android.util.Size) Canvas(android.graphics.Canvas) ImagePreset(com.android.gallery3d.filtershow.pipeline.ImagePreset) Point(android.graphics.Point) Point(android.graphics.Point) Paint(android.graphics.Paint) RectF(android.graphics.RectF) Bitmap(android.graphics.Bitmap) Matrix(android.graphics.Matrix) DualCameraEffect(com.android.gallery3d.filtershow.tools.DualCameraEffect)

Example 2 with GeometryHolder

use of com.android.gallery3d.filtershow.imageshow.GeometryMathUtils.GeometryHolder in project android_packages_apps_Gallery2 by LineageOS.

the class ImageFilterTruePortrait method apply.

@Override
public Bitmap apply(Bitmap bitmap, float scaleFactor, int quality) {
    if (getParameters() == null || quality == FilterEnvironment.QUALITY_ICON) {
        return bitmap;
    }
    Bitmap filteredBitmap = null;
    boolean result = false;
    int orientation = MasterImage.getImage().getOrientation();
    Rect originalBounds = MasterImage.getImage().getOriginalBounds();
    int filteredW;
    int filteredH;
    if (quality == FilterEnvironment.QUALITY_FINAL) {
        filteredW = originalBounds.width();
        filteredH = originalBounds.height();
    } else {
        Bitmap originalBmp = MasterImage.getImage().getOriginalBitmapHighres();
        filteredW = originalBmp.getWidth();
        filteredH = originalBmp.getHeight();
        // image is rotated
        if (orientation == ImageLoader.ORI_ROTATE_90 || orientation == ImageLoader.ORI_ROTATE_270 || orientation == ImageLoader.ORI_TRANSPOSE || orientation == ImageLoader.ORI_TRANSVERSE) {
            int tmp = filteredW;
            filteredW = filteredH;
            filteredH = tmp;
        }
        // non even width or height
        if (filteredW % 2 != 0 || filteredH % 2 != 0) {
            float aspect = (float) filteredH / (float) filteredW;
            if (filteredW >= filteredH) {
                filteredW = MasterImage.MAX_BITMAP_DIM;
                filteredH = (int) (filteredW * aspect);
            } else {
                filteredH = MasterImage.MAX_BITMAP_DIM;
                filteredW = (int) (filteredH / aspect);
            }
        }
    }
    filteredBitmap = MasterImage.getImage().getBitmapCache().getBitmap(filteredW, filteredH, BitmapCache.FILTERS);
    result = applyEffect(filteredBitmap);
    if (result == false) {
        Log.e(TAG, "Imagelib API failed");
        showToast(GalleryAppImpl.getContext().getString(R.string.no_faces_found), Toast.LENGTH_SHORT);
        return bitmap;
    } else {
        mPaint.reset();
        mPaint.setAntiAlias(true);
        if (quality == FilterEnvironment.QUALITY_FINAL) {
            mPaint.setFilterBitmap(true);
            mPaint.setDither(true);
        }
        if (needsClear()) {
            bitmap.setHasAlpha(true);
            bitmap.eraseColor(Color.TRANSPARENT);
        }
        Canvas canvas = new Canvas(bitmap);
        ImagePreset preset = getEnvironment().getImagePreset();
        int bmWidth = bitmap.getWidth();
        int bmHeight = bitmap.getHeight();
        GeometryHolder holder;
        if (preset.getDoApplyGeometry()) {
            holder = GeometryMathUtils.unpackGeometry(preset.getGeometryFilters());
        } else {
            holder = new GeometryHolder();
        }
        RectF crop = new RectF();
        Matrix m = GeometryMathUtils.getOriginalToScreen(holder, crop, true, filteredW, filteredH, bmWidth, bmHeight);
        canvas.save();
        canvas.clipRect(crop);
        canvas.drawBitmap(filteredBitmap, m, mPaint);
        canvas.restore();
        MasterImage.getImage().getBitmapCache().cache(filteredBitmap);
    }
    return bitmap;
}
Also used : RectF(android.graphics.RectF) Bitmap(android.graphics.Bitmap) Rect(android.graphics.Rect) Matrix(android.graphics.Matrix) GeometryHolder(com.android.gallery3d.filtershow.imageshow.GeometryMathUtils.GeometryHolder) Canvas(android.graphics.Canvas) ImagePreset(com.android.gallery3d.filtershow.pipeline.ImagePreset) Paint(android.graphics.Paint)

Aggregations

Bitmap (android.graphics.Bitmap)2 Canvas (android.graphics.Canvas)2 Matrix (android.graphics.Matrix)2 Paint (android.graphics.Paint)2 RectF (android.graphics.RectF)2 GeometryHolder (com.android.gallery3d.filtershow.imageshow.GeometryMathUtils.GeometryHolder)2 ImagePreset (com.android.gallery3d.filtershow.pipeline.ImagePreset)2 Point (android.graphics.Point)1 Rect (android.graphics.Rect)1 Size (android.util.Size)1 MasterImage (com.android.gallery3d.filtershow.imageshow.MasterImage)1 DualCameraEffect (com.android.gallery3d.filtershow.tools.DualCameraEffect)1