Just thought I'd update this with my findings:
I was able to write a method that created a shape from the outline of an image. Here are a couple screen shots:
The method to create this has a parameter for "precision", which basically just means it only adds a point to the polygon once every x number of pixel hits. So, for a precision of 2, every second border pixel is added to the polygon. There is also a parameter for the value of the alpha to check against.
For this image the time to create the shape was:
Image size: 384x384
Precision Time (in ms)
These are all on separate run times, so there is no optimization between each. The image above uses a precision of 2. One part of my algorithm that I know plays a big part in the creation time is converting the image to an array of Pix (inner class). I do this for convenience, so I'm sure by just accessing the image pixels directly, that time can be lowered more.
A couple limitations I haven't fixed:
If there is an edge of the non-transparent pixels on any border of the whole image, an out of bounds exception occurs.
It doesn't account for transparent pixels within the non-transparent pixels.
So, anyway, that's what I've found that I think will suite my needs. I'm sure there is still a better way to do this, but I'm satisfied. Here is the pastebin link http://pastebin.com/Wvatq5Bk
. It is in the form of a singleton class. When you create a shape, you also pass in a name, so that you can access the shape again without having to re-create it. It's done this way for personal need. Also, this was done using the Slick2D Image, Shape, and Polygon classes. I'm sure converting it to Java2D would require minimal changes. Further more, it's written to quit the program if the user tries to use an image that isn't a png.
Feel free to use the code, abuse it, criticize, or whatever. Hopefully this helps someone.
Update: Redid method to cut out all the code duplication, and fixed typo indicated by SHC.