PDA

Volledige versie bekijken : [December '08 BATTLE][CLOSED] Generative Art » Neuro wint


Mr. Black
%Europe/Berlin %991 %2008, 23:47
http://www.flashfocus.nl/forum/attachment.php?attachmentid=9901&stc=1


De [December '08 MONTHLY] Generative Art is voorbij.

De winnaar is natuurlijk Neuro! Door een absolute meerderheid van de stemmen te behalen, heeft hij laten zien dat zijn inzendingen het meest creatief & vernieuwend zijn geweest. Hij experimenteerde met een Wii en heeft een heleboel verschillende gedachten uitgewerkt. Neuro, good job! :D

Bedankt voor het meedoen allemaal! En ook iedereen die gestemd heeft wil ik even bedanken. Zonder jullie was er geen winnaar geweest. :)

__________________________________________________


Even vooraf

Hee people. :)

Sinds een paar weken bekleed ik een nieuwe functie: FlashFocus Competitie Manager. Dit betekent dat ik voortaan regelmatig competities op ga starten. Ook zullen er (één of twee keer per jaar) 'grotere' competities komen waar echte prijzen bij te winnen zijn. Mocht je dus ooit een briljant idee krijgen voor een competitie (zowel scripting als design), aarzel dan niet om gewoon even contact te leggen met mij. Ik ben creatief en ruimdenkend, maar ik kan natuurlijk niet eeuwig met nieuwe ideeën komen. :)


Generative Art

Kunst is nog steeds heel belangrijk in onze samenleving. Maar het maken van een schilderij of beelhouwwerk neemt toch erg veel tijd in beslag. Gelukkig bestaat er sinds een tijdje 'Moderne Kunst', waarbij zelfs al een paar druppels verf als volledig schilderij worden gezien. Kunst waarbij je zelf geen tekentalenten voor nodig hebt. Een oplossing voor de developers onder ons. :D

Het onderwerp van deze allereerste nieuwe competitie is 'Generative Art', of 'Art From Code'. Het idee is simpel: jij creëert wat script en dat script creëert dan wat 'kunst'. Uiteraard kun je ook denken aan het bewerken van een foto/plaatje.

Inspiratie nodig? Kijk eens hier (http://www.flashfocus.nl/forum/showthread.php?t=45086), een experiment van mknol dat de Showcase haalde. Of bekijk eens het werk van Erik Natzke (http://jot.eriknatzke.com/) en Joshua Davis (http://www.joshuadavis.com/), twee guru's op dit gebied. Ook heeft Neuro een artikel geschreven over de basis van BitmapData. Weet je er nog niets vanaf, lees dit (http://www.flashfocus.nl/forum/showthread.php?t=49195) dan eens. :)


Inleveren

De nieuwe competities hebben ook een iets andere opbouw. Er kan 30 dagen ingeleverd worden, vervolgens wordt er 5 dagen lang gestemd en op de 36ste dag komen de uitslagen. Vannacht om 0:00 uur zal de klok beginnen met tikken: je hebt dan nog 30 dagen om iets te maken en dat in te leveren. Om even duidelijk te zijn: het is de bedoeling dat je een met ActionScript gegenereerd plaatje inlevert. Uiteraard moet je ook je code geven vóór de uiterlijke inleverdatum. Dit moet je natuurlijk niet direct doen, want dan zou iedereen inspiratie uit jouw code op kunnen doen. En waar wordt dit dan op beoordeeld? Tja, het volk stemt. Dus zorg ervoor dat het er aantrekkelijk en leuk uitziet. Uiteraard vraag ik dan nog een keer aan iedereen om ook te kijken naar de moeilijkheidsgraad, of er veel geëxperimenteerd is, et cetera, maar we kunnen niets beloven. :)


Dus

Schrijf een code die uit zichzelf een foto/plaatje maakt/bewerkt. Dit resultaat mag later niet meer bewerkt worden.
Er is niet echt één output grootte, maak het niet te klein en ook niet te groot. Maak geen kunstwerk van 3000 bij 4000. Maar ook niet eentje van 30 bij 40. Uiteraard mag je ook een uitsnede van een groter werk posten.
Wanneer je Flash gebruikt (om te developen) mag je Library gewoon gebruiken om foto's/plaatjes neer te zetten, het gebruik van losse images is dus toegestaan. Of andere objecten die je eventueel nodig hebt.

Gebruik alleen code van jezelf. Uiteraard mag je wel dingen zoals Tweener, PaperVision3D gebruiken. Ook de nieuwe 3D engine van FP10 kun je zonder problemen gebruiken.
Het gebruik van PixelBender is niet toegestaan.
Het inleveren kan beginnen op 04-12-'08 om 0:00.
Je inlevering moet binnen zijn vóór 23:59 op 02-01-'09.
Daarna volgt er een periode van 5 dagen waarop gestemd kan worden. Daar tegen die tijd nog meer over.


Iedereen veel succes! :)

Mr. Black

tijmen_4real
%Europe/Berlin %667 %2008, 16:01
Wat kan je dan winnen ???

