导航:首页 > 操作系统 > androidsaveimage

androidsaveimage

发布时间:2022-05-29 03:19:15

1. 如何在android里面使用代码截屏

方法一:

(1)主要就是利用SDK提供的View.getDrawingCache()方法。网上已经有很多的实例了。首先创建一个android project,然后进行Layout,画一个按键

HelloAndroid.java实现代码为:packagecom.example.helloandroid;

这个代码会在按下app中按键的时候自动在手机的/sdcard/目录下生成一个时间戳命名的png截屏文件。

这种截屏有一个问题,就是只能截到一部分,比如电池指示部分就截不出来了。

(2)在APK中调用“adb shell screencap -pfilepath” 命令

(1). 在AndroidManifest.xml文件中添加

(2). 修改APK为系统权限,将APK放到源码编译

(3).利用系统的API,实现Screenshot,这部分代码是系统隐藏的,需要在源码下编译,

1).修改Android.mk, 添加系统权限

LOCAL_CERTIFICATE := platform

2).修改AndroidManifest.xml 文件,添加

权限

方法二:

Android本地编程(Native Programming)读取framebuffer

(1)命令行,框架的截屏功能是通过framebuffer来实现的,所以我们先来介绍一下framebuffer。

Linux FrameBuffer 本质上只是提供了对图形设备的硬件抽象,在开发者看来,FrameBuffer 是一块显示缓存,往显示缓存中写入特定格式的数据就意味着向屏幕输出内容。所以说FrameBuffer就是一块白板。例如对于初始化为16 位色的FrameBuffer 来说, FrameBuffer中的两个字节代表屏幕上一个点,从上到下,从左至右,屏幕位置与内存地址是顺序的线性关系。帧缓存有个地址,是在内存里。我们通过不停的向frame buffer中写入数据, 显示控制器就自动的从frame buffer中取数据并显示出来。全部的图形都共享内存中同一个帧缓存。

Android系统是基于Linux内核的,所以也存在framebuffer这个设备,我们要实现截屏的话只要能获取到framebuffer中的数据,然后把数据转换成图片就可以了,android中的framebuffer数据是存放在 /dev/graphics/fb0 文件中的,所以我们只需要来获取这个文件的数据就可以得到当前屏幕的内容。

现在我们的测试代码运行时候是通过RC(remote controller)方式来运行被测应用的,那就需要在PC机上来访问模拟器或者真机上的framebuffer数据,这个的话可以通过android的ADB命令来实现。

1、需要在AndroidManifest.xml中加入代码:android:sharedUserId="android.uid.system"。

2、由于调用了@hide的API,所以编译得时候请使用makefile编译。或者通过在Eclipse中添加Jar文件通过编译。

3、此代码只在Android4.0中使用过,2.3的就没去做测试了。

  1. 利用TakeScreenShotService截图Android手机一般都自带有手机屏幕截图的功能:在手机任何界面(当然手机要是开机点亮状态),通过按组合键,屏幕闪一下,然后咔嚓一声,截图的照片会保存到当前手机的图库中,

  2. 对手机android源码中通过组合键屏幕截图的整个流程有个大体了解了,在改动中熟悉按键的捕获原理,并且清楚调用的截屏函数接口即可。

2. Android开发,图库获取图片路径

