示例#1
0
文件: Haikdu.java 项目: cwvh/haikdu
  public static void main(String[] args) {
    try {
      // non-throwing message printer
      Kdu_sysout_message sysout = new Kdu_sysout_message(false);
      // exception-throwing message printer
      Kdu_sysout_message syserr = new Kdu_sysout_message(true);
      // non-throwing formatted printer
      Kdu_message_formatter formattedSysout = new Kdu_message_formatter(sysout);
      // throwing formatted printer
      Kdu_message_formatter formattedSyserr = new Kdu_message_formatter(syserr);

      Kdu_global.Kdu_customize_warnings(formattedSysout);
      Kdu_global.Kdu_customize_errors(formattedSyserr);
    } catch (KduException e) {
      System.err.printf("Exception during Kdu stream tie: %s\n", e.getMessage());
    }

    if (args.length != 1) {
      System.err.println("You must supply a filename (JP2, JPX or raw code-stream)");
      System.exit(0);
    }

    final String filename = args[0];

    SwingUtilities.invokeLater(
        new Runnable() {
          public void run() {
            Haikdu app = new Haikdu(filename);
          }
        });
  }
示例#2
0
文件: Haikdu.java 项目: cwvh/haikdu
  public Haikdu(String filename) {
    try {
      familySource.Open(filename);
      int success = wrappedSource.Open(familySource, true);
      if (success < 0) {
        familySource.Close();
        wrappedSource.Close();
        rawSource = new Kdu_simple_file_source(filename);
      }

      if (rawSource != null) compositor.Create(rawSource);
      else compositor.Create(wrappedSource);

      int numThreads = Kdu_global.Kdu_get_num_processors();
      threadEnv.Create();
      for (int thread = 1; thread < numThreads; thread++)
        if (!threadEnv.Add_thread()) numThreads = thread;
      compositor.Set_thread_env(threadEnv, null);

      compositor.Add_ilayer(0, new Kdu_dims(), new Kdu_dims());
      compositor.Set_scale(false, false, false, 0.050f);

      // Determine dimensions for the rendered result and start processing.
      compositor.Get_total_composition_dims(viewDims);
      viewSize = viewDims.Access_size();

      // Construct Swing frame
      imagePanel = new ImagePanel(viewSize);
      addWindowListener(
          new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
              System.exit(0);
            }
          });
      getContentPane().add("Center", imagePanel);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      pack();
      setTitle("Haikdu");
      setVisible(true);
      repaint();

      Kdu_coords displaySize = new Kdu_coords(imagePanel.getWidth(), imagePanel.getHeight());
      if (viewSize.Get_x() > displaySize.Get_x()) viewSize.Set_x(displaySize.Get_y());
      if (viewSize.Get_y() > displaySize.Get_y()) viewSize.Set_y(displaySize.Get_y());
      compositor.Set_buffer_surface(viewDims);
      compositorBuffer = compositor.Get_composition_buffer(viewDims);
    } catch (KduException e) {
      System.err.printf("Caught exception during Kdu object construction: %s\n", e.getMessage());
    }

    render();
  }
  private static Kdu_coords getReferenceExpansion(
      int reference_component, Kdu_channel_mapping channels, Kdu_codestream codestream)
      throws KduException {

    int c;
    Kdu_coords ref_subs = new Kdu_coords();
    Kdu_coords subs = new Kdu_coords();
    codestream.Get_subsampling(reference_component, ref_subs);
    Kdu_coords min_subs = new Kdu_coords();
    min_subs.Assign(ref_subs);

    for (c = 0; c < channels.Get_num_channels(); c++) {
      codestream.Get_subsampling(channels.Get_source_component(c), subs);
      if (subs.Get_x() < min_subs.Get_x()) min_subs.Set_x(subs.Get_x());
      if (subs.Get_y() < min_subs.Get_y()) min_subs.Set_y(subs.Get_y());
    }

    Kdu_coords expansion = new Kdu_coords();
    expansion.Set_x(ref_subs.Get_x() / min_subs.Get_x());
    expansion.Set_y(ref_subs.Get_y() / min_subs.Get_y());

    for (c = 0; c < channels.Get_num_channels(); c++) {
      codestream.Get_subsampling(channels.Get_source_component(c), subs);
      if ((((subs.Get_x() * expansion.Get_x()) % ref_subs.Get_x()) != 0)
          || (((subs.Get_y() * expansion.Get_y()) % ref_subs.Get_y()) != 0)) {
        Kdu_global.Kdu_print_error(
            "The supplied JP2 file contains color channels "
                + "whose sub-sampling factors are not integer "
                + "multiples of one another.");
        codestream.Apply_input_restrictions(
            0, 1, 0, 0, null, Kdu_global.KDU_WANT_OUTPUT_COMPONENTS);
        channels.Configure(codestream);
        expansion = new Kdu_coords(1, 1);
      }
    }
    return expansion;
  }