⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 a.java

📁 二维QR条码项目的J2ME源代码。软件包括1.核心QR码编/解库
💻 JAVA
字号:
// Decompiled by DJ v3.9.9.91 Copyright 2005 Atanas Neshkov  Date: 12/5/2006 3:39:10 PM
// Home Page : http://members.fortunecity.com/neshkov/dj.html  - Check often for new version!
// Decompiler options: packimports(3) 

package jp.sourceforge.qrcode;

import java.util.Vector;
import javax.microedition.lcdui.Image;
import jp.sourceforge.qrcode.ecc.b;
import jp.sourceforge.qrcode.exception.c;
import jp.sourceforge.qrcode.exception.d;
import jp.sourceforge.qrcode.exception.f;
import jp.sourceforge.qrcode.exception.g;
import jp.sourceforge.qrcode.exception.h;

public final class a
{

    public a()
    {
        a = 1;
    }

    public a(int i)
    {
        a = 1;
        a = i;
    }

    public final String a(Image image)
        throws f, d
    {
        try
        {
            b = c(image);
        }
        catch(h _ex)
        {
            throw new f();
        }
        boolean aflag[] = a(b);
        b.a(aflag);
        String s;
        int i = (s = Integer.toString(b.e(), 2)).length();
        for(int j = 0; j < 3 - i; j++)
            s = "0" + s;

        b(b);
        int ai[] = d(b);
        boolean flag = false;
        int ai1[] = a(ai);
        boolean flag1 = false;
        String s1 = null;
        try
        {
            s1 = a(ai1, b.c());
        }
        catch(g _ex)
        {
            throw new f();
        }
        return s1;
    }

    private boolean[][] b(Image image)
    {
        int i = image.getWidth();
        int j = image.getHeight();
        int ai[] = new int[i * j];
        image.getRGB(ai, 0, i, 0, 0, i, j);
        int ai1[][] = new int[i][j];
        for(int l1 = 0; l1 < i; l1++)
        {
            for(int i2 = 0; i2 < j; i2++)
            {
                int k1;
                int k = (k1 = ai[i2 * i + l1]) >> 16 & 0xff;
                int l = k1 >> 8 & 0xff;
                int i1 = k1 & 0xff;
                int j1 = (299 * k + 587 * l + 114 * i1) / 1000;
                ai1[l1][i2] = j1;
            }

        }

        boolean aflag[][] = a(ai1);
        boolean aflag1[][];
        if(a > 1)
            return aflag1 = a(aflag, a);
        else
            return aflag;
    }

    private boolean[][] a(int ai[][])
    {
        int ai1[][];
        int i = (ai1 = b(ai)).length;
        int j = ai.length / i;
        int k = ai[0].length / i;
        boolean aflag[][] = new boolean[ai.length][ai[0].length];
        for(int l = 0; l < i; l++)
        {
            for(int i1 = 0; i1 < i; i1++)
            {
                for(int j1 = 0; j1 < k; j1++)
                {
                    for(int k1 = 0; k1 < j; k1++)
                        aflag[j * i1 + k1][k * l + j1] = ai[j * i1 + k1][k * l + j1] < ai1[i1][l];

                }

            }

        }

        return aflag;
    }

    private static int[][] b(int ai[][])
    {
        int i = ai.length / 4;
        int j = ai[0].length / 4;
        int ai1[][][] = new int[4][4][2];
        for(int l = 0; l < 4; l++)
        {
            for(int i1 = 0; i1 < 4; i1++)
            {
                ai1[i1][l][0] = 255;
                for(int k1 = 0; k1 < j; k1++)
                {
                    for(int i2 = 0; i2 < i; i2++)
                    {
                        int k;
                        if((k = ai[i * i1 + i2][j * l + k1]) < ai1[i1][l][0])
                            ai1[i1][l][0] = k;
                        if(k > ai1[i1][l][1])
                            ai1[i1][l][1] = k;
                    }

                }

            }

        }

        int ai2[][] = new int[4][4];
        for(int j1 = 0; j1 < 4; j1++)
        {
            for(int l1 = 0; l1 < 4; l1++)
                ai2[l1][j1] = (ai1[l1][j1][0] + ai1[l1][j1][1]) / 2;

        }

        return ai2;
    }

