android tiff图片,在Android上获取TIFF图像的单个像素

package com.tif;

import android.os.*;import android.content.*;import android.app.*;import android.widget.*;import android.view.*;

import android.view.View.*;import android.graphics.*;import java.io.*;import java.util.*;import android.util.*;

import java.lang.*;import java.nio.*;import java.nio.channels.*;

public class Main extends Activity

{

private static final int CLEAR_CODE = 256;

private static final int EOI_CODE = 257;

long bytesCount=0L;

ScrollView sv;TextView tv;ImageView iv;

List intList;

long[] stripOffs,stripBytes;

byte[] bytes,ubytes,bmpBytes;

ByteBuffer bBuff;

BitBuffer bitBuff;

int entries,type,tag;

long count,value,ifd,stripAt,stripCount,stripBytesAt,rows,cols;

String txt="Null",path="",decompressed="";

String[] info= {"width","length","bitsPerSample","Compression","PhotometricInterpretation","FillOrder","StripOffsets","SamplesPerPixel","RowsPerStrip"

,"StripBytes","XResolution","YResolution","PlanarConfig","ResolutionUnit","extra","NextIFD"};

Bitmap bmp=null;

class DotsView extends View

{

int i = 0;Bitmap bmp;Canvas cnv;Rect bounds;Paint p;int width,height;

int alfa,red,green,blue;

public DotsView(Context context ,int width ,int height)

{

super(context);

this.width = width;

this.height = height;

bmp = Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888);

cnv = new Canvas(bmp);

bounds = new Rect(0 , 0, width,height);

p = new Paint();

}

@Override

protected void onDraw(Canvas c)

{

for(int i=0;i

for(int j=0;j

{

for(int pix=0;pix<3;pix++)

{

if(pix==0)blue=bmpBytes[i+j+pix];

if(pix==1)green=bmpBytes[i+j+pix];

if(pix==2)red=bmpBytes[i+j+pix];

}

p.setColor(Color.argb(255, red,green,blue));

cnv.drawPoint(i,j, p);

}

c.drawBitmap(bmp, null, bounds , null);

invalidate();

}

}

public int myShort(short sh)

{ int i;

ByteBuffer shortBuff=ByteBuffer.allocate(4);

shortBuff.order(ByteOrder.BIG_ENDIAN);shortBuff.putShort(sh);shortBuff.rewind();

shortBuff.order(ByteOrder.LITTLE_ENDIAN);sh=shortBuff.getShort();

if(sh<0)i=(int)(sh+32768); else i=(int)sh;

return i;

}

public long myInt(int i)

{ long l=0L;

ByteBuffer intBuff=ByteBuffer.allocate(4);

intBuff.order(ByteOrder.BIG_ENDIAN);intBuff.putInt(i);intBuff.rewind();

intBuff.order(ByteOrder.LITTLE_ENDIAN); i=intBuff.getInt();

if(i<0)l=(long)(i+2147483648L); else l=(long)i;

return l;

}

public String tagInfo(int tag)

{ int i=0;

switch(tag)

{case 256: i=0;break;case 257: i=1;break;case 258: i=2;break;case 259: i=3;break;case 262: i=4;break;case 266: i=5;break;

case 273: i=6;break;case 277: i=7;break;case 278: i=8;break;case 279: i=9;break;case 282: i=10;break;case 283: i=11;break;

case 284: i=12;break;case 296: i=13;break;case 1496: i=14;break;case 0: i=15;break;

}

return info[i];

}

public void extractTif()

{

String taginfo="";String strVal="";

FileInputStream fis;BufferedInputStream bis;DataInputStream dis;

path=Environment.getExternalStorageDirectory().getPath();

path=path+"/DCIM"+"/kpd.tif";

try {

fis=new FileInputStream(path);bis=new BufferedInputStream(fis);dis=new DataInputStream(bis);

dis.skip(4);ifd=myInt(dis.readInt());

txt="TIFF-IFD: "; txt=txt+ifd;

dis.skip(ifd-8); entries=myShort(dis.readShort());

txt=txt+"\nNo.OfEntries="+entries;

for(int i=0;i<=entries;i++)

{ tag=myShort(dis.readShort());taginfo=tagInfo(tag);

type=myShort(dis.readShort());count=myInt(dis.readInt());value=myInt(dis.readInt());

if(type==3)strVal="Value="; else strVal="Offset=";

if(strVal.equals("Offset="))

{

if(taginfo.equals("StripOffsets")){stripAt=value;stripCount=count;}

if(taginfo.equals("StripBytes") ){stripBytesAt=value;}

}

if(taginfo.equals("width")){cols=value;}

if(taginfo.equals("length")){rows=value;}

txt=txt+"\ntag="+tag+" "+tagInfo(tag)+",type="+type+",count="+count+strVal+value;

}

dis.close();bis.close();fis.close();

}catch(Exception e) {txt=txt+"\nerror="+e.toString();}

txt=txt+"\nNo.OfStrips="+stripCount+",array of strip locations at: "+stripAt+" and array of bytesPerStrip at "+stripBytesAt ;

extractBMP();

}

public void extractBMP()

{try{ File f=new File(path);RandomAccessFile raf=new RandomAccessFile(f,"r");

raf.seek(stripAt);stripOffs=new long[(int)stripCount];

txt=txt+"\nArray Of Image Offsets=";

for(int i=0;i

raf.seek(stripBytesAt); stripBytes=new long[(int)stripCount];

txt=txt+"\nArray Of Strip Bytes =";

for(int i=0;i

txt=txt+stripBytes;

bBuff =ByteBuffer.allocate((int)(rows*cols*3));

for(int i=0;i

{

bytes =new byte[(int)stripBytes[i]];

raf.seek(stripOffs[i]);

raf.read(bytes);

bBuff.put(lzwUncompress(bytes));

bytes=null;

}

txt=txt+"\nBuffered Image Bytes Size="+bBuff.position();

bBuff.rewind();

bmpBytes=new byte[bBuff.remaining()];

bmpBytes=bBuff.array();

txt=txt+"\nCount of bmpBytes="+bmpBytes.length;

bmp=BitmapFactory.decodeByteArray(bmpBytes,0,bmpBytes.length);

SystemClock.sleep(5000);

txt=txt+"Bitmap Object, bmp="+bmp;

if(bmp!=null){iv.setImageBitmap(bmp);sv.addView(iv);}

raf.close();

}catch(Exception e){txt=txt+"\nerror="+e.toString();}

}

public void lzw()

{

//String[] table=new String[4096];

byte b;char ch;String s;String pre="";short sh;

//List strTable=Arrays.asList(table);

//for(int i=0;i<255;i++)table[i]=Character.toString((char)i);

for(int i=0;i<100;i++)

{

b=bytes[i];

if(b<0)sh=(short)(128+b);

else sh=(short)b;

//ch=(char)b;

s=String.valueOf(sh);

//s=s+pre;

//if(strTable.contains(s)){pre=s;}

//else{ }

txt=txt+"Byte No."+i+"="+s+" ";

}

}

public void onCreate(Bundle bnd)

{

super.onCreate(bnd);

extractTif();

//sv=new ScrollView(this);

//tv=new TextView(this);

//iv=new ImageView(this);

//tv.setTextSize(7);

//sv.addView(tv);

//sv.addView(iv);

//tv.setText(txt);

//setContentView(sv);

Point res=new Point(); getWindowManager().getDefaultDisplay().getSize(res);

DotsView myView = new DotsView(this,res.x,res.y);

setContentView(myView);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值