JpegInfo.java
上传用户:mingda
上传日期:2017-06-20
资源大小:27691k
文件大小:5k
源码类别:

OA系统

开发平台:

Java

  1. // Decompiled by DJ v2.9.9.60 Copyright 2000 Atanas Neshkov  Date: 2002-12-05 9:38:01
  2. // Home Page : http://members.fortunecity.com/neshkov/dj.html  - Check often for new version!
  3. // Decompiler options: packimports(3) 
  4. // Source File Name:   JpegEncoder.java
  5. package cn.com.fcsoft.chart.jpeg;
  6. import java.awt.AWTException;
  7. import java.awt.Image;
  8. import java.awt.image.PixelGrabber;
  9. class JpegInfo
  10. {
  11.     public JpegInfo(Image image)
  12.     {
  13.         Precision = 8;
  14.         NumberOfComponents = 3;
  15.         lastColumnIsDummy = new boolean[3];
  16.         lastRowIsDummy = new boolean[3];
  17.         Ss = 0;
  18.         Se = 63;
  19.         Ah = 0;
  20.         Al = 0;
  21.         Components = new Object[NumberOfComponents];
  22.         compWidth = new int[NumberOfComponents];
  23.         compHeight = new int[NumberOfComponents];
  24.         BlockWidth = new int[NumberOfComponents];
  25.         BlockHeight = new int[NumberOfComponents];
  26.         imageobj = image;
  27.         imageWidth = image.getWidth(null);
  28.         imageHeight = image.getHeight(null);
  29.         Comment = "JPEG Encoder Copyright 1998, James R. Weeks and BioElectroMech.  ";
  30.         getYCCArray();
  31.     }
  32.     public void setComment(String s)
  33.     {
  34.         Comment.concat(s);
  35.     }
  36.     public String getComment()
  37.     {
  38.         return Comment;
  39.     }
  40.     private void getYCCArray()
  41.     {
  42.         int ai[] = new int[imageWidth * imageHeight];
  43.         PixelGrabber pixelgrabber = new PixelGrabber(imageobj.getSource(), 0, 0, imageWidth, imageHeight, ai, 0, imageWidth);
  44.         MaxHsampFactor = 1;
  45.         MaxVsampFactor = 1;
  46.         for(int l = 0; l < NumberOfComponents; l++)
  47.         {
  48.             MaxHsampFactor = Math.max(MaxHsampFactor, HsampFactor[l]);
  49.             MaxVsampFactor = Math.max(MaxVsampFactor, VsampFactor[l]);
  50.         }
  51.         for(int i1 = 0; i1 < NumberOfComponents; i1++)
  52.         {
  53.             compWidth[i1] = ((imageWidth % 8 == 0 ? imageWidth : (int)Math.ceil((double)imageWidth / 8D) * 8) / MaxHsampFactor) * HsampFactor[i1];
  54.             if(compWidth[i1] != (imageWidth / MaxHsampFactor) * HsampFactor[i1])
  55.                 lastColumnIsDummy[i1] = true;
  56.             BlockWidth[i1] = (int)Math.ceil((double)compWidth[i1] / 8D);
  57.             compHeight[i1] = ((imageHeight % 8 == 0 ? imageHeight : (int)Math.ceil((double)imageHeight / 8D) * 8) / MaxVsampFactor) * VsampFactor[i1];
  58.             if(compHeight[i1] != (imageHeight / MaxVsampFactor) * VsampFactor[i1])
  59.                 lastRowIsDummy[i1] = true;
  60.             BlockHeight[i1] = (int)Math.ceil((double)compHeight[i1] / 8D);
  61.         }
  62.         try
  63.         {
  64.             if(!pixelgrabber.grabPixels())
  65.                 try
  66.                 {
  67.                     throw new AWTException("Grabber returned false: " + pixelgrabber.status());
  68.                 }
  69.                 catch(Exception _ex) { }
  70.         }
  71.         catch(InterruptedException _ex) { }
  72.         float af[][] = new float[compHeight[0]][compWidth[0]];
  73.         float af1[][] = new float[compHeight[0]][compWidth[0]];
  74.         float af2[][] = new float[compHeight[0]][compWidth[0]];
  75.         float[][] _tmp = new float[compHeight[1]][compWidth[1]];
  76.         float[][] _tmp1 = new float[compHeight[2]][compWidth[2]];
  77.         int l1 = 0;
  78.         for(int j1 = 0; j1 < imageHeight; j1++)
  79.         {
  80.             for(int k1 = 0; k1 < imageWidth; k1++)
  81.             {
  82.                 int i = ai[l1] >> 16 & 0xff;
  83.                 int j = ai[l1] >> 8 & 0xff;
  84.                 int k = ai[l1] & 0xff;
  85.                 af[j1][k1] = (float)(0.29899999999999999D * (double)(float)i + 0.58699999999999997D * (double)(float)j + 0.114D * (double)(float)k);
  86.                 af2[j1][k1] = 128F + (float)((-0.16874D * (double)(float)i - 0.33126D * (double)(float)j) + 0.5D * (double)(float)k);
  87.                 af1[j1][k1] = 128F + (float)(0.5D * (double)(float)i - 0.41869000000000001D * (double)(float)j - 0.081309999999999993D * (double)(float)k);
  88.                 l1++;
  89.             }
  90.         }
  91.         Components[0] = af;
  92.         Components[1] = af2;
  93.         Components[2] = af1;
  94.     }
  95.     float[][] DownSample(float af[][], int i)
  96.     {
  97.         int j = 0;
  98.         int k = 0;
  99.         float af1[][] = new float[compHeight[i]][compWidth[i]];
  100.         for(int l = 0; l < compHeight[i]; l++)
  101.         {
  102.             int j1 = 1;
  103.             for(int i1 = 0; i1 < compWidth[i]; i1++)
  104.             {
  105.                 af1[l][i1] = (af[j][k++] + af[j++][k--] + af[j][k++] + af[j--][k++] + (float)j1) / 4F;
  106.                 j1 ^= 3;
  107.             }
  108.             j += 2;
  109.             k = 0;
  110.         }
  111.         return af1;
  112.     }
  113.     String Comment;
  114.     public Image imageobj;
  115.     public int imageHeight;
  116.     public int imageWidth;
  117.     public int BlockWidth[];
  118.     public int BlockHeight[];
  119.     public int Precision;
  120.     public int NumberOfComponents;
  121.     public Object Components[];
  122.     public int CompID[] = {
  123.         1, 2, 3
  124.     };
  125.     public int HsampFactor[] = {
  126.         1, 1, 1
  127.     };
  128.     public int VsampFactor[] = {
  129.         1, 1, 1
  130.     };
  131.     public int QtableNumber[] = {
  132.         0, 1, 1
  133.     };
  134.     public int DCtableNumber[] = {
  135.         0, 1, 1
  136.     };
  137.     public int ACtableNumber[] = {
  138.         0, 1, 1
  139.     };
  140.     public boolean lastColumnIsDummy[];
  141.     public boolean lastRowIsDummy[];
  142.     public int Ss;
  143.     public int Se;
  144.     public int Ah;
  145.     public int Al;
  146.     public int compWidth[];
  147.     public int compHeight[];
  148.     public int MaxHsampFactor;
  149.     public int MaxVsampFactor;
  150. }