    private static boolean[][] a(boolean aflag[][], int i)
    {
        boolean aflag1[][] = new boolean[aflag.length * i][aflag[0].length * i];
        for(int j = 0; j < aflag[0].length; j++)
        {
label0:
            for(int k = 0; k < aflag.length; k++)
            {
                if(!aflag[k][j])
                    continue;
                int l = 0;
                do
                {
                    if(l >= i)
                        continue label0;
                    for(int i1 = 0; i1 < i; i1++)
                        aflag1[k * i + l][j * i + i1] = true;

                    l++;
                } while(true);
            }

        }

        return aflag1;
    }

    private jp.sourceforge.qrcode.data.a c(Image image)
        throws h, d
    {
        boolean aflag[][] = b(image);
        jp.sourceforge.qrcode.reader.b b1 = new jp.sourceforge.qrcode.reader.b();
        jp.sourceforge.qrcode.data.a a1 = null;
        try
        {
            a1 = b1.a(aflag);
        }
        catch(jp.sourceforge.qrcode.exception.b _ex)
        {
            throw new h();
        }
        catch(c _ex)
        {
            throw new h();
        }
        catch(jp.sourceforge.qrcode.exception.a _ex)
        {
            throw new h();
        }
        return a1;
    }

    private static boolean[] a(jp.sourceforge.qrcode.data.a a1)
    {
        boolean aflag[] = new boolean[15];
        for(int i = 0; i <= 5; i++)
            aflag[i] = a1.a(8, i);

        aflag[6] = a1.a(8, 7);
        aflag[7] = a1.a(8, 8);
        aflag[8] = a1.a(7, 8);
        for(int j = 9; j <= 14; j++)
            aflag[j] = a1.a(14 - j, 8);

        for(int k = 0; k <= 14; k++)
        {
            boolean flag;
            if((21522 >>> k & 1) == 1)
                flag = true;
            else
                flag = false;
            if(aflag[k] == flag)
                aflag[k] = false;
            else
                aflag[k] = true;
        }

        b b1;
        boolean aflag1[] = (b1 = new b(aflag)).a();
        boolean aflag2[] = new boolean[5];
        for(int l = 0; l < 5; l++)
            aflag2[l] = aflag1[10 + l];

        return aflag2;
    }

    private void b(jp.sourceforge.qrcode.data.a a1)
    {
        boolean aflag[][] = c(a1);
        int i = a1.f();
        for(int j = 0; j < i; j++)
        {
            for(int k = 0; k < i; k++)
                if(aflag[k][j])
                    a1.b(k, j);

        }

    }

    private static boolean[][] c(jp.sourceforge.qrcode.data.a a1)
    {
        int i = a1.e();
        int j = a1.f();
        int k = a1.g();
        boolean aflag[][] = new boolean[j][k];
        for(int l = 0; l < k; l++)
        {
            for(int i1 = 0; i1 < j; i1++)
                if(!a1.c(i1, l))
                    switch(i)
                    {
                    default:
                        break;

                    case 0: // '\0'
                        if((i1 + l) % 2 == 0)
                            aflag[i1][l] = true;
                        break;

                    case 1: // '\001'
                        if(l % 2 == 0)
                            aflag[i1][l] = true;
                        break;

                    case 2: // '\002'
                        if(i1 % 3 == 0)
                            aflag[i1][l] = true;
                        break;

                    case 3: // '\003'
                        if((i1 + l) % 3 == 0)
                            aflag[i1][l] = true;
                        break;

                    case 4: // '\004'
                        if((i1 / 3 + l / 2) % 2 == 0)
                            aflag[i1][l] = true;
                        break;

                    case 5: // '\005'
                        if((i1 * l) % 2 + (i1 * l) % 3 == 0)
                            aflag[i1][l] = true;
                        break;

                    case 6: // '\006'
                        if(((i1 * l) % 2 + (i1 * l) % 3) % 2 == 0)
                            aflag[i1][l] = true;
                        break;

                    case 7: // '\007'
                        if(((i1 * l) % 3 + (i1 + l) % 2) % 2 == 0)
                            aflag[i1][l] = true;
                        break;
                    }

        }

        return aflag;
    }

