file_id.diz
//
// pingiz title applet
// Created by Korhan Kaya , 27.03.2005
//
// blur() by SEB
// blendmodes() from blend_modes.pde
//
//
//
int WIDTH = 680;
int HEIGHT = 140;
BFont metaBold;
int tick = 0;
BImage img;BImage img2;
int maxDots=120001;
int nrOfDots;
Dot[] dot=new Dot[maxDots+1];
float lmx=0.0, lmy=0.0, mxmov=0.0, mymov=0.0;
blendmodes mode=new blendmodes();
void setup() {
background(255);
size(680,140);
colorMode(RGB, 255);
img = loadImage("PINGIZl.jpg");
img2 = loadImage("PINGIZ.jpg");
int i=0;
for (int y=1;y<=height;y++) {
for (int x=1;x<=width;x++) {
color c=img.pixels[int(y-1)*width+int(x-1)];
if (red(c)<230) {
// if ((x % 4)==1) {
if (random(1)<0.07) {
dot[i]=new Dot(x,y,c);
i++;
}
}
}
nrOfDots=i-1;
}}
float aa = 10.0;
float bb = 8/3;
float rr = 28.0;
float delt=0.01;
float Yangle;
float Xangle;
float dx = 0;
float dy = 0;
int loopmode = 0;
void loop()
{
blur();
if ((tick % 10)==1) {mxmov=50;mymov=50;lmx=width /2;lmy=width /2;}
for (int i=1;i<=nrOfDots;i++) {dot[i].update();}
if (loopmode==0) tick+=2;if (tick>255) loopmode=1;
if (loopmode==1) tick-=2;if (tick<-255) loopmode=0;
}
void mousePressed() {
lmx=mouseX; lmy=mouseY;
}
void mouseDragged() {
mxmov=mouseX-lmx;
mymov=mouseY-lmy;
lmx=mouseX; lmy=mouseY;
}
float llx=0;
float lly=0;
class Dot {
float x,y,sx,sy;
float d,dm=20000.0;
float xmov=0,ymov=0;
float movability;
int nrOfNeighbours;
color col=color(255,255,255);
Dot(int x, int y, color c) {
col=c;
sx=x;sy=y;
this.x=x; this.y=y;
xmov=random(-3,3);
ymov=random(-3,3);
movability=1-dist(x,y,width/2.0,height/2.0)/sqrt(pow(width/2.0,2)+pow(height/2.0,2)); // 0..
}
void update() {
if (mousePressed) {
dm=dist(x,y,mouseX,mouseY);
} else {
dm=(3*dm+20000000)/3;
}
d=pow(1/(5+dm),0.7);
xmov+=movability*0.7*mxmov*d;
ymov+=movability*0.7*mymov*d;
xmov+=movability*0.0045*(sx-x);
ymov+=movability*0.0045*(sy-y);
float damp=0.99;
xmov*=damp;
ymov*=damp;
if (x+xmov<1||x+xmov>width) {xmov*=-0.4;}
if (y+ymov<1||y+ymov>height) {ymov*=-0.8;}
x+=xmov;y+=ymov;
color aa,bb,newcolor,newcolor2;
aa=color(0,0,0);
aa=img2.pixels[int(y)*width+int(x)];
bb=pixels[int(y)*width+int(x)];
col=color(x,y*2,tick*-1);
newcolor=mode.multiply(aa,bb);
newcolor=mode.lighten(newcolor,aa );
newcolor=mode.overlay(newcolor,col);
fill(newcolor);
stroke(newcolor);
ellipse(int(x),int(y),2,2);//,5,5);
if (random(1)<.1) point(int(x)+random(1),int(y)+1);//,5,5);
if (random(1)<.5)
{
newcolor2=mode.difference(newcolor,color(150+sin(tick),50+(sin(tick) / 1.8),(tick)));
fill(newcolor2);//noStroke();
point(int(x)+1,int(y)-1);//,5,5);
}
if (random(1)<.5) {
newcolor=mode.lighten(newcolor,color(150+(tick /2),150+(tick / 2),0));
stroke(newcolor);
point(int(x)-1,int(y)-1);//,5,5);
}
}
float getNrOfNeighbours(float xp,float yp) {
int x=int(xp), y=int(yp);
return 8;
}
}
// FULL RGB DIFFUSION FILTER
// by SEB // www.seb.cc
void blur() {
int index,R,G,B,left,right,top,bottom;
for(int j=0;j<WIDTH;j++) {
for(int i=0;i<HEIGHT;i++) {
index=i*WIDTH+j;
// Wraparound offsets
if(j>0) left=-1; else left=WIDTH-1;
if(j==(WIDTH-1)) right=-WIDTH+1; else right=1;
if(i>0) top=-WIDTH; else top=(HEIGHT-1)*WIDTH;
if(i==(HEIGHT-1)) bottom=-(HEIGHT-1)*WIDTH; else bottom=WIDTH;
// Calculate the sum of n neighbors
R=(pixels[left+index]>>16) & 255; // left middle
R+=(pixels[right+index]>>16) & 255; // right middle
R+=(pixels[index]>>16) & 255; // middle middle
R+=(pixels[index+top]>>16) & 255; // middle top
R+=(pixels[index+bottom]>>16) & 255; // middle bottom
R=(R/5);
G=(pixels[left+index]>>8) & 255; // left middle
G+=(pixels[right+index]>>8) & 255; // right middle
G+=(pixels[index]>>8) & 255; // middle middle
G+=(pixels[index+top]>>8) & 255; // middle top
G+=(pixels[index+bottom]>>8) & 255; // middle bottom
G=(G/5);
B=pixels[left+index] & 255; // left middle
B+=pixels[right+index] & 255; // right middle
B+=(pixels[index] & 255); // middle middle
B+=pixels[index+top] & 255; // middle top
B+=pixels[index+bottom] & 255; // middle bottom
B=(B/5);
pixels[index]=(R<<16)+(G<<8)+B;
}
}
}
class blendmodes{
int[] theList=new int[6];
color theColor;
blendmodes(){
}
void makeList(color cl1, color cl2){
theList[0]=int(red(cl1));
theList[1]=int(green(cl1));
theList[2]=int(blue(cl1));
theList[3]=int(red(cl2));
theList[4]=int(green(cl2));
theList[5]=int(blue(cl2));
}
void makeColor(){
theColor=color(theList[0],theList[1],theList[2]);
}
color average(color cl1, color cl2 ){
makeList(cl1,cl2);
for (int i=0;i<3;i++){
theList[i]=(theList[i]+theList[i+3])>>1;
}
makeColor();
return(theColor);
}
color multiply(color cl1, color cl2 ){
makeList(cl1,cl2);
for (int i=0;i<3;i++){
theList[i]=(theList[i]*theList[i+3])>>8;
}
makeColor();
return(theColor);
}
color screen(color cl1, color cl2 ){
makeList(cl1,cl2);
for (int i=0;i<3;i++){
theList[i]=255 - ((255-theList[i]) * (255-theList[i+3]) >>8);
}
makeColor();
return(theColor);
}
color darken(color cl1, color cl2 ){
makeList(cl1,cl2);
for (int i=0;i<3;i++){
if(theList[i]<theList[i+3]){
theList[i]=theList[i];
}else{
theList[i]=theList[i+3];
}
}
makeColor();
return(theColor);
}
color lighten(color cl1, color cl2 ){
makeList(cl1,cl2);
for (int i=0;i<3;i++){
if(theList[i]>theList[i+3]){
theList[i]=theList[i];
}else{
theList[i]=theList[i+3];
}
}
makeColor();
return(theColor);
}
color difference (color cl1, color cl2 ){
makeList(cl1,cl2);
for (int i=0;i<3;i++){
theList[i]=abs(theList[i]-theList[i+3]);
}
makeColor();
return(theColor);
}
color negation (color cl1, color cl2 ){
makeList(cl1,cl2);
for (int i=0;i<3;i++){
theList[i]=255-abs(255-theList[i]-theList[i+3]);
}
makeColor();
return(theColor);
}
color exclusion (color cl1, color cl2 ){
makeList(cl1,cl2);
for (int i=0;i<3;i++){
theList[i]=theList[i]+theList[i+3]-(theList[i]*theList[i+3]>>7);
}
makeColor();
return(theColor);
}
color overlay (color cl1, color cl2 ){
makeList(cl1,cl2);
for (int i=0;i<3;i++){
if (theList[i] < 128){
theList[i]=(theList[i]*theList[i+3])>>7;
}else{
theList[i]= 255 -((255-theList[i])*(255-theList[i+3])>>7);
}
}
makeColor();
return(theColor);
}
color hardLight (color cl1, color cl2 ){
makeList(cl1,cl2);
for (int i=0;i<3;i++){
if (theList[i+3] < 128){
theList[i]=(theList[i]*theList[i+3])>>7;
}else{
theList[i]= 255 -((255-theList[i])*(255-theList[i+3])>>7);
}
}
makeColor();
return(theColor);
}
color dodge (color cl1, color cl2 ){
makeList(cl1,cl2);
for (int i=0;i<3;i++){
if(theList[i+3]==255){
theList[i]= 255;
}else{
int res = (theList[i] << 8) / (255-theList[i+3]);
if (res>255) {
theList[i]= 255;
} else{
theList[i]=res;
}
}
}
makeColor();
return(theColor);
}
color burn (color cl1, color cl2 ){
makeList(cl1,cl2);
for (int i=0;i<3;i++){
if(theList[i+3]==0){
theList[i]= 0;
}else{
int res = 255 - (((255-theList[i]) << 8) / theList[i+3]);
if (res<0) {
theList[i]= 0;
} else{
theList[i]=res;
}
}
}
makeColor();
return(theColor);
}
color reflect (color cl1, color cl2 ){
makeList(cl1,cl2);
for (int i=0;i<3;i++){
if (theList[i+3]== 255){
theList[i]= 255;
}else{
int res = theList[i]*theList[i] / (255-theList[i+3]);
if (res > 255){
theList[i]= 255;
}else{
theList[i]=res;
}
}
}
makeColor();
return(theColor);
}
color glow (color cl1, color cl2 ){
makeList(cl1,cl2);
for (int i=0;i<3;i++){
if (theList[i]== 255){
theList[i]= 255;
}else{
int res = theList[i+3]*theList[i+3] / (255-theList[i]);
if (res > 255){
theList[i]= 255;
}else{
theList[i]=res;
}
}
}
makeColor();
return(theColor);
}
color freeze (color cl1, color cl2 ){
makeList(cl1,cl2);
for (int i=0;i<3;i++){
if (theList[i+3]==0){
theList[i+3]= 0;
}else{
int res =int(255-sq(255-theList[i])/theList[i+3]);
if (res < 0){
theList[i]= 0;
}else{
theList[i]=res;
}
}
}
makeColor();
return(theColor);
}
color heat (color cl1, color cl2 ){
makeList(cl1,cl2);
for (int i=0;i<3;i++){
if (theList[i]==0){
theList[i]= 0;
}else{
int res =int(255-sq(255-theList[i+3])/(theList[i]));
if (res < 0){
theList[i]= 0;
}else{
theList[i]=res;
}
}
}
makeColor();
return(theColor);
}
color stamp (color cl1, color cl2 ){
makeList(cl1,cl2);
for (int i=0;i<3;i++){
int res = theList[i] + 2*theList[i+3] - 256;
if (res < 0){
theList[i]= 0;
}else if (res > 255){
theList[i]= 255;
}else{
theList[i]= res;
}
}
makeColor();
return(theColor);
}
}