use of com.android.gallery3d.filtershow.tools.DualCameraEffect 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;
}
Aggregations