    private static int[] d(jp.sourceforge.qrcode.data.a a1)
    {
        int i = a1.f();
        int j = a1.g();
        int k = i - 1;
        int l = j - 1;
        Vector vector = new Vector();
        Vector vector1 = new Vector();
        int i1 = 0;
        int j1 = 7;
        int k1 = 0;
        boolean flag = true;
        do
        {
            vector.addElement(new Boolean(a1.a(k, l)));
            if(a1.a(k, l))
                i1 += 1 << j1;
            if(--j1 == -1)
            {
                vector1.addElement(new Integer(i1));
                j1 = 7;
                i1 = 0;
            }
            do
                if(flag)
                {
                    if((k + k1) % 2 == 0)
                        k--;
                    else
                    if(l > 0)
                    {
                        k++;
                        l--;
                    } else
                    {
                        if(--k == 6)
                        {
                            k--;
                            k1 = 1;
                        }
                        flag = false;
                    }
                } else
                if((k + k1) % 2 == 0)
                    k--;
                else
                if(l < j - 1)
                {
                    k++;
                    l++;
                } else
                {
                    if(--k == 6)
                    {
                        k--;
                        k1 = 1;
                    }
                    flag = true;
                }
            while(a1.c(k, l));
        } while(k != -1);
        int ai[] = new int[vector1.size()];
        for(int l1 = 0; l1 < vector1.size(); l1++)
        {
            Integer integer = (Integer)vector1.elementAt(l1);
            ai[l1] = integer.intValue();
        }

        return ai;
    }

    private int[] a(int ai[])
    {
        int i;
        int ai1[] = new int[i = b.d()];
        int j = b.a();
        int k = b.b();
        int l = j / k;
        if(k == 1)
        {
            jp.sourceforge.qrcode.ecc.a a1;
            (a1 = new jp.sourceforge.qrcode.ecc.a(ai)).a();
            return ai;
        }
        int i1;
        if((i1 = i % k) == 0)
        {
            int j1 = i / k;
            int ai2[][] = new int[k][j1];
            for(int i2 = 0; i2 < k; i2++)
            {
                for(int l2 = 0; l2 < j1; l2++)
                    ai2[i2][l2] = ai[l2 * k + i2];

                jp.sourceforge.qrcode.ecc.a a2;
                (a2 = new jp.sourceforge.qrcode.ecc.a(ai2[i2])).a();
            }

            int j2 = 0;
            for(int i3 = 0; i3 < k; i3++)
            {
                for(int j3 = 0; j3 < j1 - l; j3++)
                    ai1[j2++] = ai2[i3][j3];

            }

        } else
        {
            int k1 = i / k;
            int l1 = i / k + 1;
            int k2;
            int ai3[][] = new int[k2 = k - i1][k1];
            int ai4[][] = new int[i1][l1];
            for(int k3 = 0; k3 < k; k3++)
            {
                if(k3 < k2)
                {
                    int i4 = 0;
                    for(int l4 = 0; l4 < k1; l4++)
                    {
                        if(l4 == k1 - l)
                            i4 = i1;
                        ai3[k3][l4] = ai[l4 * k + k3 + i4];
                    }

                    jp.sourceforge.qrcode.ecc.a a3;
                    (a3 = new jp.sourceforge.qrcode.ecc.a(ai3[k3])).a();
                    continue;
                }
                int j4 = 0;
                for(int i5 = 0; i5 < l1; i5++)
                {
                    if(i5 == k1 - l)
                        j4 = k2;
                    ai4[k3 - k2][i5] = ai[(i5 * k + k3) - j4];
                }

                jp.sourceforge.qrcode.ecc.a a4;
                (a4 = new jp.sourceforge.qrcode.ecc.a(ai4[k3 - k2])).a();
            }

            int l3 = 0;
            for(int k4 = 0; k4 < k; k4++)
            {
                if(k4 < k2)
                {
                    for(int j5 = 0; j5 < k1 - l; j5++)
                        ai1[l3++] = ai3[k4][j5];

                    continue;
                }
                for(int k5 = 0; k5 < l1 - l; k5++)
                    ai1[l3++] = ai4[k4 - k2][k5];

            }

        }
        return ai1;
    }

    private static String a(int ai[], int i)
        throws g
    {
        String s = null;
        jp.sourceforge.qrcode.reader.a a1 = new jp.sourceforge.qrcode.reader.a(ai, i);
        try
        {
            s = a1.a();
        }
        catch(ArrayIndexOutOfBoundsException _ex)
        {
            throw new g();
        }
        return s;
    }

    int a;
    jp.sourceforge.qrcode.data.a b;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -