文档章节

Android大图片加载以及EXIF信息读取写入

维特的烦恼
 维特的烦恼
发布于 2014/02/14 13:35
字数 433
阅读 5732
收藏 3
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="load"
        android:text="加载图片到内存" />

    <ImageView
        android:id="@+id/iv"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

MAIN AC:

package com.example.loadimg;

import java.io.IOException;


import android.media.ExifInterface;
import android.nfc.Tag;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.graphics.Point;
import android.view.Menu;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity
{

	private ImageView iv;
	private int WindowWidth;
	private int WindowHeight;
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		iv = (ImageView) findViewById(R.id.iv);
		WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
		WindowHeight = wm.getDefaultDisplay().getHeight();
		WindowWidth = wm.getDefaultDisplay().getWidth();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	public void load(View v) throws IOException
	{
		// 图片解析配置
		Options options = new Options();
		// 不去真的解析图片 获取图片头部信息
		options.inJustDecodeBounds = true;
		Bitmap mitmap = BitmapFactory.decodeFile("/sdcard/test.bmp", options);
		int height = options.outHeight;
		int width = options.outWidth;
		System.out.println("宽" + width + "高" + height);

		// 得到手机屏幕宽高比
		int scaleX=width/WindowHeight;
		int scaleY=height/WindowHeight;
		int scale=1;
		if(scaleX>scaleY && scaleY>=1)
		{
			scale=scaleX;
		}
		
		if(scaleY>scaleX && scaleX>=1)
		{
			scale=scaleY;
		}
		
		options.inJustDecodeBounds=false;
		options.inSampleSize=scale;
		mitmap = BitmapFactory.decodeFile("/sdcard/test.bmp", options);
		iv.setImageBitmap(mitmap);
		 readEXIF("/sdcard/test.bmp");
	}
	
	private void readEXIF(String path) throws IOException
	{
		ExifInterface exif=new ExifInterface(path);
		//获取信息
		String time=exif.getAttribute(ExifInterface.TAG_DATETIME);
		String model=exif.getAttribute(ExifInterface.TAG_MODEL);
		String iso=exif.getAttribute(ExifInterface.TAG_ISO);
		
		//设置信息 tag可以自定义
		exif.setAttribute(ExifInterface.TAG_EXPOSURE_TIME, 100+"");
		exif.saveAttributes();
		String ex_time=exif.getAttribute(ExifInterface.TAG_EXPOSURE_TIME);
		
		AlertDialog.Builder builder=new Builder(this);
		builder.setTitle("EXIF信息");
		builder.setMessage(time+"\n"+model+"\n"+iso+"\n"+ex_time);
		builder.setPositiveButton("取消",new OnClickListener()
		{
			
			@Override
			public void onClick(DialogInterface dialog, int which)
			{
				dialog.dismiss();
			}
		});
		builder.setNegativeButton("确定", new OnClickListener()
		{
			
			@Override
			public void onClick(DialogInterface dialog, int which)
			{
				dialog.dismiss();
			}
			
		});
		builder.create().show();
	}
}




© 著作权归作者所有

共有 人打赏支持
维特的烦恼
粉丝 21
博文 97
码字总数 42329
作品 0
天津
私信 提问
加载中

评论(2)

维特的烦恼
维特的烦恼

引用来自“nliver”的评论

你好怎么联系您呢

你好 现在已经不关注安卓方面,文章可能均以过时,谢谢
nliver
nliver
你好怎么联系您呢
Android 2.2 下 camera 应用程序支持 GPS 信息写入 jpeg 文件

一、概述 在Android2.2中,Camera的应用程序并不支持将GPS信息写入到JPEG文件中,但如果要实现这个功能,有如下两种方式: 1、修改底层camera驱动。在拍照时,一般都是使用硬件去进行JPEG编码...

无鸯
2011/10/01
5.2K
1
关于“发送原图”功能问题的记录

本文主要记录一个bug从发现、定位到延期解决的过程。文末添加了已踩过的坑 近期在做“发送原图”功能的时候,遇到一个bug:在Android、Windows、Mac 客户端发送原图,iOS客户端接收,保存原图...

si1ence
2018/10/24
0
0
Android--从系统Camera和Gallery获取图片优化

前言   之前有两篇博客讲解了如何从系统内已有的Camera和Gallery应用中获取图片的例子,看到评论里有朋友说有时候会报错,导致程序崩溃的 问题。本篇博客主要就这个问题分析讲解一下,最后...

crystaltiger
2013/12/06
0
0
六款值得推荐的android(安卓)开源框架简介【转】

1、volley 项目地址 https://github.com/smanikandan14/Volley-demo (1) JSON,图像等的异步下载; (2) 网络请求的排序(scheduling) (3) 网络请求的优先级处理 (4) 缓存 (5) 多级别取消请求...

hkstar35
2014/07/11
0
0
六款值得推荐的android(安卓)开源框架简介【转】

1、volley 项目地址 https://github.com/smanikandan14/Volley-demo (1) JSON,图像等的异步下载; (2) 网络请求的排序(scheduling) (3) 网络请求的优先级处理 (4) 缓存 (5) 多级别取消请求...

火蚁
2014/07/09
0
1

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 升级中的一些常见问题

升级的时候遇到了问题了吗? 如果你想尝试重新进行升级的话,你需要首先重新恢复老的备份。不要尝试再次对 Confluence 进行升级或者在升级失败后重新启动老的 Confluence。 在升级过程中的一...

honeymoose
今天
2
0
C++随笔(四)Nuget打包

首先把自己编译好的包全部准备到一个文件夹 像这样 接下来新建一个文本文档,后缀名叫.nuspec 填写内容 <?xml version="1.0"?><package xmlns="http://schemas.microsoft.com/packaging/201......

Pulsar-V
今天
2
0
再谈使用开源软件搭建数据分析平台

三年前,我写了这篇博客使用开源软件快速搭建数据分析平台, 当时收到了许多的反馈,有50个点赞和300+的收藏。到现在我还能收到一些关于dataplay2的问题。在过去的三年,开源社区和新技术的发...

naughty
今天
10
0
Python3的日期和时间

python 中处理日期时间数据通常使用datetime和time库 因为这两个库中的一些功能有些重复,所以,首先我们来比较一下这两个库的区别,这可以帮助我们在适当的情况下时候合适的库。 在Python文...

编程老陆
今天
2
0
分布式面试整理

并发和并行 并行是两个任务同时进行,而并发呢,则是一会做一个任务一会又切换做另一个任务。 临界区 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用,但是每一次,只能有...

群星纪元
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部