private Bitmap createScreenshot(int width, int height) {
// We render to a bitmap 2x the desired size so that we can then
// re-scale it with filtering since canvas.scale doesn't filter
// This helps reduce aliasing at the cost of being slightly blurry
final int filter_scale = 2;
Picture thumbnail = capturePicture();
if (thumbnail == null) {
return null;
}
//width = getWidth();
//height = getHeight();
width *= filter_scale;
height *= filter_scale;
Bitmap bm = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bm);
// May need to tweak these values to determine what is the
// best scale factor
int thumbnailWidth = thumbnail.getWidth();
int thumbnailHeight = thumbnail.getHeight();
float scaleFactor = 1.0f;
if (thumbnailWidth > 0 && thumbnailHeight > 0) {
scaleFactor = (float) width / (float)thumbnailWidth;
} else {
return null;
}
float scaleFactorY = (float) height / (float)thumbnailHeight;
if (scaleFactorY > scaleFactor) {
// The picture is narrower than the requested AR
// Center the thumnail and crop the sides
scaleFactor = scaleFactorY;
float wx = (thumbnailWidth * scaleFactor) - width;
canvas.translate((int) -(wx / 2), 0);
}
canvas.scale(scaleFactor, scaleFactor);
thumbnail.draw(canvas);
Bitmap ret = Bitmap.createScaledBitmap(bm, width / filter_scale,
height / filter_scale, true);
bm.recycle();
return ret;
}
public void saveBitmap(Bitmap bm, String filename){
//String filename = "/mnt/sdcard/a.png";
if (null == bm || bm.getWidth() == 0 || bm.getHeight() == 0){
return;
}
File temp = new File(filename);
FileOutputStream fout = null;
try{
temp.createNewFile();
fout = new FileOutputStream(temp);
}catch (IOException e){
e.printStackTrace();
}
bm.compress(Bitmap.CompressFormat.PNG, 100, fout);
try {
fout.flush();
} catch (IOException e) {
e.printStackTrace();
}
try {
fout.close();
} catch (IOException e) {
e.printStackTrace();
}
if (!bm.isRecycled()){
bm.recycle();
}
}
Bitmap getViewBitmap(View v){
Bitmap drawingCache = Bitmap.createBitmap(v.getWidth(),
v.getHeight(), Bitmap.Config.RGB_565);
Canvas cvs = new Canvas();
cvs.setBitmap(drawingCache);
v.draw(cvs);
return drawingCache;
}