【问题标题】:Use ImadeDecoder to decode TIFF and convert to jpeg in Android Studio在 Android Studio 中使用 ImadeDecoder 解码 TIFF 并转换为 jpeg
【发布时间】:2015-10-16 21:11:46
【问题描述】:

我想在 Android Studio 中将 TIFF 转换为 JPEG。我收到错误消息

Error:(116, 15) error: cannot find symbol class SeekableStream
Error:(116, 38) error: cannot find symbol class FileSeekableStream
Error:(117, 17) error: cannot find symbol class TIFFDecodeParam
Error:(118, 17) error: cannot find symbol class ImageDecoder
Error:(118, 36) error: cannot find symbol variable ImageCodec
Error:(119, 17) error: cannot find symbol class RenderedImage

我发现我需要使用 javax.media.jai。如何将库导入 Android Studio。我是 Android Studio 新手。

提前致谢。

L

【问题讨论】:

    标签: jai


    【解决方案1】:

    快速回答:你不能。 JAI 和 javax.media.jai 的一切都严重依赖于 Java2D 以及 java.awtjava.awt.image 包,它们不是 Android 平台的一部分。

    如果您想在 Android 上阅读 TIFF,我认为您可以使用 libTIFF(C 库)和Android NDK

    注意:我假设您想创建一个程序来将 TIFF 转换为 JPEG。如果您只想转换特定文件以在 Android Studio 中使用,那么这个问题对于 StackOverflow 来说是题外话。您应该询问如何在 SuperUser 上转换图像(尽管我相信您会发现这个问题已经得到解答)。

    【讨论】:

      【解决方案2】:

      https://letsmakeandroidapp.wordpress.com/learn-reading-binary-files-decode-tiff-images/ 检查上面的链接以获得完整的代码视图,但代码 sn-p 我将在下面给出:-

      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","Fil        lOrder","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<width;i++) 
         for(int j=0;j<height;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<stripCount;i++){stripOffs[i]=myInt( raf.readInt() ); txt=txt+","+stripOffs[i]; }
          raf.seek(stripBytesAt); stripBytes=new long[(int)stripCount];
          txt=txt+"\nArray Of Strip Bytes =";
          for(int i=0;i<stripCount;i++){stripBytes[i]=myInt(raf.readInt()); txt=txt+","+stripBytes[i];bytesCount+=stripBytes[i];}
          txt=txt+stripBytes;
      
          bBuff =ByteBuffer.allocate((int)(rows*cols*3));
          for(int i=0;i<stripCount;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);
      }
      

      【讨论】:

        猜你喜欢
        • 2021-03-31
        • 1970-01-01
        • 1970-01-01
        • 2013-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多