Mr. Black
%Europe/Berlin %735 %2008, 17:39
Wat kan je dan winnen ???
Even op blijven letten. Dit is een gewone Monthly, waar alleen eer te behalen valt. Bij de grotere competities vallen ook prijzen te winnen - wanneer dit het geval is zal ik dit uiteraard aangeven. :)

Neuro
%Europe/Berlin %820 %2008, 19:41
Voila, eerste poging. Niet echt origineel, en niet echt volgens de regels maar helemaal volgens de regels ;)
Het is niet helemaal uit zichzelf gegenereerd,maar met behulp van een Wiimote (via WiiFlash (http://wiiflash.bytearray.org/) )

http://www.neuroproductions.be/ff/1wii_art.jpg

Een groter formaat van de afbeeldingen en een "making-of" video kan je hier (http://www.neuroproductions.be/experiments/wiiflash-generative-art-painting/) vinden.

source in bijlage :)

Neuro
%Europe/Berlin %837 %2008, 20:06
Vandaag nog wat zitten prutsen, en hierbij men eerste geldige inzending.
Gaat er nog iemand iets maken? of moet ik dit topic alleen opvullen? ;)

http://www.neuroproductions.be/ff/result1.jpg

http://www.neuroproductions.be/ff/result2.jpg
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.filters.BlurFilter;
import flash.filters.DropShadowFilter;
import flash.geom.Point;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.system.Security;

/**
* @author kris@neuroproductions.be
*/
public class Main extends Sprite
{
private var w : int = 1000
private var h : int = 1000
private var bmdPerlinNoise : BitmapData
private var fotobmd : BitmapData
private var drawbmd : BitmapData
private var lineHolder : Sprite
private var currentPos : Point
private var point_arr : Array
private var frameCount : int = 0
private var noiseCount : int = 1
private var picsLoader : URLLoader
private var loader : Loader

public function Main()
{
var bg : Sprite = new Sprite()
bg.graphics.beginFill(0x000000)
bg.graphics.drawRect(0, 0, w, h)
addChild(bg)

build()
}

private function build() : void
{

bmdPerlinNoise = new BitmapData(w, h, false, 0);
bmdPerlinNoise.perlinNoise(w * 5, h * 5, 7, noiseCount, false, false, 7, false);
var bmNoise : Bitmap = new Bitmap(bmdPerlinNoise)
//addChild(bmNoise)
drawbmd = new BitmapData(w, h, true, 0);
var bmDraw : Bitmap = new Bitmap(drawbmd)
addChild(bmDraw)

lineHolder = new Sprite()
lineHolder.filters = [new DropShadowFilter(1, 45, 0, 1, 3, 3, 0.5, 3)]
addChild(lineHolder)

getPhoto()
}

public function getPhoto() : void
{
Security.allowDomain("*", "api.flickr.com");
var key : String = "27bdee69b095e41fd1a265f7bf417f61";
//flickr api key
var per_page : int = 5;
var page : int = Math.round(50 * Math.random()) + 1 ;
var tag : String = "green"
var xml_url : String = "http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=" + key + "&tags=" + tag + "&per_page=" + per_page + "&page=" + page;

var pics : XML = new XML();
var pics_url : URLRequest = new URLRequest(xml_url);
picsLoader = new URLLoader(pics_url);
picsLoader.addEventListener(Event.COMPLETE, picsLoaded);
}

private function picsLoaded(e : Event) : void
{
var pics : XML = XML(picsLoader.data);

var stat : String = pics.@stat.toString();
var totalPages : int = pics.photos.@pages;
var totalPics : int = pics.photos.@total;



var allPics : XMLList = pics.photos.*;
for each (var photo:XML in allPics)
{
var pic_src : String = "http://farm" + photo.@farm + ".static.flickr.com/" + photo.@server + "/" + photo.@id + "_" + photo.@secret + ".jpg";
}

var img_url : String = pic_src;
var request_url : URLRequest = new URLRequest(img_url);
loader = new Loader()
loader.load(request_url);

loader.contentLoaderInfo.addEventListener(Event.CO MPLETE, completeListener);
}

private function completeListener(event : Event) : void
{
var fotoHolder : Sprite = new Sprite()

fotoHolder.addChild(loader.content);

loader.content.width = w
loader.content.height = h
fotobmd = new BitmapData(w, h)
fotobmd.draw(fotoHolder)


this.addEventListener(Event.ENTER_FRAME, drawLine)
}

private function drawLine(event : Event) : void
{

if (currentPos == null)
{
drawbmd.draw(lineHolder)
currentPos = new Point(int(Math.random() * w), int(Math.random() * h))
lineHolder.graphics.clear()

lineHolder.graphics.moveTo(currentPos.x, currentPos.y)
point_arr = new Array()
}
var segments : int = 36
var searchLength : int = (Math.random() * 5) + 5


var bestValue : Number = 0

for (var i : Number = 0;i < segments; i++)
{
var angle : Number = (((Math.PI * 2) / segments) * i) + Math.random()
var pointSearch : Point = Point.polar(searchLength, angle)
pointSearch.x = Math.round(pointSearch.x)
pointSearch.y = Math.round(pointSearch.y)
pointSearch.x += currentPos.x
pointSearch.y += currentPos.y

var colorValue : Number = bmdPerlinNoise.getPixel(pointSearch.x, pointSearch.y)
if (colorValue > bestValue)
{
currentPos = new Point(pointSearch.x, pointSearch.y)
bestValue = colorValue
}
}
var l : int = point_arr.length


if (l > 1)
{
var oldPos : Point = point_arr[l - 1]
lineHolder.graphics.lineStyle(l + (l / 2), fotobmd.getPixel(currentPos.x, currentPos.y), 1)
lineHolder.graphics.lineTo(currentPos.x, currentPos.y)
}
for (i = 0;i < point_arr.length; i++)
{
var p : Point = point_arr[i]
if(p.x == currentPos.x && p.y == currentPos.y)
{
currentPos = null

break;
}
}

point_arr.push(currentPos)

frameCount++
if (frameCount > 5000)
{
frameCount = 0
noiseCount++
bmdPerlinNoise.perlinNoise(w * 2, h * 2, 4, noiseCount, false, false, 7, false);
drawbmd.applyFilter(drawbmd, drawbmd.rect, new Point(0, 0), new BlurFilter(6, 6))
this.removeEventListener(Event.ENTER_FRAME, drawLine)
getPhoto()
}
}
}
}

Dauntless
%Europe/Berlin %946 %2008, 22:43
Net wat aan het proberen en ik kwam bij dit uit:
http://www.flashfocus.nl/forum/attachment.php?attachmentid=9941&stc=1
Het doet me ofwel denken aan een bekend schilderij, ofwel aan een kleuren-blindheidstest :D

jaspermuts
%Europe/Berlin %993 %2008, 23:51
Hehe ik ben ook wat aan het klooien en gisteren had ik iets wat dat ook precies deed .
Maar dat was gisteren en natuurlijk ben ik door gaan klooien dus ik kan het niet meer laten zien...
Ik weet niet of ik nog wat ga posten, maar ben zeker wel bezig met proberen!

ath92
%Europe/Berlin %507 %2008, 12:10
Ben er ook even mee bezig geweest :) Mijn inzending is nog niet super, maar het is dan ook maar 10 minuten werk, waarvan het grootste deel opging in het zoeken naar een voorbeeld ;)

Het is in ieder geval aan iets, ben benieuwd waar jullie mee komen! Ik ga in ieder geval nog wel even door ;)

http://www.flashfocus.nl/forum/attachment.php?attachmentid=9943

xWouterx
%Europe/Berlin %509 %2008, 12:14
'k zou begot ni weten hoe je zoiets maakt :D

ath92
%Europe/Berlin %583 %2008, 13:59
Nou, je zou natuurlijk deze (http://www.flashfocus.nl/forum/showthread.php?t=49195) tutorial van Neuro eens door kunnen lezen. Ik had hiervoor ook nog nooit met bitmapdata gewerkt, maar als je er eenmaal aan begint en de basis door hebt, kun je er toch makkelijk dingen omheen bouwen.

Ik heb nu een nieuw plaatje gegenereerd, het is nog steeds niet veel, maar dat komt later misschien nog ;)

http://www.flashfocus.nl/forum/attachment.php?attachmentid=9944&stc=1

Neuro
%Europe/Berlin %773 %2008, 18:33
Fijn, al 3 deelnemers :)

Ik was gisteren The 25-Line ActionScript Contest finalisten (http://www.25lines.com/?page_id=139) aan het bekijken (allemaal erg coole inzendingen, zeker bekijken)
Entry 034 leek me wel erg interessant voor generative art. Mij daarop gebaseerd heb ik dit gemaakt:

http://www.neuroproductions.be/ff/gen_art2.jpg

99% van de credit gaat uiteraard naar Cay Garrido, en zijn code, maar het is een mooi voorbeeldje wat je met generative art kan doen :)

source in bijlage, de swf kan je hier (http://www.neuroproductions.be/uploads/blog/examples/genart/genArt.swf) bekijken

Ea.Z
%Europe/Berlin %075 %2008, 01:48
Wow, het gaat er hier heftig aan toe...
Kzal er in de loop van de komende week eens mee spelen (alsk tijd heb :( )

mknol
%Europe/Berlin %597 %2008, 14:19
He toevallig Neuro, ik had die inzendingen ook gezien en was ook gaan kijken hoe dat ding werkte. :) Je hebt er wel al wat moois van gemaakt, ziet er goed uit! Vooral als je het bewegend ziet is het erg koel!

Als ik wat tijd over heb, zal ik ook wat creëren. Dit is nog 1 van mijn laatste werken: (die ik al had gemaakt voordat de competitie begon)
http://farm4.static.flickr.com/3227/3017058425_aeeefbf450.jpg (http://www.flickr.com/photos/markknol/3017058425/)
Hier heb ik wel gebruik gemaakt van mousegestures, ik weet niet of dat verboden is voor deze competitie?

Neuro
%Europe/Berlin %652 %2008, 15:39
Thanks :)

mousegestures
Tja, is inderdaad iets waar ik ook mee zit.
Het is erg moeilijk om coole paden te genereren (daarom heb ik ook dat 25-Line ActionScript Contest voorbeeldje gebruikt ), je blijft met wiskundige functies zitten, en die zijn estetisch gezien meestal nogal saai. Ik verdenk trouwens onze vrienden Erik Natzke en Joshua Davis hier ook van.
Strikt genomen zou het niet mogen, maar het creëert wel erg veel mogelijkheden.
Wat zegt de jury voorzitter? :)

