转载自:http://blog.csdn.net/xidiancoder/article/details/51649465
在surfaceview中结合Camera获取到摄像头图像,这段代码是我程序中的一部分
@Override
public void onPreviewFrame(
final byte[] data, Camera camera) {
camera.setPreviewCallback(
null);
if (mCamera ==
null)
return;
Camera.Parameters parameters = camera.getParameters();
int width = parameters.getPreviewSize().width;
int height = parameters.getPreviewSize().height;
YuvImage yuv =
new YuvImage(data, parameters.getPreviewFormat(), width, height,
null);
ByteArrayOutputStream
out =
new ByteArrayOutputStream();
yuv.compressToJpeg(
new Rect(
0,
0, width, height),
50,
out);
byte[] bytes =
out.toByteArray();
final Bitmap bitmap = BitmapFactory.decodeByteArray(bytes,
0, bytes.length);
this.mCamera.setPreviewCallback(
this);
}
123456789101112131415161718192021
123456789101112131415161718192021
现在对三者具体如何互相转换做一说明:
准备:概念说明
1、Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable),我们根据画图的需求,创建相应的可画对象 2、Canvas画布,绘图的目的区域,用于绘图 3、Bitmap位图,用于图的处理 4、Matrix矩阵 ,图像矩阵
1.从resources中获取Bitmap
Resources res = getResources()
Bitmap bmp = BitmapFactory
.decodeResource(res, R
.drawable.icon)
12
12
2.Bitmap → byte[]
public byte[]
Bitmap2Bytes(Bitmap bm) {
ByteArrayOutputStream baos =
new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG,
100, baos);
return baos.toByteArray();
}
12345
12345
3.byte[] → Bitmap
public Bitmap
Bytes2Bimap(
byte[] b) {
if (b.length !=
0) {
return BitmapFactory.decodeByteArray(b,
0, b.length);
}
else {
return null;
}
}
1234567
1234567
4.Bitmap缩放
public static Bitmap
zoomBitmap(Bitmap bitmap,
int width,
int height) {
int w = bitmap.getWidth();
int h = bitmap.getHeight();
Matrix matrix =
new Matrix();
float scaleWidth = ((
float) width / w);
float scaleHeight = ((
float) height / h);
matrix.postScale(scaleWidth, scaleHeight);
Bitmap newbmp = Bitmap.createBitmap(bitmap,
0,
0, w, h, matrix,
true);
return newbmp;
}
12345678910
12345678910
5.将Drawable转化为Bitmap
public static Bitmap
drawableToBitmap(Drawable drawable) {
int w = drawable.getIntrinsicWidth();
int h = drawable.getIntrinsicHeight();
Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565;
Bitmap bitmap = Bitmap.createBitmap(w, h, config);
Canvas canvas =
new Canvas(bitmap);
drawable.setBounds(
0,
0, w, h);
drawable.draw(canvas);
return bitmap;
}
1234567891011121314151617
1234567891011121314151617
6.获得圆角图片
public static Bitmap
getRoundedCornerBitmap(Bitmap bitmap,
float roundPx) {
int w = bitmap.getWidth();
int h = bitmap.getHeight();
Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888);
Canvas canvas =
new Canvas(output);
final int color =
0xff424242;
final Paint paint =
new Paint();
final Rect rect =
new Rect(
0,
0, w, h);
final RectF rectF =
new RectF(rect);
paint.setAntiAlias(
true);
canvas.drawARGB(
0,
0,
0,
0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(
new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}
123456789101112131415161718
123456789101112131415161718
7.Bitmap转换成Drawable
Bitmap bm=xxx;
BitmapDrawable bd=
new BitmapDrawable(getResource(), bm);
123
123
8.Drawable缩放
public static Drawable
zoomDrawable(Drawable drawable,
int w,
int h) {
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
Bitmap oldbmp = drawableToBitmap(drawable);
Matrix matrix =
new Matrix();
float sx = ((
float) w / width);
float sy = ((
float) h / height);
matrix.postScale(sx, sy);
Bitmap newbmp = Bitmap.createBitmap(oldbmp,
0,
0, width, height,matrix,
true);
return new BitmapDrawable(newbmp);
}
12345678910111213141516
12345678910111213141516
(function () {('pre.prettyprint code').each(function () { var lines =
(this).text().split(′\n′).length;var
numbering = $('
').addClass('pre-numbering').hide();
(this).addClass(′has−numbering′).parent().append(
numbering); for (i = 1; i