/*
* Copyright (C) 2013 Peng fei Pan <sky@xiaopan.me>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package me.xiaopan.sketch.process;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import me.xiaopan.sketch.Sketch;
import me.xiaopan.sketch.cache.BitmapPool;
import me.xiaopan.sketch.feature.ResizeCalculator;
import me.xiaopan.sketch.request.Resize;
public class ResizeImageProcessor implements ImageProcessor {
private String logName = "ResizeImageProcessor";
@Override
public String getKey() {
return logName;
}
@Override
public Bitmap process(Sketch sketch, Bitmap bitmap, Resize resize, boolean forceUseResize, boolean lowQualityImage) {
if (bitmap == null || bitmap.isRecycled()) {
return bitmap;
}
if (resize == null || resize.getWidth() == 0 || resize.getHeight() == 0 ||
(bitmap.getWidth() == resize.getWidth() && bitmap.getHeight() == resize.getHeight())) {
return bitmap;
}
ResizeCalculator resizeCalculator = sketch.getConfiguration().getResizeCalculator();
ResizeCalculator.Result result = resizeCalculator.calculator(bitmap.getWidth(), bitmap.getHeight(),
resize.getWidth(), resize.getHeight(), resize.getScaleType(), forceUseResize);
if (result == null) {
return bitmap;
}
Bitmap.Config config = bitmap.getConfig();
if (config == null) {
config = lowQualityImage ? Bitmap.Config.ARGB_4444 : Bitmap.Config.ARGB_8888;
}
BitmapPool bitmapPool = sketch.getConfiguration().getBitmapPool();
Bitmap resizeBitmap = bitmapPool.getOrMake(result.imageWidth, result.imageHeight, config);
Canvas canvas = new Canvas(resizeBitmap);
canvas.drawBitmap(bitmap, result.srcRect, result.destRect, null);
return resizeBitmap;
}
}