mknol
%Europe/Berlin %705 %2008, 16:56
Nou, ik weet dat Natzke vaak gebruik maakt van mousegestures. En tja.. waarom niet? Perlin noise blijft anders de beste (makkelijkste) optie voor seeded random movements.

Mr. Black
%Europe/Berlin %724 %2008, 17:23
Leuk werk allemaal! Ik ben blij dat er wat leven in dit forum is gekomen. :D

Mousegestures zijn toegestaan. Je mag ook een foto gebruiken, kleuren handmatig invoeren (of laden van kuler), dus enige interactie tijdens het maken van je schilderij moet zeker tot de mogelijkheden behoren. :)

[PS] Neuro, jouw eerste inzending is dus ook goedgekeurd! Je mag natuurlijk ook je Wii gebruiken om coole paden te maken. :)

BernardV
%Europe/Berlin %956 %2008, 22:56
Perlin noise blijft anders de beste (makkelijkste) optie voor seeded random movements.
Klopt, maar... mp3 met zijn soundspectrum doet het ook leuk :)

Ik heb wat ideeen, met een beetje geluk heb ik het ook nog klaar voor de deadline...

ath92
%Europe/Berlin %999 %2008, 23:59
Whoa! Dat is wel echt een vet idee, generative art d.m.v. muziek!:D Een soort van visualisatinet als wat je in sommige mediaplayers vindt, zeg maar :)

Leuk idee, valt zeker wel wat mee te maken :) Ik ga dit weekend en in de kerstvakantie ook zeker nog wat mooiere inzendingen maken.

Ea.Z
%Europe/Berlin %023 %2008, 00:34
Hmz, niet aan gedacht dat soundSpecturm ook generative werkt.
In dat geval heb ik ook wel wat inzendingen klaar :D
http://farm4.static.flickr.com/3232/3071015380_c89a80c149_o.jpg

http://farm4.static.flickr.com/3197/3070176071_9ed460a3ac_o.jpg

http://farm4.static.flickr.com/3218/3071015070_59f3d286e5_o.jpg

http://farm4.static.flickr.com/3065/3070175837_36b1244960_o.jpg


Bijhorende ervaring:
http://labs.nocreativity.com/soundCoolness/Visualizr.html?s=3

(verander de parameter in de naar waarden tussen 1 en 5 voor een andere track ;))

TheDutch
%Europe/Berlin %416 %2008, 09:59
Ik zie dat Neuro al lekker op pad is, goed bezig! Tja, van mknol ken ik het natuurlijk al en is niet echt vernieuwend voor deze competitie ;).

Whoa! Dat is wel echt een vet idee, generative art d.m.v. muziek!:D Leuk idee, valt zeker wel wat mee te maken :)
In het ultieme geval zou je dan de muziek ook zelf moeten componeren :).

Nou, ik weet dat Natzke vaak gebruik maakt van mousegestures.
In 2003 op FlashForward in San Francisco vertelde hij me dat zijn wiskunde van een dramatisch niveau is. Hij probeert meestal maar wat en als het een cool effect geeft dan gaat hij daarop verder :).

ps. Het kan zijn dat hij in de afgelopen 5/6 jaar zijn wiskunde heeft verbeterd, dat weet ik niet.

Neuro
%Europe/Berlin %749 %2008, 17:59
In het ultieme geval zou je dan de muziek ook zelf moeten componeren .In het ultieme geval zou je eerst generative muziek moeten maken ;)

Nog wat testjes, niet echt geslaagd, maar goed...
Random bezier curves:
http://www.neuroproductions.be/ff/genArt3_1.jpg

http://www.neuroproductions.be/ff/genArt3_2.jpg

"3D" Perlin noise (papervision3D):
http://www.neuroproductions.be/ff/genArt4_1.jpg

http://www.neuroproductions.be/ff/genArt4_2.jpg


update: source in bijlage (3 zijn de lijnen, 4 de 3D, 4 heeft soms een script timeout, dus paar keer proberen tot je iets ziet :) )

Solemon
%Europe/Berlin %082 %2008, 01:58
Hier mijn allereerste experiment op het gebeid van generative art. Aan de hand van Neuro zijn tutorial over bitmapdata heb ik dit snel gemaakt.

http://img243.imageshack.us/img243/4392/tv1versie1croppedev4.jpg

Ik heb een foto van mijn tv genomen die op een willekeurig kanaal stond en heb vervolgens de kleur van een random pixel gekozen en op de x en y positie van die pixel heb ik een streepje laten tekenen in de kleur van die pixel.

Als ik van de week nog tijd kan vinden zal ik wat verder gaan experimenteren.

benni_jolink
%Europe/Berlin %530 %2008, 12:44
Ik heb een spirograph engine getweakd. Je kan curves e.d. instellen maar ook op random laten staan: http://www.eerkmans.nl/spiro/

Jan
%Europe/Berlin %816 %2008, 19:35
Mijn script gebruikt een foto als input om dezelfde foto opnieuw te bouwen met het verkleinde origineel als 'bouwsteen'.

Zelf testen kan hier:
http://users.telenet.be/jansurf/mosaic/
Je hebt FP10 nodig.
Ik gebruik de nieuwe FileReference zodat uploaden en downloaden van foto's rechtstreeks van en naar je pc kan.
Foto's worden opgeslagen als bmp en met de originele afmetingen, wat bij grote foto's wel aardig kan oplopen in megabytes.


Wat voorbeelden:
(afhankelijk van de instellingen krijg je een beetje andere output)
http://img227.imageshack.us/img227/6950/adobe0yh4.jpg http://img511.imageshack.us/img511/1229/adobe1auj9.png http://img230.imageshack.us/img230/926/adobe2gb1.png http://img141.imageshack.us/img141/9243/adobe3az1.png

(Beide foto's zijn resized voor het forum. Het origineel is groter dan 2000x3000)
http://img220.imageshack.us/img220/8710/hannefull0iv2.jpghttp://img187.imageshack.us/img187/7767/hannefull1cv5.png

crop (niet-resized) uit de foto rechtsboven:
http://img220.imageshack.us/img220/1513/hannecropaw3.png

Groeten,
Jan

ApplePI
%Europe/Berlin %466 %2008, 11:11
Hi, het is een tijd geleden dat ik hier geweest ben en het goed om te zien dat het forum zo leeft. In de afgelopen weken ben ik wat aan het stoeien met AS3 en kwam zodoende op FlashFocus terecht. Ik was tot nu toe alleen maar met AS2 aan het werk...

Ik weet niet of het helemaal de bedoeling is maar ik heb een applicatie gemaakt die foto's 'naschildert', http://painter.grootlicht.com/

Ik ben nog aan het tweaken maar er komen soms grappige 'schilderijen' uit...

een voorbeeld:

http://farm2.static.flickr.com/1030/3166336699_b0bbcb5fa0_o.jpg

http://farm4.static.flickr.com/3118/3150698032_5439d133b3_o.jpg

http://farm4.static.flickr.com/3162/3150697934_45e7988c2e_o.jpg

Neuro
%Europe/Berlin %481 %2008, 11:32
Cool Jan, Ik ben benieuwd hoe je het juist hebt aangepakt.

Ik weet niet of het helemaal de bedoeling is
Ja, helemaal de bedoeling :) erg leuke applicatie, met mooi resultaat.

Fijn dat er al een hoop inzendingen zijn, goed werk heren :)
Ik ga er vandaag ook nog eens iets proberen.


Vergeet allemaal wel niet je source te posten voor 03-01-'09

Gollum
%Europe/Berlin %994 %2008, 23:52
Klein probeerseltje, nog ge-on-tweaked:

Met wat geklap:
http://beagollum.nl/gen_01.jpg

Second encore - Tim Minchin :)
http://beagollum.nl/gen_02.jpg


Zelf proberen:
http://beagollum.nl/genart.swf
1 keertje klikken zodatie op wit gaat, daarna weer klikken voor pauze/herstart.
Overigens alleen met microfoon (en dus die even toestemming geven in het settings-menu), en het is aan te raden om je eigen boxjes uit te zetten, geeft anders nogal een vervelende echo. Al hoewel die ook leuk kan zijn als je een keer hard klapt.



Het is op dit moment nog erg basic en random, heeft nog heel wat tweak-tijd nodig.

dcm360
%Europe/Berlin %998 %2008, 23:58
Het is op dit moment nog erg basic en random, heeft nog heel wat tweak-tijd nodig.
Volgens mij wel heel erg random, want, hoewel ik geen mic heb en dus een mp3tje heb misbruikt, het ziet er bijna naar uit dat het volledig random is. Al viel me wel redelijk op dat de drums dikke stippe gaven en de zang meer kleinere.

Wel leuk om te zien trouwens wat iedereen bedenkt, mocht ik op de valreep tussen mn css geklooi, een andere contest en mn vuurwerk door nog wat tijd vinden probeer ik ook nog wel wat (ik heb nog enkele leuke procentuele tweedegraads functies liggen, moet vast wel wat leuks mee te doen zijn).

Gollum
%Europe/Berlin %416 %2008, 09:59
De plekken zijn idd nog random, hoe harder het geluid hoe groter en donkerder de stippen worden.

bouke_
%Europe/Berlin %727 %2008, 17:27
Mijn script gebruikt een foto als input om dezelfde foto opnieuw te bouwen met het verkleinde origineel als 'bouwsteen'.

Zelf testen kan hier:
http://users.telenet.be/jansurf/mosaic/
Je hebt FP10 nodig.
Ik gebruik de nieuwe FileReference zodat uploaden en downloaden van foto's rechtstreeks van en naar je pc kan.
Foto's worden opgeslagen als bmp en met de originele afmetingen, wat bij grote foto's wel aardig kan oplopen in megabytes.

Groeten,
Jan

Erg leuk!, wat mij pas grappig lijkt is om inplaats van de orginele foto als "bouwsteen" te gebruiken foto's van flickr te gebruiken. (de Flickr API kan foto's toch op kleur laten zien?)

Dit bedoel ik: http://timmywheeler.deviantart.com/art/Obama-Color-74449677