public class TestCameraActivity extends Activity implements OnClickListener{ private Uri mOutPutFileUri; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button takePiCButton = (Button) this.findViewById(R.id.button1); takePiCButton.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button1: saveFullImage(); break; default: break; } } private void saveFullImage(){ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //文件夹aaaa String path = Environment.getExternalStorageDirectory().toString()+"/aaaa"; File path1 = new File(path); if(!path1.exists()){ path1.mkdirs(); } File file = new File(path1,System.currentTimeMillis()+".jpg"); mOutPutFileUri = Uri.fromFile(file); intent.putExtra(MediaStore.EXTRA_OUTPUT, mOutPutFileUri); startActivityForResult(intent, 1); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == 1){ Uri imageUri = null; if(data != null){ if(data.hasExtra("data")){ Bitmap thunbnail = data.getParcelableExtra("data"); //处理缩略图 } }else{ //处理mOutPutFileUri中的完整图像 } } } }

3. (android )怎么在一个ImageView中显示多张图片,并可设置图片的位置谢谢!

在一个ImageView中显示多张图片的过程与原理实际是:将多张图片缩放重定位后重绘到一张图然后显示出来。
典型的应用有缩略图、水印等应用。
具体实现的关键代码如下:
Bitmap icon = Bitmap.createBitmap(width, hight, Bitmap.Config.ARGB_8888); //建立一个空的图画板
Canvas canvas = new Canvas(icon);//初始化画布绘制的图像到icon上
Paint photoPaint = new Paint(); //建立画笔
Rect dst = new Rect(0, 0, width, hight);//创建一个指定的新矩形的坐标
canvas.drawBitmap(photo, src, dst, photoPaint);//将photo 缩放或则扩大到 dst使用的填充区photoPaint
canvas.save(Canvas.ALL_SAVE_FLAG);
image.setImageBitmap(icon);

4. android如何显示blob字段求答案

android如何显示blob方法如下:
BOLB表示二进制大对象,这种数据类型通过用来保存图片,图象,视频等。

一,使用场景:
http://blog.sina.com.cn/s/blog_8cfbb99201012oqn.html

public class MySQLiteOpenHelper extends SQLiteOpenHelper {
1,重写构造方法
public MySQLiteOpenHelper(Context context, String name,
CursorFactory cursor, int version) {
super(context, name, cursor, version);
}

2, 创建数据库的方法
public void onCreate(SQLiteDatabase db) {
3, 创建一个数据库,表名:imagetable,字段:_id、image。
db.execSQL("CREATE TABLE imagetable (_id INTEGER PRIMARY KEY AUTOINCREMENT,image BLOB)");
}

4, 更新数据库的方法
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

}

5,创建助手类的实例
// CursorFactory的值为null,表示采用默认的工厂类
mySQLiteOpenHelper = new MySQLiteOpenHelper(this, "saveimage.db", null,1);
6, 创建一个可读写的数据库
mydb = mySQLiteOpenHelper.getWritableDatabase();

7,将图片转化为位图
Bitmap bitmap1=BitmapFactory.decodeResource(getResources(), R.drawable.erweima);

int size=bitmap1.getWidth()*bitmap1.getHeight()*4;
//创建一个字节数组输出流,流的大小为size
ByteArrayOutputStream baos=new ByteArrayOutputStream(size);
//设置位图的压缩格式,质量为100%,并放入字节数组输出流中 bitmap1.compress(Bitmap.CompressFormat.PNG, 100, baos);
//将字节数组输出流转化为字节数组byte[]
byte[] imagedata1=baos.toByteArray();

//将字节数组保存到数据库中
ContentValues cv=new ContentValues();
cv.put("_id", 1);
cv.put("image", imagedata1);
mydb.insert("imagetable", null, cv);
//关闭字节数组输出流
baos.close();

二,从数据库中查询的方法:
1,创建一个指针
Cursor cur=mydb.query("imagetable", new String[]{"_id","image"}, null, null, null, null, null);
byte[] imagequery=null;
if(cur.moveToNext()){
2,将Blob数据转化为字节数组imagequery=cur.getBlob(cur.getColumnIndex("image"));
}
3,将字节数组转化为位图
Bitmap imagebitmap=BitmapFactory.decodeByteArray(imagequery, 0, imagequery.length);
iv1=(ImageView) findViewById(R.id.imageView1);
4,将位图显示为图片
iv1.setImageBitmap(imagebitmap);

5. android中语音的压缩使用的什么算法

把一些赞美当成春天我对我的热情和你的冷漠都失去了把一个和横店类似的村庄当成故乡耐心而它们活与不活真的是另外一件事情

6. android 如何获取保存的图片的地址 并存到数据库中

安卓中如何获取保存的图片uri 并保存到sqlite数据库中
有如下两种方法,仅供参考
方法一:Java代码

public void saveIcon(Bitmap icon) {
if (icon == null) {
return;
}
// 最终图标要保存到浏览器的内部数据库中,系统程序均保存为SQLite格式,Browser也不例外,因为图片是二进制的所以使用字节数组存储数据库的
// BLOB类型
final ByteArrayOutputStream os = new ByteArrayOutputStream();
// 将Bitmap压缩成PNG编码,质量为100%存储
icon.compress(Bitmap.CompressFormat.PNG, 100, os);
// 构造SQLite的Content对象,这里也可以使用
raw ContentValues values = new ContentValues();
// 写入数据库的
Browser.BookmarkColumns.TOUCH_ICON字段 values.put(Browser.BookmarkColumns.TOUCH_ICON, os.toByteArray());
DBUtil.update(....);
//调用更新或者插入到数据库的方法
}
}

