创建图像Hype Processing,processing.org

时间:2016-02-16 01:07:50

标签: java model-view-controller processing

我正在尝试使用http://www.hypeframework.org/和processing.org创建图片。我想创建图像并存储在一个文件夹中,然后使用java spark在Web上显示它。以下是我开始的步骤。

  1. 使用NetBeans创建maven项目
  2. 在maven中添加了processing.org,spark库
  3. 已下载的炒作处理jar添加到我的库中
  4. 我的问题是如何创建图像然后将其保存到webapp文件夹?我对炒作和处理绘图形状的东西比较新。以下是我放在一起的代码:

    现在主要的spark控制器中的cimg.setup()会抛出java.lang.NumberFormatException:对于输入字符串:“#BC7A38,#996A37,#968063,#AB977C,#997949,#AE9162,#DFC597,# CAB790“错误。

    我搜索谷歌,但找不到任何线索。我非常感谢任何有关如何完成任务的帮助。谢谢!

    //-- spark controller -
        public class Main {
              public static void main(String[] args) {
                get("/", new TemplateViewRoute() {
                   @Override
                    public ModelAndView handle(Request req, Response res) throws Exception {
                        HashMap model = new HashMap();
                       HypeProcessing cimg = new HypeProcessing();
                       cimg.setup();
                        model.put("template", "templates/form.vtl");
                        return new ModelAndView(model, "templates/layout.vtl");
                    }
                }, new VelocityTemplateEngine());
             }
       }
    
    
    //--- HypeProcessing class ----
      public class HypeProcessing extends PApplet
      {
        HDrawablePool pool;
        HColorPool colors;
    
      @Override
      public void setup()
      {
        int h = 300;
        int w = 300;
        //size(w, h);
        //H.init(this).background(Integer.parseInt("#202020"));
        //smooth();
    
    colors = new  HColorPool(Integer.parseInt("#BC7A38,#996A37,#968063,#AB977C,#997949,#AE9162,#DFC597,#CAB790"));
    
        pool = new HDrawablePool(121);
        pool.autoAddToStage()
        .add(new HShape("svg1.svg"))
        .add(new HShape("svg2.svg"))
        .add(new HShape("svg3.svg"))
        .add(new HShape("svg4.svg"))
        .add(new HShape("svg5.svg"))
        .add(new HShape("svg6.svg"))
    
        .layout(
            new HGridLayout()
            .startX(50)
            .startY(50)
            .spacing(50,50)
            .cols(11)
        )
    
                .onCreate(
            new HCallback() {
    
                                @Override
                public void run(Object obj) {
                    HShape d = (HShape) obj;
                    d
                        .enableStyle(false)
                        .strokeJoin(ROUND)
                        .strokeCap(ROUND)
                        .strokeWeight(1)
                        .stroke(Integer.parseInt("#000000"))
                        // .anchorAt(H.CENTER)
                        .rotate( (int)random(4) * 90 )
                        .size( 50 + ( (int)random(4) * 50 ) ) // 50, 100, 150, 200
                    ;
                    d.randomColors(colors.fillOnly());
                }
            }
        )
        .requestAll();
    saveImage(w,h); 
    noLoop();
    // ...
      }
    
      @Override
      public void draw()
      {
        //rect(10, 10, 80, 80);
          H.drawStage();
        // ...
      }
    
      public void saveImage(int width, int height)
      {
          //Helper c = new Helper();
          String p = "webapp/images/";
          String fn = p+"image_"+Helper.generateRandomNumber();
          PGraphics img = createGraphics(width, height);
          img.beginDraw();
          boolean use3D = false;
          float alpha = 1;
          H.stage().paintAll(img, use3D, alpha);
          img.endDraw();
          img.save(fn);
          }
    
       }
    

2 个答案:

答案 0 :(得分:1)

处理使用自定义color类型。您可以使用#ff00ff等网页表示法,并在引擎盖下将整数存储起来,这样您甚至可以执行以下操作:

int c = #ff00ff;

但是,像Integer.parseInt()这样的Java函数不知道如何处理Web表示法。 Java无法将"#ff00ff"之类的字符串映射到int值。这就是你收到错误的原因。

即使Java确实知道如何将网络表示法映射到int值,您也会在单个String内传递多个值,这没有多大意义。

但重点是,如果您使用的是Processing编辑器,则只能使用Web表示法。如果您使用的是Processing编辑器以外的其他内容,则必须使用color()函数。

HColorPool(color(0, 255, 0), color(255, 0, 255), ...);

答案 1 :(得分:0)

有翻译的java代码: -

java.awt.Color.decode( “FF00FF”)的getRGB();

我在JRubyArt中使用它有点模糊