Tool um rotierte Bildausschnitte aus Bildstapeln zu schneiden
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. class Bounder {
  2. int state;
  3. float h;
  4. float angle, arcangle;
  5. float angle(PVector v1, PVector v2) {
  6. float a = atan2(v2.y, v2.x) - atan2(v1.y, v1.x);
  7. if (a < 0) a += TWO_PI;
  8. return a;
  9. }
  10. PVector p1, p2, p3, p4;
  11. void leftclick() {
  12. if (state < 3) state++;
  13. else state = 1;
  14. if (state == 1) {
  15. p1 = new PVector(mouseX, mouseY);
  16. loop();
  17. }
  18. if (state == 2) {
  19. p2 = new PVector(mouseX, mouseY);
  20. }
  21. if (state == 3) {
  22. h = -p2.dist(new PVector(mouseX, mouseY));
  23. noLoop();
  24. }
  25. }
  26. void rightclick(){
  27. reset();
  28. }
  29. void reset(){
  30. boolean redrawthis = (state == 3) ? true : false;
  31. state = 0;
  32. if(redrawthis) redraw();
  33. }
  34. void update() {
  35. if (state == 2) {
  36. h = -p2.dist(new PVector(mouseX, mouseY));
  37. }
  38. }
  39. void display() {
  40. if (state > 0) {
  41. fill(0);
  42. noStroke();
  43. circle(p1.x, p1.y, 5);
  44. }
  45. if (state == 1) {
  46. stroke(1);
  47. line(p1.x, p1.y, mouseX, mouseY);
  48. }
  49. if (state > 1) {
  50. fill(0);
  51. noStroke();
  52. circle(p2.x, p2.y, 5);
  53. fill(255, 100);
  54. stroke(1);
  55. pushMatrix();
  56. translate(p1.x, p1.y);
  57. rotate(angle(new PVector(0, width), PVector.sub(p2, p1)));
  58. rect(0, 0, h, p1.dist(p2));
  59. p3 = new PVector(screenX(h, 0), screenY(h, 0));
  60. p4 = new PVector(screenX(h, p1.dist(p2)), screenY(h, p1.dist(p2)));
  61. popMatrix();
  62. fill(0);
  63. noStroke();
  64. circle(p3.x, p3.y, 5);
  65. circle(p4.x, p4.y, 5);
  66. }
  67. }
  68. void compile(boolean Execute) {
  69. if (Execute) {
  70. state = 0;
  71. covers.add(new Cover(p1, p2, p4, p3));
  72. }
  73. PVector ptopmid = new PVector((p1.x + p2.x)/2, (p1.y + p2.y)/2);
  74. PVector pbotmid = new PVector((p3.x + p4.x)/2, (p3.y + p4.y)/2);
  75. /*
  76. links: p1 -> ptopmid -> pbotmid -> p3
  77. rechts: ptopmid -> p2 -> p4 -> pbotmid
  78. */
  79. int leftLeftTopX = (int)map(p1.x, 0, width, 0, images[imageNo].width);
  80. int leftLeftTopY = (int)map(p1.y, 0, height, 0, images[imageNo].height);
  81. int leftRightTopX = (int)map(ptopmid.x, 0, width, 0, images[imageNo].width);
  82. int leftRightTopY = (int)map(ptopmid.y, 0, height, 0, images[imageNo].height);
  83. int leftRightBotX = (int)map(pbotmid.x, 0, width, 0, images[imageNo].width);
  84. int leftRightBotY = (int)map(pbotmid.y, 0, height, 0, images[imageNo].height);
  85. int leftLeftBotX = (int)map(p3.x, 0, width, 0, images[imageNo].width);
  86. int leftLeftBotY = (int)map(p3.y, 0, height, 0, images[imageNo].height);
  87. int rightLeftTopX = leftRightTopX;
  88. int rightLeftTopY = leftRightTopY;
  89. int rightRightTopX = (int)map(p2.x, 0, width, 0, images[imageNo].width);
  90. int rightRightTopY = (int)map(p2.y, 0, height, 0, images[imageNo].height);
  91. int rightRightBotX = (int)map(p4.x, 0, width, 0, images[imageNo].width);
  92. int rightRightBotY = (int)map(p4.y, 0, height, 0, images[imageNo].height);
  93. int rightLeftBotX = leftRightBotX;
  94. int rightLeftBotY = leftRightBotY;
  95. //beispielcommands:
  96. //for f in ./*.jpg; do convert "$f" \( -clone 0 -fill black -colorize 100 -fill white -draw "polygon 3218,2414 4882,2414 4882,2621 3218,4771" \) -alpha off -compose copy_opacity -composite -trim +repage "$f"_left.jpg; done
  97. //for f in ./*.jpg; do convert "$f" \( -clone 0 -fill black -colorize 100 -fill white -draw "polygon 3218,2414 4882,2414 4882,2621 3218,4771" \) -alpha off -compose copy_opacity -composite -trim +repage "$f"_right.jpg; done
  98. String folderName = String.valueOf((int)random(100000000));
  99. String cmdleft = "for f in ./*.jpg; do convert \"$f\" \\( -clone 0 -fill black -colorize 100 -fill white -draw \"polygon " + leftLeftTopX + "," + leftLeftTopY + " " + leftRightTopX + "," + leftRightTopY + " " + leftRightBotX + "," + leftRightBotY + " " + leftLeftBotX + "," + leftLeftBotY + "\" \\) -alpha off -compose copy_opacity -composite -trim +repage " + folderName + "/\"$f\"_left.jpg; done";
  100. String cmdright = "for f in ./*.jpg; do convert \"$f\" \\( -clone 0 -fill black -colorize 100 -fill white -draw \"polygon " + rightLeftTopX + "," + rightLeftTopY + " " + rightRightTopX + "," + rightRightTopY + " " + rightRightBotX + "," + rightRightBotY + " " + rightLeftBotX + "," + rightLeftBotY + "\" \\) -alpha off -compose copy_opacity -composite -trim +repage " + folderName + "/\"$f\"_right.jpg; done";
  101. String cmdpdf = "convert " + folderName + "/*.jpg notizheft.pdf";
  102. println(cmdleft);
  103. println(cmdright);
  104. //execl("/bin/sh", "-c", "cd", (const char *)0);
  105. //exec("/bin/sh -c cd " + folderURI + " && " + cmdleft);
  106. //String[] runConvert = { "/bin/bash", "-c", "cd " + folderURI + " && mkdir " + folderName + " && " + cmdleft + " && " + cmdright + " && " + cmdpdf };
  107. String[] runConvert = { "/bin/bash", "-c", "cd " + folderURI + " && mkdir " + folderName + " && " + cmdleft + " && " + cmdright };
  108. if (Execute) exec(runConvert);
  109. //println(leftLeftTopX + "," + leftLeftTopY + " " + leftRightTopX + "," + leftRightTopY + " " + leftRightBotX + "," + leftRightBotY + " " + leftLeftBotX + "," + leftLeftBotY);
  110. //println(rightLeftTopX + "," + rightLeftTopY + " " + rightRightTopX + "," + rightRightTopY + " " + rightRightBotX + "," + rightRightBotY + " " + rightLeftBotX + "," + rightLeftBotY);
  111. /*
  112. println((int)map(p1.x, 0, width, 0, images[imageNo].width));
  113. println((int)map(p1.y, 0, height, 0, images[imageNo].height));
  114. println((int)map(p2.x, 0, width, 0, images[imageNo].width));
  115. println((int)map(p2.y, 0, height, 0, images[imageNo].height));
  116. println((int)map(p3.x, 0, width, 0, images[imageNo].width));
  117. println((int)map(p3.y, 0, height, 0, images[imageNo].height));
  118. println((int)map(p4.x, 0, width, 0, images[imageNo].width));
  119. println((int)map(p4.y, 0, height, 0, images[imageNo].height));*/
  120. }
  121. }