方法二:如果数据表入口时一个content:URIJava代码

import android.provider.MediaStore.Images.Media;
import android.content.ContentValues;
import java.io.OutputStream;
// Save the name and description of an image in a ContentValues map.
ContentValues values = new ContentValues(3);
values.put(Media.DISPLAY_NAME, "road_trip_1");
values.put(Media.DESCRIPTION, "Day 1, trip to Los Angeles");
values.put(Media.MIME_TYPE, "image/jpeg");
// Add a new record without the bitmap, but with the values just set.
// insert() returns the URI of the new record.
Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
// Now get a handle to the file for that record, and save the data into it.
// Here, sourceBitmap is a Bitmap object representing the file to save to the database.
try {
OutputStream outStream = getContentResolver().openOutputStream(uri);
sourceBitmap.compress(Bitmap.CompressFormat.JPEG, 50, outStream);
outStream.close();
} catch (Exception e) {
Log.e(TAG, "exception while writing image", e);
}
原文请看http://www.bafenbaosoft.com/post/48.html

7. 如何获取图像路径从照片库以

1.从本地相册获取照片:
一般就是写出这个方法
protected void getImageFromAlbum() {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");//相片类型
startActivityForResult(intent, REQUEST_CODE_PICK_IMAGE);
}

2.从照相机获取照片
一般就是写出这个方法
protected void getImageFromCamera() {
String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(getImageByCamera, REQUEST_CODE_CAPTURE_CAMEIA);
}
else {
Toast.makeText(getApplicationContext(), "请确认已经插入SD卡", Toast.LENGTH_LONG).show();
}
}
写完这个方法后,一般我们还需要通过响应这个方法去获取图片

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_PICK_IMAGE) {
Uri uri = data.getData();
//to do find the path of pic

} else if (requestCode == REQUEST_CODE_CAPTURE_CAMEIA ) {
Uri uri = data.getData();
//to do find the path of pic
} }

但是,有时候我们会发现用相机拍摄获取照片的时候,得到的 uri 是 null 的,这是因为android把拍摄的图片封装到bundle中传递回来,但是根据不同的机器获得相片的方式不太一样,可能有的相机能够通过
inten.getData()获取到uri
然后再根据uri获取数据的路径,在封装成bitmap,但有时候有的相机获取到的是null的,这时候我们该怎么办呢?
其实这时候我们就应该从bundle中获取数据,通过
(Bitmap) bundle.get("data")
获取到相机图片的bitmap数据。
为了能够同时适应上述两种情况,我们这时候就应该在获取图片时做判断了。我们可以在响应的时候做一个判断:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_PICK_IMAGE) {
Uri uri = data.getData();
//to do find the path of pic by uri

} else if (requestCode == REQUEST_CODE_CAPTURE_CAMEIA ) {
Uri uri = data.getData();
if(uri == null){
//use bundle to get data
Bundle bundle = data.getExtras();
if (bundle != null) {
Bitmap photo = (Bitmap) bundle.get("data"); //get bitmap
//spath :生成图片取个名字和路径包含类型
saveImage(Bitmap photo, String spath);
} else {
Toast.makeText(getApplicationContext(), "err****", Toast.LENGTH_LONG).show();
return;
}
}else{
//to do find the path of pic by uri
}
}
}
后面的过程就需要通过bitmap转化成相应的图片文件了。不过得到最终的图片是被压缩了的。

