android bitmap存储位置
时间: 2023-07-28 21:40:31 浏览: 48
Android中的Bitmap可以存储在内存中,也可以存储在磁盘上或其它外部存储设备上。
1. 内存中存储:
Bitmap对象可以直接存储在内存中,可以在代码中使用new Bitmap()或者BitmapFactory.decodeXXX()等方法创建Bitmap对象并直接使用。
2. 磁盘或外部存储设备上存储:
可以将Bitmap对象保存到磁盘或者其它外部存储设备上,可以使用Bitmap.compress()方法将Bitmap对象压缩成JPEG或者PNG格式的图片,然后将图片保存到指定路径。例如:
```java
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);
FileOutputStream fos = new FileOutputStream("/sdcard/image.jpg");
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.close();
```
以上代码将一个Drawable资源中的图片转换成Bitmap对象,然后将Bitmap对象压缩成JPEG格式的图片,并保存到SD卡根目录下的image.jpg文件中。
相关问题
android bitmap图片合成
### 回答1:
要在 Android 上合成多个 Bitmap 图片,可以使用 Canvas 类和 Bitmap 类。下面是一个简单的示例:
1. 创建一个空的 Bitmap 对象,作为最终合成的图片:
```java
Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(result);
```
2. 将需要合成的 Bitmap 依次绘制到空的 Bitmap 上:
```java
canvas.drawBitmap(bitmap1, x1, y1, null);
canvas.drawBitmap(bitmap2, x2, y2, null);
canvas.drawBitmap(bitmap3, x3, y3, null);
```
3. 最后,可以保存合成后的 Bitmap 为图片文件或者显示在 ImageView 中:
```java
imageView.setImageBitmap(result);
```
完整的代码示例:
```java
public Bitmap mergeBitmaps(Bitmap bitmap1, Bitmap bitmap2, Bitmap bitmap3) {
int width = bitmap1.getWidth();
int height = bitmap1.getHeight() + bitmap2.getHeight() + bitmap3.getHeight();
Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(result);
canvas.drawBitmap(bitmap1, 0, 0, null);
canvas.drawBitmap(bitmap2, 0, bitmap1.getHeight(), null);
canvas.drawBitmap(bitmap3, 0, bitmap1.getHeight() + bitmap2.getHeight(), null);
return result;
}
```
以上代码将三个 Bitmap 垂直合成为一个 Bitmap,第一个 Bitmap 在最上面,第二个在中间,第三个在最下面。可以根据实际需求修改代码。
### 回答2:
Android中合成bitmap图片可以使用Canvas和Paint类来实现。步骤如下:
1. 创建一个新的Bitmap对象,用于存储合成后的图片。
2. 创建一个Canvas对象,并将新的Bitmap对象与Canvas关联起来。
3. 创建一个Paint对象,并设置相关的合成属性,如颜色、透明度、画笔风格等。
4. 使用Canvas的drawBitmap()方法将多个Bitmap对象绘制到新的Bitmap上,实现图片的合成效果。
5. 最后,可以将合成后的Bitmap保存到本地文件或者显示在界面上。
以下是一个简单的示例代码:
```java
// 创建合成后的Bitmap对象
Bitmap resultBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
// 创建Canvas对象,并与新的Bitmap关联
Canvas canvas = new Canvas(resultBitmap);
// 创建Paint对象
Paint paint = new Paint();
// 设置合成属性
paint.setColor(Color.RED);
paint.setAlpha(128);
paint.setStyle(Paint.Style.FILL);
// 绘制bitmap1
canvas.drawBitmap(bitmap1, matrix1, paint);
// 绘制bitmap2
canvas.drawBitmap(bitmap2, matrix2, paint);
// 绘制bitmap3
canvas.drawBitmap(bitmap3, matrix3, paint);
// 可以依次绘制更多的bitmap
...
// 保存合成后的Bitmap到本地文件
resultBitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
```
以上代码中,width和height表示合成后的Bitmap的宽度和高度,bitmap1、bitmap2、bitmap3等表示待合成的原始Bitmap对象,matrix1、matrix2、matrix3等表示对相应的Bitmap进行变换的Matrix对象。
通过以上步骤,就可以实现Android中的Bitmap图片合成。
### 回答3:
Android中的Bitmap是一个表示图像的类,可以用来显示图片、进行图像处理等操作。要实现Bitmap的图片合成,可以通过以下步骤:
1. 创建一个新的Bitmap对象,用于存储合成后的图片。可以使用Bitmap的createBitmap()方法,指定宽度、高度和颜色格式创建一个空白的Bitmap对象。
2. 获取要合成的原始图片。可以使用BitmapFactory的decodeResource()方法,从资源文件中加载图片,并通过BitmapFactory.Options对象设置图片的缩放比例、色彩模式等参数。
3. 将原始图片绘制到新的Bitmap对象上。可以使用Canvas的drawBitmap()方法,在新的Bitmap上绘制原始图片。可以设置合成图片的位置、大小等属性。
4. 如果需要合成多张图片,重复步骤2和步骤3,将其他图片依次绘制到新的Bitmap对象上。
5. 最后,可以将合成后的Bitmap对象进行保存或显示。可以使用Bitmap的compress()方法将Bitmap对象保存到指定的输出流中,或使用ImageView等控件的setImageBitmap()方法显示合成后的图片。
需要注意的是,图片合成可能会消耗较大的内存和处理时间,特别是在合成大尺寸图片或大量图片时。为了避免内存溢出和性能问题,可以适当进行图片的压缩、缩放或分块处理,或使用异步处理方式进行合成。此外,可以通过Bitmap的回收和复用来优化内存使用。
总之,通过创建新的Bitmap对象,获取原始图片,绘制到新的Bitmap上,就可以实现Android中的图片合成功能。
android截屏代码
Android截屏代码一般分为两种方式:使用View截取和使用SurfaceView截取。
使用View截取需要先获取到View的根布局对象,然后通过View的measure和layout方法确定View的大小和位置,再创建对应尺寸的Bitmap,最后调用View的draw方法将View的内容绘制到Bitmap上。
具体代码如下:
```
// 获取View的根布局对象
View view = getWindow().getDecorView().getRootView();
// 创建对应尺寸的Bitmap
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
// 创建Canvas对象,将内容绘制到Bitmap上
Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
// 存储Bitmap到文件中
try {
FileOutputStream outputStream = new FileOutputStream(new File(Environment.getExternalStorageDirectory().getPath(),"screenshot.png"));
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
```
使用SurfaceView截取需要获取到SurfaceView的SurfaceHolder对象,然后通过SurfaceHolder的lockCanvas方法获取到Canvas对象,再将Canvas绘制到对应尺寸的Bitmap上。
具体代码如下:
```
// 获取SurfaceView的SurfaceHolder对象
SurfaceHolder holder = surfaceView.getHolder();
// 创建对应尺寸的Bitmap
Bitmap bitmap = Bitmap.createBitmap(surfaceView.getWidth(), surfaceView.getHeight(), Bitmap.Config.ARGB_8888);
// 获取Canvas对象,将内容绘制到Bitmap上
Canvas canvas = holder.lockCanvas();
Canvas canvas2 = new Canvas(bitmap);
canvas2.drawBitmap(bitmap, 0, 0, null);
// 释放SurfaceHolder
holder.unlockCanvasAndPost(canvas);
// 存储Bitmap到文件中
try {
FileOutputStream outputStream = new FileOutputStream(new File(Environment.getExternalStorageDirectory().getPath(),"screenshot.png"));
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
```
以上是两种常见的Android截屏代码,使用时需要根据具体需求选择合适的方式进行截屏。