Mr. Black
%Europe/Berlin %822 %2008, 19:44
Erg leuke inzendingen allemaal! Ook leuk dat er een paar generators gemaakt zijn. :)

En Neuro zei het al met het kleinste lettertype aanwezig, maar ik wil jullie er ook nog even op wijzen:

VERGEET NIET JE SOURCE TE POSTEN VÓÓR 3 JANUARI 2009!

Voor nu: iedereen een heel fijn 2009. :)

En allemaal voorzichtig met vuurwerk, anders kunnen we niet meer zo'n mooie dingen scripten. 8~

Gollum
%Europe/Berlin %623 %2009, 14:58
Mmm, weet niet of dat gaat lukken eigenlijk.

Zal proberen nog wat leuks neer te plempen.

Solemon
%Europe/Berlin %816 %2009, 19:36
Ik heb van de week nog een aantal experimentjes gedaan, de code is niet al te bijzonder. Maar het is wel leuk om te zien dat je met een klein beetje code al een leuk resultaat kan krijgen.

http://img154.imageshack.us/img154/9261/paintings6ea0.png


http://img184.imageshack.us/img184/4118/tv2zt2.png




fla was te groot om te uploaden, het enige wat nodig is is een plaatje toevoegen aan de library, en bij linkage voor as3 noem hem source6.

Gollum
%Europe/Berlin %060 %2009, 01:27
*kijkt om de hoek, legt projectje neer, rent weg*

http://www.beagollum.nl/gen_03.jpg