public static void saveImage(Bitmap photo, String spath) {
try {
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(spath, false));
photo.compress(Bitmap.CompressFormat.JPEG, 100, bos);
bos.flush();
bos.close();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
这样就能解决照相机取到的图片uri为空的状态了

8. Android中压缩图片指定大小

注意看这句话,bit.compress(CompressFormat.PNG, 100, baos);
那里的数字表示 如果不压缩是100,表示压缩率为0。
如果是70,就表示压缩率是70,表示压缩30%;
所以你的倒数第二句话表示没有压缩。

以下是我压缩的方法,望采纳。

/**
* 图像压缩并保存到本地
* 返回处理过的图片
*
*/
private Bitmap
saveImage(String fileName,Bitmap bit) {

File file = new
File(fileName);
if (!file.exists()) {
try
{
file.createNewFile();
} catch (IOException e)
{
e.printStackTrace();
}
}
try
{
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bit.compress(CompressFormat.JPEG, 70,
stream);
// 70 是压缩率,表示压缩30%; 如果不压缩是100,表示压缩率为0
FileOutputStream os =
new
FileOutputStream(file);
os.write(stream.toByteArray());
os.close();
return
bit;
} catch (Exception e) {
file = null;
return
null;
}
}

9. 版本过低怎么升级andoid相册

Android:三种方法更新手机系统图库

在Android设备上处理一张图片是很常见的,处理完图片后一般要将其保存到存储卡中,如果直接执行下面这样的保存方法,结果是在系统图库中无法看到刚才保存图片。

privatebooleansaveImage(Contextcontext,Bitmapbmp,Stringpath){
//传入要保存文件的路径
Filef=newFile(path);
if(f!=null&&!f.getParentFile().exists()){
f.getParentFile().mkdirs();
}
try{
FileOutputStreamout=newFileOutputStream(f);
bmp.compress(Bitmap.CompressFormat.JPEG,100,out);
out.flush();
out.close();
}catch(FileNotFoundExceptione){
e.printStackTrace();
returnfalse;
}catch(IOExceptione){
e.printStackTrace();
returnfalse;
}
returntrue;
}

想要更加方便的查看自己保存的图片,经常需要更新系统相册,也就是让系统相册重新扫描文件存储系统,并刷新图库,使得用户能在系统自带的相册图库中看到新保存入的图片。

综合各类资源,总结更新Android设备上系统图库的方法,归纳为下面几种。

//InsertintoMediaStore.
ContentValuesvalues=newContentValues();
values.put(ImageColumns.TITLE,"title");
values.put(ImageColumns.DISPLAY_NAME,"filename.jpg");
values.put(ImageColumns.DATE_TAKEN,System.currentTimeMillis());
values.put(ImageColumns.MIME_TYPE,"image/jpeg");
values.put(ImageColumns.ORIENTATION,0);
values.put(ImageColumns.DATA,path);
values.put(ImageColumns.WIDTH,bmp.getWidth());
values.put(ImageColumns.HEIGHT,bmp.getHeight());
try{
Uriuri=context.getContentResolver().insert(
Images.Media.EXTERNAL_CONTENT_URI,values);
if(uri==null){
Log.e("jileniao.net","FailedtoinsertMediaStore");
}else{
context.sendBroadcast(newIntent(
"com.android.camera.NEW_PICTURE",uri));
}
}catch(Exceptione){
Log.e("jileniao.net","FailedtowriteMediaStore",e);
}
sendBroadcast(newIntent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.parse("file://"+path)));
String[]paths={path};
String[]mimeTypes={"image/jpeg"};
MediaScannerConnection.scanFile(context,paths,mimeTypes,newOnScanCompletedListener(){
@Override
publicvoidonScanCompleted(Stringpath,Uriuri){
}
});
阅读全文

与androidsaveimage相关的资料

热点内容
flash编程书籍推荐 浏览:835
php获得数组键值 浏览:401
香港云服务器操作 浏览:303
wpe最新源码 浏览:857
自己购买云主服务器推荐 浏览:422
个人所得税java 浏览:761
多余的服务器滑道还有什么用 浏览:192
pdf劈开合并 浏览:29
不能修改的pdf 浏览:752
同城公众源码 浏览:489
一个服务器2个端口怎么映射 浏览:298
java字符串ascii码 浏览:79
台湾云服务器怎么租服务器 浏览:475
旅游手机网站源码 浏览:332
android关联表 浏览:946
安卓导航无声音怎么维修 浏览:333
app怎么装视频 浏览:431
安卓系统下的软件怎么移到桌面 浏览:96
windows拷贝到linux 浏览:772
mdr软件解压和别人不一样 浏览:904