polycasso-commit Mailing List for polycasso (Page 10)
Brought to you by:
dbrosius
You can subscribe to this list here.
| 2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(115) |
Dec
(92) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2010 |
Jan
(6) |
Feb
|
Mar
|
Apr
|
May
|
Jun
(3) |
Jul
|
Aug
|
Sep
(1) |
Oct
(4) |
Nov
|
Dec
|
| 2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(13) |
Aug
(3) |
Sep
|
Oct
|
Nov
|
Dec
|
| 2012 |
Jan
(2) |
Feb
|
Mar
(2) |
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: <dbr...@us...> - 2009-11-23 23:18:32
|
Revision: 25
http://polycasso.svn.sourceforge.net/polycasso/?rev=25&view=rev
Author: dbrosius
Date: 2009-11-23 23:18:25 +0000 (Mon, 23 Nov 2009)
Log Message:
-----------
give props
Modified Paths:
--------------
trunk/polycasso/htdocs/index.html
Modified: trunk/polycasso/htdocs/index.html
===================================================================
--- trunk/polycasso/htdocs/index.html 2009-11-23 22:50:38 UTC (rev 24)
+++ trunk/polycasso/htdocs/index.html 2009-11-23 23:18:25 UTC (rev 25)
@@ -19,7 +19,8 @@
<p>Thanks for your interest in Polycasso.</p>
<p>Polycasso is a webstart application that attempts to create cubism style artwork through the layering of transparent polygons via a training
- feedback loop. Produces increasingly realistic work though hill climbing.</p>
+ feedback loop. Produces increasingly realistic work though hill climbing. This application was inspired by work
+ done by Roger Alsing.</p>
<p>Launch the application, choose 'Start Generating Image', and let it sit for several hours, even a day.
Good artwork takes time! -- and so does this.</p>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-11-23 22:50:44
|
Revision: 24
http://polycasso.svn.sourceforge.net/polycasso/?rev=24&view=rev
Author: dbrosius
Date: 2009-11-23 22:50:38 +0000 (Mon, 23 Nov 2009)
Log Message:
-----------
add analytic tracking code
Modified Paths:
--------------
trunk/polycasso/htdocs/index.html
Modified: trunk/polycasso/htdocs/index.html
===================================================================
--- trunk/polycasso/htdocs/index.html 2009-11-23 22:33:42 UTC (rev 23)
+++ trunk/polycasso/htdocs/index.html 2009-11-23 22:50:38 UTC (rev 24)
@@ -29,9 +29,10 @@
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
- var pageTracker = _gat._getTracker("UA-249537-2");
- pageTracker._initData();
- pageTracker._trackPageview();
+ try {
+ var pageTracker = _gat._getTracker("UA-249537-9");
+ pageTracker._trackPageview();
+ } catch(err) {}
</script>
</body>
</html>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-11-23 22:33:58
|
Revision: 23
http://polycasso.svn.sourceforge.net/polycasso/?rev=23&view=rev
Author: dbrosius
Date: 2009-11-23 22:33:42 +0000 (Mon, 23 Nov 2009)
Log Message:
-----------
more doc
Modified Paths:
--------------
trunk/polycasso/htdocs/index.html
Modified: trunk/polycasso/htdocs/index.html
===================================================================
--- trunk/polycasso/htdocs/index.html 2009-11-23 22:21:06 UTC (rev 22)
+++ trunk/polycasso/htdocs/index.html 2009-11-23 22:33:42 UTC (rev 23)
@@ -20,6 +20,9 @@
<p>Polycasso is a webstart application that attempts to create cubism style artwork through the layering of transparent polygons via a training
feedback loop. Produces increasingly realistic work though hill climbing.</p>
+
+ <p>Launch the application, choose 'Start Generating Image', and let it sit for several hours, even a day.
+ Good artwork takes time! -- and so does this.</p>
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-11-23 22:21:21
|
Revision: 22
http://polycasso.svn.sourceforge.net/polycasso/?rev=22&view=rev
Author: dbrosius
Date: 2009-11-23 22:21:06 +0000 (Mon, 23 Nov 2009)
Log Message:
-----------
don't be obnoxious with original window size
Modified Paths:
--------------
trunk/polycasso/src/com/mebigfatguy/polycasso/Polycasso.java
Modified: trunk/polycasso/src/com/mebigfatguy/polycasso/Polycasso.java
===================================================================
--- trunk/polycasso/src/com/mebigfatguy/polycasso/Polycasso.java 2009-11-23 22:19:51 UTC (rev 21)
+++ trunk/polycasso/src/com/mebigfatguy/polycasso/Polycasso.java 2009-11-23 22:21:06 UTC (rev 22)
@@ -19,16 +19,15 @@
package com.mebigfatguy.polycasso;
import java.awt.Dimension;
-import java.awt.Toolkit;
public class Polycasso {
- public static final boolean DEBUG = false;
+ public static final boolean DEBUG = true;
public static void main(String[] args) {
PainterFrame pf = new PainterFrame();
- Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
+ Dimension dim = new Dimension(500, 300);
pf.setPreferredSize(dim);
pf.setSize(dim);
pf.setLocationRelativeTo(null);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-11-23 22:20:01
|
Revision: 21
http://polycasso.svn.sourceforge.net/polycasso/?rev=21&view=rev
Author: dbrosius
Date: 2009-11-23 22:19:51 +0000 (Mon, 23 Nov 2009)
Log Message:
-----------
put debug code under direction of a global flag
Modified Paths:
--------------
trunk/polycasso/src/com/mebigfatguy/polycasso/ImageGenerator.java
trunk/polycasso/src/com/mebigfatguy/polycasso/PainterFrame.java
trunk/polycasso/src/com/mebigfatguy/polycasso/PainterPanel.java
trunk/polycasso/src/com/mebigfatguy/polycasso/Polycasso.java
Modified: trunk/polycasso/src/com/mebigfatguy/polycasso/ImageGenerator.java
===================================================================
--- trunk/polycasso/src/com/mebigfatguy/polycasso/ImageGenerator.java 2009-11-23 21:47:03 UTC (rev 20)
+++ trunk/polycasso/src/com/mebigfatguy/polycasso/ImageGenerator.java 2009-11-23 22:19:51 UTC (rev 21)
@@ -126,18 +126,21 @@
double delta = calculateDelta(image, targetImage);
- //String message = null;
+ String message = null;
synchronized(lock) {
attempt++;
if (delta < bestScore) {
bestData = data;
bestScore = delta;
- //message = "Attempt: " + attempt + " BestScore: " + bestScore + " type: " + type.name();
+ if (Polycasso.DEBUG)
+ message = "Attempt: " + attempt + " BestScore: " + bestScore + " type: " + type.name();
fireImageGenerated(image);
}
}
- //if (message != null)
- // System.out.println(message);
+ if (Polycasso.DEBUG) {
+ if (message != null)
+ System.out.println(message);
+ }
}
} catch (Exception e) {
e.printStackTrace();
Modified: trunk/polycasso/src/com/mebigfatguy/polycasso/PainterFrame.java
===================================================================
--- trunk/polycasso/src/com/mebigfatguy/polycasso/PainterFrame.java 2009-11-23 21:47:03 UTC (rev 20)
+++ trunk/polycasso/src/com/mebigfatguy/polycasso/PainterFrame.java 2009-11-23 22:19:51 UTC (rev 21)
@@ -92,7 +92,10 @@
Image targetImage = RandomImageFinder.findImage();
panel.setTarget(targetImage);
Dimension size = new Dimension(targetImage.getWidth(PainterFrame.this), targetImage.getHeight(PainterFrame.this));
- setSize(size);
+ if (Polycasso.DEBUG){
+ Dimension wSize = new Dimension(size.width, size.height * 2);
+ setSize(wSize);
+ }
generator = new ImageGenerator(targetImage, size);
generator.addImageGeneratedListener(PainterFrame.this);
generator.startGenerating();
Modified: trunk/polycasso/src/com/mebigfatguy/polycasso/PainterPanel.java
===================================================================
--- trunk/polycasso/src/com/mebigfatguy/polycasso/PainterPanel.java 2009-11-23 21:47:03 UTC (rev 20)
+++ trunk/polycasso/src/com/mebigfatguy/polycasso/PainterPanel.java 2009-11-23 22:19:51 UTC (rev 21)
@@ -51,8 +51,10 @@
synchronized(lock) {
if (bestImage != null)
g.drawImage(bestImage, 0, 0, bestImage.getWidth(this), bestImage.getHeight(this), Color.WHITE, this);
-// if (targetImage != null)
-// g.drawImage(targetImage, 0, targetImage.getHeight(this), targetImage.getWidth(this), targetImage.getHeight(this), Color.WHITE, this);
+ if (Polycasso.DEBUG) {
+ if (targetImage != null)
+ g.drawImage(targetImage, 0, targetImage.getHeight(this), targetImage.getWidth(this), targetImage.getHeight(this), Color.WHITE, this);
+ }
}
}
}
Modified: trunk/polycasso/src/com/mebigfatguy/polycasso/Polycasso.java
===================================================================
--- trunk/polycasso/src/com/mebigfatguy/polycasso/Polycasso.java 2009-11-23 21:47:03 UTC (rev 20)
+++ trunk/polycasso/src/com/mebigfatguy/polycasso/Polycasso.java 2009-11-23 22:19:51 UTC (rev 21)
@@ -23,6 +23,8 @@
public class Polycasso {
+ public static final boolean DEBUG = false;
+
public static void main(String[] args) {
PainterFrame pf = new PainterFrame();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-11-23 21:47:16
|
Revision: 20
http://polycasso.svn.sourceforge.net/polycasso/?rev=20&view=rev
Author: dbrosius
Date: 2009-11-23 21:47:03 +0000 (Mon, 23 Nov 2009)
Log Message:
-----------
Modified Paths:
--------------
trunk/polycasso/htdocs/polycasso.png
Modified: trunk/polycasso/htdocs/polycasso.png
===================================================================
(Binary files differ)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-11-23 21:41:54
|
Revision: 19
http://polycasso.svn.sourceforge.net/polycasso/?rev=19&view=rev
Author: dbrosius
Date: 2009-11-23 21:41:47 +0000 (Mon, 23 Nov 2009)
Log Message:
-----------
polycasso image
Added Paths:
-----------
trunk/polycasso/htdocs/polycasso.png
Added: trunk/polycasso/htdocs/polycasso.png
===================================================================
(Binary files differ)
Property changes on: trunk/polycasso/htdocs/polycasso.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-11-23 17:13:01
|
Revision: 18
http://polycasso.svn.sourceforge.net/polycasso/?rev=18&view=rev
Author: dbrosius
Date: 2009-11-23 17:12:48 +0000 (Mon, 23 Nov 2009)
Log Message:
-----------
engrish
Modified Paths:
--------------
trunk/polycasso/htdocs/index.html
Modified: trunk/polycasso/htdocs/index.html
===================================================================
--- trunk/polycasso/htdocs/index.html 2009-11-23 17:11:37 UTC (rev 17)
+++ trunk/polycasso/htdocs/index.html 2009-11-23 17:12:48 UTC (rev 18)
@@ -16,9 +16,9 @@
<a href="jnlp/polycasso.jnlp">Web Start</a>
<hr/>
- <p>Thanks for your interest in Pacasso.</p>
+ <p>Thanks for your interest in Polycasso.</p>
- <p>A webstart application that attempts to create cubism style artwork through the layering of transparent polygons via a training
+ <p>Polycasso is a webstart application that attempts to create cubism style artwork through the layering of transparent polygons via a training
feedback loop. Produces increasingly realistic work though hill climbing.</p>
</div>
<script type="text/javascript">
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-11-23 17:11:44
|
Revision: 17
http://polycasso.svn.sourceforge.net/polycasso/?rev=17&view=rev
Author: dbrosius
Date: 2009-11-23 17:11:37 +0000 (Mon, 23 Nov 2009)
Log Message:
-----------
fix copyright date
Modified Paths:
--------------
trunk/polycasso/build.xml
Modified: trunk/polycasso/build.xml
===================================================================
--- trunk/polycasso/build.xml 2009-11-23 17:07:14 UTC (rev 16)
+++ trunk/polycasso/build.xml 2009-11-23 17:11:37 UTC (rev 17)
@@ -122,7 +122,7 @@
destdir="${javadoc.dir}"
windowtitle="polycasso api">
<doctitle><![CDATA[<h1>polycasso javadoc</h1>]]></doctitle>
- <bottom><![CDATA[<i>Copyright © 2008-2009 MeBigFatGuy.com. All Rights Reserved.</i>]]></bottom>
+ <bottom><![CDATA[<i>Copyright © 2009 MeBigFatGuy.com. All Rights Reserved.</i>]]></bottom>
</javadoc>
</target>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-11-23 17:07:25
|
Revision: 16
http://polycasso.svn.sourceforge.net/polycasso/?rev=16&view=rev
Author: dbrosius
Date: 2009-11-23 17:07:14 +0000 (Mon, 23 Nov 2009)
Log Message:
-----------
web site base page
Added Paths:
-----------
trunk/polycasso/htdocs/index.html
Added: trunk/polycasso/htdocs/index.html
===================================================================
--- trunk/polycasso/htdocs/index.html (rev 0)
+++ trunk/polycasso/htdocs/index.html 2009-11-23 17:07:14 UTC (rev 16)
@@ -0,0 +1,34 @@
+<html>
+ <head>
+ <title>Polycasso - A Cubism Artwork Generation Tool</title>
+ <meta name="Keywords" content="polygon cubism image generation">
+ </head>
+ <body background>
+ <div style="position:absolute;top:0;left:0;width:256;height:65535;z-index:1;background-image:url(blend.jpg);">
+ </div>
+ <div style="position:absolute;top:20;left:20;z-index:3;">
+ <h1><img style="position:relative;top:10;" src="polycasso.png"/> Polycasso</h1>
+ <hr/>
+ <a href="http://www.sourceforge.net/projects/polycasso">Project Page</a>
+ <img src="vbar.gif" height="12"/>
+ <a href="javadoc/index.html">JavaDoc</a>
+ <img src="vbar.gif" height="12"/>
+ <a href="jnlp/polycasso.jnlp">Web Start</a>
+ <hr/>
+
+ <p>Thanks for your interest in Pacasso.</p>
+
+ <p>A webstart application that attempts to create cubism style artwork through the layering of transparent polygons via a training
+ feedback loop. Produces increasingly realistic work though hill climbing.</p>
+ </div>
+ <script type="text/javascript">
+ var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+ document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+ </script>
+ <script type="text/javascript">
+ var pageTracker = _gat._getTracker("UA-249537-2");
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ </script>
+ </body>
+</html>
Property changes on: trunk/polycasso/htdocs/index.html
___________________________________________________________________
Added: svn:mime-type
+ text/html
Added: svn:eol-style
+ native
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-11-23 17:05:44
|
Revision: 15
http://polycasso.svn.sourceforge.net/polycasso/?rev=15&view=rev
Author: dbrosius
Date: 2009-11-23 17:05:26 +0000 (Mon, 23 Nov 2009)
Log Message:
-----------
initial checkin
Added Paths:
-----------
trunk/polycasso/htdocs/blend.jpg
trunk/polycasso/htdocs/vbar.gif
Added: trunk/polycasso/htdocs/blend.jpg
===================================================================
(Binary files differ)
Property changes on: trunk/polycasso/htdocs/blend.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/polycasso/htdocs/vbar.gif
===================================================================
(Binary files differ)
Property changes on: trunk/polycasso/htdocs/vbar.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-11-23 15:56:09
|
Revision: 14
http://polycasso.svn.sourceforge.net/polycasso/?rev=14&view=rev
Author: dbrosius
Date: 2009-11-23 15:56:03 +0000 (Mon, 23 Nov 2009)
Log Message:
-----------
initial checkin
Added Paths:
-----------
trunk/polycasso/etc/polycasso.jnlp
Added: trunk/polycasso/etc/polycasso.jnlp
===================================================================
--- trunk/polycasso/etc/polycasso.jnlp (rev 0)
+++ trunk/polycasso/etc/polycasso.jnlp 2009-11-23 15:56:03 UTC (rev 14)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<jnlp
+ spec="1.0+"
+ codebase="http://polycasso.sourceforge.net/jnlp"
+ href="polycasso.jnlp">
+ <information>
+ <title>Polycasso</title>
+ <vendor>MeBigFatGuy.com</vendor>
+ <homepage href="http://polycasso.sourceforge.net"/>
+ <description>A Cubism Artwork generator</description>
+ <description kind="short">Inspired by work from Roger Alsing</description>
+ <offline-allowed/>
+ </information>
+ <security>
+ <all-permissions/>
+ </security>
+ <resources>
+ <j2se version="1.6+" initial-heap-size="800m" max-heap-size="1500m"/>
+ <jar href="polycasso-$VERSION.jar"/>
+ <jar href="commons-io-1.4.jar"/>
+ </resources>
+ <application-desc main-class="com.mebigfatguy.polycasso.Polycasso"/>
+</jnlp>
+
Property changes on: trunk/polycasso/etc/polycasso.jnlp
___________________________________________________________________
Added: svn:mime-type
+ text/xml
Added: svn:eol-style
+ native
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-11-23 15:48:09
|
Revision: 12
http://polycasso.svn.sourceforge.net/polycasso/?rev=12&view=rev
Author: dbrosius
Date: 2009-11-23 15:47:58 +0000 (Mon, 23 Nov 2009)
Log Message:
-----------
Added Paths:
-----------
trunk/polycasso/polycasso.store
Added: trunk/polycasso/polycasso.store
===================================================================
(Binary files differ)
Property changes on: trunk/polycasso/polycasso.store
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-11-23 15:41:37
|
Revision: 10
http://polycasso.svn.sourceforge.net/polycasso/?rev=10&view=rev
Author: dbrosius
Date: 2009-11-23 15:41:26 +0000 (Mon, 23 Nov 2009)
Log Message:
-----------
Added Paths:
-----------
trunk/polycasso/htdocs/jnlp/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-11-23 15:24:51
|
Revision: 6
http://polycasso.svn.sourceforge.net/polycasso/?rev=6&view=rev
Author: dbrosius
Date: 2009-11-23 15:24:44 +0000 (Mon, 23 Nov 2009)
Log Message:
-----------
initial checkin
Added Paths:
-----------
trunk/polycasso/.classpath
Added: trunk/polycasso/.classpath
===================================================================
--- trunk/polycasso/.classpath (rev 0)
+++ trunk/polycasso/.classpath 2009-11-23 15:24:44 UTC (rev 6)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="lib" path="lib/commons-io-1.4.jar"/>
+ <classpathentry kind="output" path="classes"/>
+</classpath>
Property changes on: trunk/polycasso/.classpath
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:eol-style
+ native
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-11-23 15:24:26
|
Revision: 5
http://polycasso.svn.sourceforge.net/polycasso/?rev=5&view=rev
Author: dbrosius
Date: 2009-11-23 15:24:19 +0000 (Mon, 23 Nov 2009)
Log Message:
-----------
initial checkin
Added Paths:
-----------
trunk/polycasso/.project
Added: trunk/polycasso/.project
===================================================================
--- trunk/polycasso/.project (rev 0)
+++ trunk/polycasso/.project 2009-11-23 15:24:19 UTC (rev 5)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>polycasso</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
Property changes on: trunk/polycasso/.project
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:eol-style
+ native
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-11-23 15:16:43
|
Revision: 3
http://polycasso.svn.sourceforge.net/polycasso/?rev=3&view=rev
Author: dbrosius
Date: 2009-11-23 15:16:33 +0000 (Mon, 23 Nov 2009)
Log Message:
-----------
initial checkin
Added Paths:
-----------
trunk/polycasso/src/
trunk/polycasso/src/com/
trunk/polycasso/src/com/mebigfatguy/
trunk/polycasso/src/com/mebigfatguy/polycasso/
trunk/polycasso/src/com/mebigfatguy/polycasso/ImageGeneratedEvent.java
trunk/polycasso/src/com/mebigfatguy/polycasso/ImageGeneratedListener.java
trunk/polycasso/src/com/mebigfatguy/polycasso/ImageGenerator.java
trunk/polycasso/src/com/mebigfatguy/polycasso/ImprovementType.java
trunk/polycasso/src/com/mebigfatguy/polycasso/PainterFrame.java
trunk/polycasso/src/com/mebigfatguy/polycasso/PainterPanel.java
trunk/polycasso/src/com/mebigfatguy/polycasso/Polycasso.java
trunk/polycasso/src/com/mebigfatguy/polycasso/PolycassoBundle.java
trunk/polycasso/src/com/mebigfatguy/polycasso/PolygonData.java
trunk/polycasso/src/com/mebigfatguy/polycasso/RandomImageFinder.java
trunk/polycasso/src/com/mebigfatguy/polycasso/resource.properties
Added: trunk/polycasso/src/com/mebigfatguy/polycasso/ImageGeneratedEvent.java
===================================================================
--- trunk/polycasso/src/com/mebigfatguy/polycasso/ImageGeneratedEvent.java (rev 0)
+++ trunk/polycasso/src/com/mebigfatguy/polycasso/ImageGeneratedEvent.java 2009-11-23 15:16:33 UTC (rev 3)
@@ -0,0 +1,19 @@
+package com.mebigfatguy.polycasso;
+
+import java.awt.Image;
+import java.util.EventObject;
+
+public class ImageGeneratedEvent extends EventObject {
+
+ private static final long serialVersionUID = 1478846574394938989L;
+ private Image bestImage;
+
+ public ImageGeneratedEvent(Object source, Image image) {
+ super(source);
+ bestImage = image;
+ }
+
+ public Image getImage() {
+ return bestImage;
+ }
+}
Property changes on: trunk/polycasso/src/com/mebigfatguy/polycasso/ImageGeneratedEvent.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:eol-style
+ native
Added: trunk/polycasso/src/com/mebigfatguy/polycasso/ImageGeneratedListener.java
===================================================================
--- trunk/polycasso/src/com/mebigfatguy/polycasso/ImageGeneratedListener.java (rev 0)
+++ trunk/polycasso/src/com/mebigfatguy/polycasso/ImageGeneratedListener.java 2009-11-23 15:16:33 UTC (rev 3)
@@ -0,0 +1,6 @@
+package com.mebigfatguy.polycasso;
+
+public interface ImageGeneratedListener {
+
+ public void imageGenerated(ImageGeneratedEvent event);
+}
Property changes on: trunk/polycasso/src/com/mebigfatguy/polycasso/ImageGeneratedListener.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:eol-style
+ native
Added: trunk/polycasso/src/com/mebigfatguy/polycasso/ImageGenerator.java
===================================================================
--- trunk/polycasso/src/com/mebigfatguy/polycasso/ImageGenerator.java (rev 0)
+++ trunk/polycasso/src/com/mebigfatguy/polycasso/ImageGenerator.java 2009-11-23 15:16:33 UTC (rev 3)
@@ -0,0 +1,164 @@
+package com.mebigfatguy.polycasso;
+
+import java.awt.Color;
+import java.awt.Composite;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+import java.awt.image.DataBufferByte;
+import java.awt.image.WritableRaster;
+import java.util.HashSet;
+import java.util.Set;
+
+public class ImageGenerator implements Runnable {
+ private static final int NUM_THREADS = 10;
+
+
+ private static int attempt = 0;
+ private Set<ImageGeneratedListener> listeners = new HashSet<ImageGeneratedListener>();
+ private PolygonData[] bestData;
+ private double bestScore = Double.MAX_VALUE;
+ private BufferedImage targetImage;
+ private Dimension imageSize;
+ private Thread[] t = null;
+ private Object lock = new Object();
+
+ public ImageGenerator(Image image, Dimension size) {
+ targetImage = new BufferedImage(size.width, size.height, BufferedImage.TYPE_4BYTE_ABGR);
+ Graphics g = targetImage.getGraphics();
+ g.drawImage(image, 0, 0, size.width, size.height, Color.WHITE, null);
+ imageSize = size;
+ bestData = PolygonData.randomPolys(size);
+ }
+
+ public void addImageGeneratedListener(ImageGeneratedListener listener) {
+ listeners.add(listener);
+ }
+
+ public void removeImageGeneratedListener(ImageGeneratedListener listener) {
+ listeners.remove(listener);
+ }
+
+ public void fireImageGenerated(Image image) {
+ ImageGeneratedEvent event = new ImageGeneratedEvent(this, image);
+ for (ImageGeneratedListener listener : listeners) {
+ listener.imageGenerated(event);
+ }
+
+ }
+
+ public void startGenerating() {
+ synchronized(lock) {
+ if (t == null) {
+ t = new Thread[NUM_THREADS];
+ for (int i = 0; i < NUM_THREADS; i++) {
+ t[i] = new Thread(this);
+ t[i].start();
+ }
+ }
+ }
+ }
+
+ public void stopGenerating() {
+ synchronized(lock) {
+ if (t != null) {
+ try {
+ for (int i = 0; i < NUM_THREADS; i++) {
+ t[i].interrupt();
+ }
+ for (int i = 0; i < NUM_THREADS; i++) {
+ t[i].join();
+ }
+ } catch (InterruptedException ie) {
+ } finally {
+ t = null;
+ }
+ }
+ }
+ }
+
+ public void run() {
+ try {
+ while (!Thread.interrupted()) {
+ PolygonData[] data;
+
+ synchronized(lock) {
+ data = bestData.clone();
+ }
+
+
+ ImprovementType type = PolygonData.improveRandomly(data, imageSize);
+
+ BufferedImage image = new BufferedImage(imageSize.width, imageSize.height, BufferedImage.TYPE_4BYTE_ABGR);
+ Graphics2D g2d = (Graphics2D)image.getGraphics();
+ g2d.setColor(Color.BLACK);
+ g2d.fillRect(0, 0, imageSize.width, imageSize.height);
+ Color saveColor = g2d.getColor();
+ Composite saveComposite = g2d.getComposite();
+ try {
+ for (PolygonData pd : data) {
+ pd.draw(g2d);
+ }
+ } finally {
+ g2d.setColor(saveColor);
+ g2d.setComposite(saveComposite);
+ }
+
+ double delta = calculateDelta(image, targetImage);
+
+ //String message = null;
+ synchronized(lock) {
+ attempt++;
+ if (delta < bestScore) {
+ bestData = data;
+ bestScore = delta;
+ //message = "Attempt: " + attempt + " BestScore: " + bestScore + " type: " + type.name();
+ fireImageGenerated(image);
+ }
+ }
+ //if (message != null)
+ // System.out.println(message);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ private double calculateDelta(BufferedImage image1, BufferedImage image2) {
+ WritableRaster raster1 = image1.getRaster();
+ WritableRaster raster2 = image2.getRaster();
+
+ DataBufferByte db1 = (DataBufferByte)raster1.getDataBuffer();
+ DataBufferByte db2 = (DataBufferByte)raster2.getDataBuffer();
+
+ byte[] buffer1 = db1.getData();
+ byte[] buffer2 = db2.getData();
+
+ int size = db1.getSize();
+ double error = 0.0;
+
+ for (int i = 0; i < size; i+=4) {
+ int blue1 = buffer1[i+1] & 0x0FF;
+ int blue2 = buffer2[i+1] & 0x0FF;
+ double blueError = blue1 - blue2;
+ blueError *= blueError;
+
+ int green1 = buffer1[i+2] & 0x0FF;
+ int green2 = buffer2[i+2] & 0x0FF;
+ double greenError = green1 - green2;
+ greenError *= greenError;
+
+ int red1 = buffer1[i+3] & 0x0FF;
+ int red2 = buffer2[i+3] & 0x0FF;
+ double redError = red1 - red2;
+ redError *= redError;
+
+ error += redError + greenError + blueError;
+ }
+
+ return error;
+ }
+
+}
Property changes on: trunk/polycasso/src/com/mebigfatguy/polycasso/ImageGenerator.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:eol-style
+ native
Added: trunk/polycasso/src/com/mebigfatguy/polycasso/ImprovementType.java
===================================================================
--- trunk/polycasso/src/com/mebigfatguy/polycasso/ImprovementType.java (rev 0)
+++ trunk/polycasso/src/com/mebigfatguy/polycasso/ImprovementType.java 2009-11-23 15:16:33 UTC (rev 3)
@@ -0,0 +1,19 @@
+package com.mebigfatguy.polycasso;
+
+
+public enum ImprovementType {
+ AddPoint,
+ RemovePoint,
+ MovePoint,
+ ReorderPoly,
+ ShrinkPoly,
+ EnlargePoly,
+ ChangeColor,
+ ChangeAlpha,
+ CompleteChange;
+
+ public static ImprovementType getRandomImprovement() {
+ ImprovementType[] types = ImprovementType.values();
+ return types[(int)((int)(Math.random() * types.length))];
+ }
+}
Property changes on: trunk/polycasso/src/com/mebigfatguy/polycasso/ImprovementType.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:eol-style
+ native
Added: trunk/polycasso/src/com/mebigfatguy/polycasso/PainterFrame.java
===================================================================
--- trunk/polycasso/src/com/mebigfatguy/polycasso/PainterFrame.java (rev 0)
+++ trunk/polycasso/src/com/mebigfatguy/polycasso/PainterFrame.java 2009-11-23 15:16:33 UTC (rev 3)
@@ -0,0 +1,100 @@
+package com.mebigfatguy.polycasso;
+
+import java.awt.BorderLayout;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Image;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.IOException;
+
+import javax.swing.JFrame;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+
+public class PainterFrame extends JFrame implements ImageGeneratedListener {
+
+ private static final long serialVersionUID = 7729602294481171194L;
+ private PainterPanel panel;
+ private JMenuItem paintImage;
+ private JMenuItem quitItem;
+ ImageGenerator generator;
+
+ public PainterFrame() {
+ setTitle(PolycassoBundle.getString(PolycassoBundle.Key.Title));
+ initComponents();
+ initMenus();
+ initListeners();
+ pack();
+ generator = null;
+ }
+
+ private void initComponents() {
+
+ Container cp = getContentPane();
+ cp.setLayout(new BorderLayout(4, 4));
+ panel = new PainterPanel();
+ cp.add(panel, BorderLayout.CENTER);
+
+ }
+
+ private void initMenus() {
+ JMenuBar mb = new JMenuBar();
+ JMenu fileMenu = new JMenu(PolycassoBundle.getString(PolycassoBundle.Key.File));
+ paintImage = new JMenuItem(PolycassoBundle.getString(PolycassoBundle.Key.PaintImage));
+ fileMenu.add(paintImage);
+ quitItem = new JMenuItem(PolycassoBundle.getString(PolycassoBundle.Key.Quit));
+ fileMenu.add(quitItem);
+ mb.add(fileMenu);
+
+ setJMenuBar(mb);
+ }
+
+ private void initListeners() {
+
+ addWindowListener(new WindowAdapter() {
+ @Override
+ public void windowClosing(WindowEvent we) {
+ dispose();
+ System.exit(0);
+ }
+ });
+
+ paintImage.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent ae) {
+ try {
+ if (generator != null)
+ generator.stopGenerating();
+
+ Image targetImage = RandomImageFinder.findImage();
+ panel.setTarget(targetImage);
+ Dimension size = new Dimension(targetImage.getWidth(PainterFrame.this), targetImage.getHeight(PainterFrame.this));
+ setSize(size);
+ generator = new ImageGenerator(targetImage, size);
+ generator.addImageGeneratedListener(PainterFrame.this);
+ generator.startGenerating();
+
+ } catch (IOException ioe) {
+ JOptionPane.showMessageDialog(null, ioe.getMessage());
+ }
+ }
+ });
+
+ quitItem.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent ae) {
+ dispose();
+ System.exit(0);
+ }
+ });
+ }
+
+ public void imageGenerated(ImageGeneratedEvent event) {
+ panel.setImage(event.getImage());
+ }
+}
Property changes on: trunk/polycasso/src/com/mebigfatguy/polycasso/PainterFrame.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:eol-style
+ native
Added: trunk/polycasso/src/com/mebigfatguy/polycasso/PainterPanel.java
===================================================================
--- trunk/polycasso/src/com/mebigfatguy/polycasso/PainterPanel.java (rev 0)
+++ trunk/polycasso/src/com/mebigfatguy/polycasso/PainterPanel.java 2009-11-23 15:16:33 UTC (rev 3)
@@ -0,0 +1,40 @@
+package com.mebigfatguy.polycasso;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Image;
+
+import javax.swing.JPanel;
+
+public class PainterPanel extends JPanel {
+
+ private static final long serialVersionUID = -4005448126783525299L;
+ private Object lock = new Object();
+ private Image targetImage;
+ private Image bestImage;
+
+ public void setTarget(Image image) {
+ synchronized(lock) {
+ targetImage = image;
+ setSize(targetImage.getWidth(PainterPanel.this), targetImage.getHeight(PainterPanel.this));
+ }
+ }
+
+ public void setImage(Image image) {
+ synchronized(lock) {
+ bestImage = image;
+ }
+ invalidate();
+ repaint();
+ }
+
+ public void paintComponent(Graphics g) {
+ super.paintComponent(g);
+ synchronized(lock) {
+ if (bestImage != null)
+ g.drawImage(bestImage, 0, 0, bestImage.getWidth(this), bestImage.getHeight(this), Color.WHITE, this);
+// if (targetImage != null)
+// g.drawImage(targetImage, 0, targetImage.getHeight(this), targetImage.getWidth(this), targetImage.getHeight(this), Color.WHITE, this);
+ }
+ }
+}
Property changes on: trunk/polycasso/src/com/mebigfatguy/polycasso/PainterPanel.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:eol-style
+ native
Added: trunk/polycasso/src/com/mebigfatguy/polycasso/Polycasso.java
===================================================================
--- trunk/polycasso/src/com/mebigfatguy/polycasso/Polycasso.java (rev 0)
+++ trunk/polycasso/src/com/mebigfatguy/polycasso/Polycasso.java 2009-11-23 15:16:33 UTC (rev 3)
@@ -0,0 +1,17 @@
+package com.mebigfatguy.polycasso;
+
+import java.awt.Dimension;
+import java.awt.Toolkit;
+
+public class Polycasso {
+
+ public static void main(String[] args) {
+ PainterFrame pf = new PainterFrame();
+
+ Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
+ pf.setPreferredSize(dim);
+ pf.setSize(dim);
+ pf.setLocationRelativeTo(null);
+ pf.setVisible(true);
+ }
+}
Property changes on: trunk/polycasso/src/com/mebigfatguy/polycasso/Polycasso.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:eol-style
+ native
Added: trunk/polycasso/src/com/mebigfatguy/polycasso/PolycassoBundle.java
===================================================================
--- trunk/polycasso/src/com/mebigfatguy/polycasso/PolycassoBundle.java (rev 0)
+++ trunk/polycasso/src/com/mebigfatguy/polycasso/PolycassoBundle.java 2009-11-23 15:16:33 UTC (rev 3)
@@ -0,0 +1,33 @@
+package com.mebigfatguy.polycasso;
+
+import java.util.ResourceBundle;
+
+public class PolycassoBundle {
+
+ enum Key {
+ Title("pc.title"),
+ File("pc.file"),
+ PaintImage("pc.paintimage"),
+ Quit("pc.quit");
+
+ String id;
+
+ Key(String id) {
+ this.id = id;
+ }
+
+ public String id() {
+ return id;
+ }
+ };
+
+ private static ResourceBundle bundle = ResourceBundle.getBundle("com/mebigfatguy/polycasso/resource");
+
+ private PolycassoBundle() {
+
+ }
+
+ public static String getString(Key key) {
+ return bundle.getString(key.id());
+ }
+}
Property changes on: trunk/polycasso/src/com/mebigfatguy/polycasso/PolycassoBundle.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:eol-style
+ native
Added: trunk/polycasso/src/com/mebigfatguy/polycasso/PolygonData.java
===================================================================
--- trunk/polycasso/src/com/mebigfatguy/polycasso/PolygonData.java (rev 0)
+++ trunk/polycasso/src/com/mebigfatguy/polycasso/PolygonData.java 2009-11-23 15:16:33 UTC (rev 3)
@@ -0,0 +1,210 @@
+package com.mebigfatguy.polycasso;
+
+import java.awt.AlphaComposite;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.Polygon;
+import java.util.Random;
+
+public class PolygonData implements Cloneable {
+ public static final int NUM_POLYS = 50;
+ public static final int MAX_POINTS = 8;
+
+ private Color color;
+ private float alpha;
+ private Polygon polygon;
+
+ public PolygonData(Color c, float xpar, Polygon poly) {
+ color = c;
+ alpha = xpar;
+ polygon = poly;
+ }
+
+ public static PolygonData randomPoly(Dimension size) {
+ Random r = new Random();
+ Polygon polygon = new Polygon();
+ int numPoints = r.nextInt(MAX_POINTS - 3) + 3;
+
+ for (int i = 0; i < numPoints; i++) {
+ polygon.addPoint(r.nextInt(size.width), r.nextInt(size.height));
+ }
+
+ Color c = new Color(r.nextFloat(), r.nextFloat(), r.nextFloat());
+
+ return new PolygonData(c, r.nextFloat(), polygon);
+ }
+
+ public static PolygonData[] randomPolys(Dimension size) {
+ PolygonData[] data = new PolygonData[NUM_POLYS];
+
+ for (int i = 0; i < NUM_POLYS; i++) {
+ data[i] = randomPoly(size);
+ }
+
+ return data;
+ }
+
+ public Object clone() {
+ try {
+ PolygonData clone = (PolygonData)super.clone();
+ clone.color = new Color(color.getRed(), color.getGreen(), color.getBlue());
+ clone.polygon = new Polygon(polygon.xpoints, polygon.ypoints, polygon.npoints);
+
+ return clone;
+ } catch (CloneNotSupportedException cnse) {
+ return randomPoly(new Dimension(100, 100));
+ }
+ }
+
+ public static ImprovementType improveRandomly(PolygonData[] data, Dimension size) {
+ Random r = new Random();
+ int idx = r.nextInt(data.length);
+ PolygonData pd = data[idx] = (PolygonData)data[idx].clone();
+
+ ImprovementType type = ImprovementType.getRandomImprovement();
+ switch (type) {
+ case AddPoint: {
+ if (pd.polygon.npoints <= MAX_POINTS) {
+ pd.polygon.addPoint(0, 0);
+ int insPos = r.nextInt(pd.polygon.npoints);
+ int x = r.nextInt(size.width);
+ int y = r.nextInt(size.height);
+
+ System.arraycopy(pd.polygon.xpoints, insPos, pd.polygon.xpoints, insPos + 1, pd.polygon.npoints - insPos - 1);
+ pd.polygon.xpoints[insPos] = x;
+ System.arraycopy(pd.polygon.ypoints, insPos, pd.polygon.ypoints, insPos + 1, pd.polygon.npoints - insPos - 1);
+ pd.polygon.ypoints[insPos] = y;
+ } else {
+ type = ImprovementType.CompleteChange;
+ PolygonData sd = PolygonData.randomPoly(size);
+ pd.polygon = sd.polygon;
+ pd.color = sd.color;
+ pd.alpha = sd.alpha;
+ }
+ }
+ break;
+
+ case RemovePoint:
+ if (pd.polygon.npoints > 3) {
+ int delPos = r.nextInt(pd.polygon.npoints);
+
+ System.arraycopy(pd.polygon.xpoints, delPos+1, pd.polygon.xpoints, delPos, pd.polygon.npoints - delPos - 1);
+ System.arraycopy(pd.polygon.ypoints, delPos+1, pd.polygon.ypoints, delPos, pd.polygon.npoints - delPos - 1);
+ pd.polygon.npoints--;
+ } else {
+ type = ImprovementType.CompleteChange;
+ PolygonData sd = PolygonData.randomPoly(size);
+ pd.polygon = sd.polygon;
+ pd.color = sd.color;
+ pd.alpha = sd.alpha;
+ }
+ break;
+
+ case MovePoint:
+ int movePos = r.nextInt(pd.polygon.npoints);
+ pd.polygon.xpoints[movePos] = r.nextInt(size.width);
+ pd.polygon.ypoints[movePos] = r.nextInt(size.height);
+ break;
+
+ case ReorderPoly:
+ System.arraycopy(data, idx+1, data, idx, NUM_POLYS - idx - 1);
+ idx = r.nextInt(NUM_POLYS);
+ System.arraycopy(data, idx, data, idx+1, NUM_POLYS - idx - 1);
+ data[idx] = pd;
+
+ break;
+
+ case ShrinkPoly: {
+ double midX = pd.polygon.xpoints[0];
+ double midY = pd.polygon.ypoints[0];
+ for (int i = 1; i < pd.polygon.npoints; i++) {
+ midX += pd.polygon.xpoints[i];
+ midY += pd.polygon.ypoints[i];
+ }
+ midX /= pd.polygon.npoints;
+ midY /= pd.polygon.npoints;
+
+ int shrinkFactor = r.nextInt(5);
+ for (int i = 0; i < pd.polygon.npoints; i++) {
+ pd.polygon.xpoints[i] += (pd.polygon.xpoints[i] < midX) ? shrinkFactor : -shrinkFactor;
+ pd.polygon.ypoints[i] += (pd.polygon.ypoints[i] < midY) ? shrinkFactor : -shrinkFactor;
+ }
+ }
+ break;
+
+ case EnlargePoly: {
+ double midX = pd.polygon.xpoints[0];
+ double midY = pd.polygon.ypoints[0];
+ for (int i = 1; i < pd.polygon.npoints; i++) {
+ midX += pd.polygon.xpoints[i];
+ midY += pd.polygon.ypoints[i];
+ }
+ midX /= pd.polygon.npoints;
+ midY /= pd.polygon.npoints;
+
+ int expandFactor = r.nextInt(5);
+ for (int i = 0; i < pd.polygon.npoints; i++) {
+ pd.polygon.xpoints[i] += (pd.polygon.xpoints[i] < midX) ? -expandFactor : expandFactor;
+ pd.polygon.ypoints[i] += (pd.polygon.ypoints[i] < midY) ? -expandFactor : expandFactor;
+ pd.polygon.xpoints[i] = clipToRange(0, size.width, pd.polygon.xpoints[i]);
+ pd.polygon.ypoints[i] = clipToRange(0, size.height, pd.polygon.ypoints[i]);
+ }
+ }
+ break;
+
+ case ChangeColor:
+ int comp = r.nextInt(3);
+ switch (comp) {
+ case 0: {
+ int newColor = pd.color.getRed() + (r.nextInt(10) - 5);
+ newColor = clipToRange(0, 255, newColor);
+ pd.color = new Color(newColor, pd.color.getGreen(), pd.color.getBlue());
+ }
+ break;
+
+ case 1: {
+ int newColor = pd.color.getGreen() + (r.nextInt(10) - 5);
+ newColor = clipToRange(0, 255, newColor);
+ pd.color = new Color(pd.color.getRed(), newColor, pd.color.getBlue());
+ }
+ break;
+
+ case 2: {
+ int newColor = pd.color.getBlue() + (r.nextInt(10) - 5);
+ newColor = clipToRange(0, 255, newColor);
+ pd.color = new Color(pd.color.getRed(), pd.color.getGreen(), r.nextInt(255));
+ }
+ break;
+ }
+ break;
+
+ case ChangeAlpha:
+ pd.alpha = r.nextFloat();
+ break;
+
+ case CompleteChange:
+ PolygonData sd = PolygonData.randomPoly(size);
+ pd.polygon = sd.polygon;
+ pd.color = sd.color;
+ pd.alpha = sd.alpha;
+ break;
+ }
+
+ return type;
+ }
+
+ public void draw(Graphics2D g) {
+ g.setColor(color);
+ g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
+ g.fillPolygon(polygon);
+ }
+
+ private static int clipToRange(int min, int max, int value) {
+ if (value < min)
+ return min;
+ else if (value > max)
+ return max;
+ return value;
+ }
+}
\ No newline at end of file
Property changes on: trunk/polycasso/src/com/mebigfatguy/polycasso/PolygonData.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:eol-style
+ native
Added: trunk/polycasso/src/com/mebigfatguy/polycasso/RandomImageFinder.java
===================================================================
--- trunk/polycasso/src/com/mebigfatguy/polycasso/RandomImageFinder.java (rev 0)
+++ trunk/polycasso/src/com/mebigfatguy/polycasso/RandomImageFinder.java 2009-11-23 15:16:33 UTC (rev 3)
@@ -0,0 +1,84 @@
+package com.mebigfatguy.polycasso;
+
+import java.awt.Image;
+import java.io.BufferedInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLDecoder;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.swing.ImageIcon;
+
+import org.apache.commons.io.IOUtils;
+
+public class RandomImageFinder {
+
+ private static final String ROOTURL = "http://search.lycos.com/";
+ private static final String URL = ROOTURL + "?tab=multi&loc=searchbox&sortMode=&safeSearch=&cat=images&query={0}&x=0&y=0";
+ private static final Pattern IMAGE_HTML_PATTERN = Pattern.compile("<div\\s+class=\"imageResult\"><a\\s+href=\"([^\"]*)\"");
+ private static final Pattern IMAGE_PATTERN = Pattern.compile("image_url=([^&]*)&");
+ private static final int NAMELEN = 3;
+
+ private RandomImageFinder() {
+ }
+
+ public static Image findImage() throws IOException {
+
+ char[] ranName = new char[NAMELEN];
+ Random ran = new Random(System.currentTimeMillis());
+ for (int i = 0; i < NAMELEN; i++) {
+ ranName[i] = (char)('A' + ran.nextInt(26));
+ }
+
+ String html = new String(getUrlData(MessageFormat.format(URL, new String(ranName))), "UTF-8");
+
+ List<String> images = new ArrayList<String>();
+
+ Matcher m = IMAGE_HTML_PATTERN.matcher(html);
+ while (m.find()) {
+ images.add(m.group(1));
+ }
+
+ html = new String(getUrlData(ROOTURL + images.get((int)(Math.random() * images.size()))), "UTF-8");
+
+ m = IMAGE_PATTERN.matcher(html);
+ if (m.find()) {
+ String url = URLDecoder.decode(m.group(1), "UTF-8");
+
+ return new ImageIcon(getUrlData(url)).getImage();
+ }
+
+ throw new IOException("Failed to find image");
+ }
+
+ private static byte[] getUrlData(String url) throws IOException {
+ HttpURLConnection con = null;
+ InputStream is = null;
+
+ try {
+ URL u = new URL(url);
+ con = (HttpURLConnection)u.openConnection();
+ con.addRequestProperty("User-Agent", "Mozilla/4.76");
+ con.setDoInput(true);
+ con.setDoOutput(false);
+ con.connect();
+
+ is = new BufferedInputStream(con.getInputStream());
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ IOUtils.copy(is, baos);
+ return baos.toByteArray();
+ } finally {
+ IOUtils.closeQuietly(is);
+ if (con != null)
+ con.disconnect();
+ }
+ }
+}
Property changes on: trunk/polycasso/src/com/mebigfatguy/polycasso/RandomImageFinder.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:eol-style
+ native
Added: trunk/polycasso/src/com/mebigfatguy/polycasso/resource.properties
===================================================================
--- trunk/polycasso/src/com/mebigfatguy/polycasso/resource.properties (rev 0)
+++ trunk/polycasso/src/com/mebigfatguy/polycasso/resource.properties 2009-11-23 15:16:33 UTC (rev 3)
@@ -0,0 +1,4 @@
+pc.title = Polycasso
+pc.file = File
+pc.paintimage = Start Generating Image
+pc.quit = Quit
\ No newline at end of file
Property changes on: trunk/polycasso/src/com/mebigfatguy/polycasso/resource.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:eol-style
+ native
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|