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