Code (http://www.beagollum.nl/gen_art.as)


Generator (http://www.beagollum.nl/genart.swf) (rood vierkantje is starten ;))







(Overigens is de generator nog erg miniem, de code nog un-tweaked, en het plaatje niet optimaal, maar ach.)

Mr. Black
%Europe/Berlin %499 %2009, 11:59
En dat was hem dan! De [December '08 MONTHLY] Generative Art is bij deze gesloten. Op alle inzendingen die nu nog binnenkomen kan helaas niet meer gestemd worden. Uiteraard mag je wel nog mooie plaatjes posten. :D

Verder heb ik net een enquête toegevoegd. Deze is vijf dagen geopend, je kan dus vijf dagen bedenken op wie je gaat stemmen. Daarbij willen we je vragen te letten op de volgende dingen:

Ziet het er mooi uit?
Is het origineel?
Is het vernieuwend?
Is het een makkelijk of moeilijk experiment?

Denk goed na, want iedereen heeft maar één stem. :)

[PS] Op jezelf stemmen is voor de zielige mensen onder ons. :(

TheDutch
%Europe/Berlin %516 %2009, 12:24
Mr. Black, haal je wel even die leden uit de lijst die NIET hun code hebben geplaatst? :)

Dauntless
%Europe/Berlin %523 %2009, 12:33
Je mag mij inderdaad uit de lijst halen; Ik heb de sourcecode niet meer :(

TheDutch
%Europe/Berlin %531 %2009, 12:45
Enkel Neuro, Solemon, en Adnez hebben broncode geplaatst. De rest dus niet! :)

Ea.Z
%Europe/Berlin %593 %2009, 14:15
package {
import flash.display.*;
import flash.events.*;
import flash.external.ExternalInterface;
import flash.filters.*;
import flash.geom.*;
import flash.media.*;
import flash.net.*;
import flash.profiler.*;
import flash.system.*;
import flash.utils.*;
[SWF(backgroundColor="#000000")]

public class Visualizr extends Sprite {

//set up the bitmap, the bitmapdata, and the bytearray
private var scalerbmd:BitmapData;
private var scalerbm:Bitmap;
private var ba:ByteArray;

private var drawerbmd:BitmapData;
private var drawerbm:Bitmap;

private var debug:Number = 0;
private var holder:Sprite;
private var rotor:Sprite;

private var sizex:Number;
private var sizey:Number;

//make some noise
private var s:Sound;

//fx
private var bf:BlurFilter;
private var hider:Sprite;

//additional stuff to glue it together
private var color:Array;
private var newcolor:String;
private var newcolor2:String;
private var rotationJump:Number;
private var scaleChange:Number;
private var dikte:Number = 1;

//settingsstuff
private var beginX:Number;
private var beginY:Number;
private var enabled:Boolean=true;



public function Visualizr():void {
this.stage.align = StageAlign.TOP_LEFT;
this.stage.scaleMode = StageScaleMode.NO_SCALE;

color = new Array(0xFF0033,0x33FF00,0x3300FF,0x00EEFF,0xFFFF00 );//all the values you want to be able to show up in the color codes
setTimeout(getColor,800);

hider = new Sprite();
holder = new Sprite();
rotor = new Sprite();

//set up those filters!
sizex = 1000;
sizey = 600;
rotationJump = 1.5;
scaleChange = 1.08;
bf = new BlurFilter(4,4,4);
ba = new ByteArray();


scalerbmd = new BitmapData(sizex,sizey,true,0x000000);
scalerbm = new Bitmap(scalerbmd);

drawerbmd = new BitmapData(sizex,sizey,true,0x000000);
drawerbm = new Bitmap(drawerbmd);

rotor.addChild(scalerbm);
scalerbm.x = -scalerbm.width/2;
scalerbm.y = -scalerbm.height/2;
holder.addChild(rotor);
rotor.x = scalerbm.width/2;
rotor.y = scalerbm.height/2;
holder.addChild(hider);
holder.addChild(drawerbm);
addChild(holder);

doLayout();
//var song:String = "http://labs.nocreativity.com/soundCoolness/Visualizr.html?s=abc";
var song:String = "soldiers.mp3";
var track:String = "";
var swfurl:String = ExternalInterface.call("function(){return window.location.href}");
if(swfurl.split("?s=").length==2){
track = swfurl.split("?s=")[1];
}

switch(track){
case "1":
song = "boom.mp3";
break;

case "2":
song="guetta.mp3";
break;

case "3":
song="soldiers.mp3";
break;

case "4":
song="mosdef.mp3";
break;

case "5":
song="daftpunk.mp3";
break;

}

s = new Sound(new URLRequest("assets/"+song));
var sc:SoundChannel = s.play();
var st:SoundTransform = sc.soundTransform;
st.volume = 1;
sc.soundTransform = st;

//make things move
stage.addEventListener(Event.ENTER_FRAME,loop);
stage.addEventListener(MouseEvent.MOUSE_DOWN, startTheCount);
stage.addEventListener(MouseEvent.CLICK, changeTheColor);
stage.addEventListener(KeyboardEvent.KEY_DOWN, toggleFullScreen);

}
private function toggleFullScreen(e:KeyboardEvent):void{
if(e.keyCode == 70){
stage.displayState = StageDisplayState.FULL_SCREEN;
}
if(e.keyCode == 83){
enabled = !enabled;
if(enabled){
stage.removeEventListener(Event.ENTER_FRAME,loop);
}
else{
stage.addEventListener(Event.ENTER_FRAME,loop);
}

}
}
private function changeTheColor(e:MouseEvent):void{
getColor();
//trace(System.totalMemory/1024/1024,' MB', ' @ ', stage.frameRate , "fps");
}
private function startTheCount(e:MouseEvent):void{
beginX = mouseX;
beginY = mouseY;
stage.addEventListener(MouseEvent.MOUSE_MOVE, updateTheCount);
stage.addEventListener(MouseEvent.MOUSE_UP, stopTheCount);
}
private function stopTheCount(e:MouseEvent):void{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, updateTheCount);
stage.removeEventListener(MouseEvent.MOUSE_UP, stopTheCount);
e.stopPropagation();
stage.addEventListener(MouseEvent.CLICK, changeTheColor);
}
private function updateTheCount(e:MouseEvent):void{
stage.removeEventListener(MouseEvent.CLICK, changeTheColor);

if(scaleChange - ((mouseX - beginX)/7500) < 0.5){
scaleChange = 0.5;
}
else if(scaleChange + ((mouseX - beginX)/7500) > 1.5){
scaleChange = 1.5;
}else{
scaleChange -= ((mouseX - beginX)/7500);
}


if(rotationJump - ((mouseY - beginY)/80) < -20){
rotationJump = -20;
}
else if(rotationJump + ((mouseY - beginY)/80) > 20){
rotationJump = 20;
}else{
rotationJump -= ((mouseY - beginY)/80);
}

beginX = mouseX;
beginY = mouseY;
}
private function loop(e:Event):void {



//let's see if we can get some low, mid and high tones...
var array:Array = new Array();
SoundMixer.computeSpectrum(ba,true,85);
for(var j:uint=0;j<255;j+=85){
ba.position = j;
array.push(ba.readFloat());
}

if(array[0]>1){
rotationJump *= -1;
scaleChange = array[0];
}
else if(array[0]<0.5){
scaleChange = array[0]*1.7;
}

//scaleChange = Math.abs(array[1]);

var a:Number= Math.round(array[2]);
if(a != 0 && a > 51200000000000000000000000000000){
getColor();
trace(a);
}


//let's draw some stuff
hider.graphics.clear();
hider.graphics.lineStyle(1,uint(newcolor));
SoundMixer.computeSpectrum(ba); //FREAKING COOLNESS!! I TELL YOU!!!

//left
var cx:Number;
var cy:Number;
var changer:Number;

//draw 1 circle
for (var i:Number = 0; i<360; i++) {
cx = Math.cos(i*Math.PI/180);
cy = Math.sin(i*Math.PI/180);
changer = ba[i]/2;
if (i==0) {
hider.graphics.moveTo(cx*changer+(sizex/2)+50,cy*changer+sizey/2);
}
if (changer>60) {
hider.graphics.lineTo(cx*changer+(sizex/2),cy*changer+(sizey/2));
}
}

//make the bitmap grow
// This is where the magic happens

rotor.scaleX = scaleChange;
rotor.scaleY = scaleChange;

rotor.rotation = rotationJump;

doLayout();
rotor.visible=true;

drawerbm.visible=false;
drawerbmd.draw(holder);
drawerbm.visible=true;

doLayout();

drawerbmd.applyFilter(drawerbmd, drawerbmd.rect, new Point(0,0), bf);
rotor.visible=false;
scalerbmd.draw(holder);

rotor.rotation = rotationJump;


// This was where the magic happens



}
private function clickHandler(e:MouseEvent):void {
hider.visible= !hider.visible;
}
private function keydownHandler(e:KeyboardEvent):void {
this.stage.removeEventListener(Event.ENTER_FRAME,l oop);
}
private function keyupHandler(e:KeyboardEvent):void {
this.stage.addEventListener(Event.ENTER_FRAME,loop );
}
private function getColor():void {
var newpos:String =color[Math.floor(Math.random()*color.length)];
newcolor != newpos ? newcolor = newpos : getColor();
}
private function doLayout():void{
scalerbm.x = -scalerbm.width/2;
scalerbm.y = -scalerbm.height/2;
holder.x = (stage.stageWidth - sizex)/2;
holder.y = (stage.stageHeight - sizey)/2;
}
}
}

Ziehier mijn code.
Val vooral niet op je gat voor eventuele vreemde/vuile dingen. Ik wou het eerst niet posten :p

ath92
%Europe/Berlin %596 %2009, 14:18
var bmd:Bitmapje = new Bitmapje(0,0);
var bm:Bitmap = new Bitmap(bmd);

var bmcontainer:MovieClip = new MovieClip();
bmcontainer.addChild(bm);
bmcontainer.alpha = 0.5;
//addChild(bmcontainer);

var mousePosX:int = bm.width / 2;
var mousePosY:int = bm.height / 2;



var clickMC:MovieClip = new MovieClip();
clickMC.addEventListener(MouseEvent.CLICK, clickHandler);
clickMC.graphics.beginFill(0xFFFFFF, 0);
clickMC.graphics.drawRect(0,0,stage.stageWidth, stage.stageHeight);

function clickHandler(e:MouseEvent) {
mousePosX = mouseX;
mousePosY = mouseY;
}
addChild(clickMC);

var thickness = 9;

addEventListener(Event.ENTER_FRAME, loop);
function loop(e:Event) {
var lijn:MovieClip = new MovieClip();
addChild(lijn);
var xpos:uint = uint(Math.random()*bm.width);
var ypos:uint = uint(Math.random()*bm.height);

var xtarget:int = (xpos - mousePosX) * 3;
var ytarget:int = (ypos - mousePosY) * 3;

if (xtarget>ytarget) {
if (ytarget<0) {
if (ytarget*-1 < xtarget) {
thickness = xtarget/150;
} else {
thickness = -1*ytarget/50;
}
} else {
thickness = xtarget/50;
}
} else {
if (xtarget < 0) {
if (xtarget*-1 < ytarget) {
thickness = ytarget/50;
} else {
thickness = -1*xtarget/50;
}
} else {
thickness = ytarget/50;
}
}
lijn.graphics.moveTo(xpos, ypos);
lijn.graphics.lineStyle(thickness, bmd.getPixel(xpos,ypos));
lijn.graphics.lineTo(xpos + xtarget, ypos + ytarget);
lijn.alpha = 0.5;
}
}


Dit is mijn code, om het te laten werken moet er eerst even een plaatje worden geïmport naar de library en die moet je dan als class Bitmapje geven (bij linkage->export for actionscript). Dit is trouwens de code voor mijn 2e inzending, maar de alpha van de lijnen is hier 0.5, ik heb het laatste regeltje code dus nog even toegevoegd.

Gollum
%Europe/Berlin %623 %2009, 14:57
Gefeliciteerd Neuro!

Jan
%Europe/Berlin %664 %2009, 15:56
Yep, proficiat Neuro, verdiend gewonnen! Ik vond jouw inzending ook het meest 'actionscript-art-achtig'. :)

Groeten,
Jan

Mr. Black
%Europe/Berlin %681 %2009, 16:21
De [December '08 MONTHLY] Generative Art is voorbij. Vijf dagen geleden kon er al niets meer ingezonden worden en sinds vanochtend kan er ook niet meer gestemd worden. :)

En de winnaar is natuurlijk Neuro! Door een absolute meerderheid van de stemmen te behalen, heeft hij laten zien dat zijn inzendingen het meest creatief & vernieuwend zijn geweest. Hij experimenteerde met een Wii en heeft een heleboel verschillende gedachten uitgewerkt. Neuro, good job! :D

Bedankt voor het meedoen allemaal! En ook iedereen die gestemd heeft wil ik even bedanken. Zonder jullie was er geen winnaar geweest. :)

Vragen, opmerkingen, tips, pluims, donaties? Geweldig! Post ze even hieronder, we willen graag weten wat jullie van deze (eerste) competitie vonden. :)

Neuro
%Europe/Berlin %827 %2009, 19:51
Joepie gewonnen, bedankt ! :D

Fijn dat er eens wat meer inzendingen waren.
Ik vond de inzendingen van Eaz en adnes erg goed. (het haxe script van adnez moet ik nog wel eens goed bekijken, ik heb nog nooit iets met haxe gedaan en dat lijkt me soms wel interessant).Ook Gollum zijn inzending vond ik erg origineel :)

ath92
%Europe/Berlin %850 %2009, 20:24
Gefeliciteerd :) Verdiend gewonnen inderdaad!

BernardV
%Europe/Berlin %004 %2009, 00:06
Netjes! Gefeliciteerd Neuro!