Processing 函式應用
一.簡易小畫家
二.刮畫效果
1.簡易小畫家功能:
使滑鼠畫線
void setup()
{size(800,600); //畫面大小
}
void draw()
{
line(mouseX,mouseY,pmouseX,pmouseY); //畫線
}
用if判斷式讓滑鼠能按下畫出黑線
void setup()
{size(800,600);
background(#F5EE11); //背景顏色大小(e.g.:黃色)
}
void draw()
{
if(mousePressed) //若按下滑鼠
line(mouseX,mouseY,pmouseX,pmouseY);
}
*******************************************************************
如何調出自己喜歡的顏色呢?
點選Tools裡的Color Selector選項
就會看到各種顏色的代碼
*******************************************************************
簡易小畫家功能:
void setup(){size(800,600);
background(#5D61D1); //背景顏色(紫藍色)
stroke(#F323F7); //初始畫線的顏色(紫色)
}
void draw(){
fill(255,0,0);rect(0,0,100,100); //第一上色框框(紅色)
fill(0,255,255);rect(0,100,100,100); //第二上色框框(淡藍色)
fill(255,255,0);rect(0,200,100,100); //第三上色框框(黃色)
}
void mouseDragged(){
line(mouseX,mouseY,pmouseX,pmouseY);
}
void mousePressed(){
if(mouseX<100 && mouseY<100){stroke(255,0,0);} //若點選所選位置則換紅色
else if(mouseX<100 && mouseY<200){stroke(0,255,255);} //若點選所選位置則換淡藍色
else if(mouseX<100 && mouseY<300){stroke(255,255,0);} //若點選所選位置則換黃色
}
設定筆刷大小 (往右邊點設定,往上點是調細,往下點是調粗)
void setup(){
size(800,600);
background(#5D61D1);
stroke(#AD1A00);
}
float MyTsuTsuDer=1; //筆刷粗細函數
color MyStorke=color(0); //顏色函數
void draw(){
stroke(0); strokeWeight(1); //初始線的顏色(黑色)和粗細(1)
fill(255,0,0);rect(0,0,100,100);
fill(0,255,255);rect(0,100,100,100);
fill(255,255,0);rect(0,200,100,100);
stroke(MyStorke); strokeWeight(MyTsuTsuDer);
}
void mouseDragged(){
line(mouseX,mouseY,pmouseX,pmouseY);
}
void mousePressed(){
if(mouseX<100 && mouseY<100){MyStorke=color(255,0,0);}
else if(mouseX<100 && mouseY<200){MyStorke=color(0,255,255);}
else if(mouseX<100 && mouseY<300){MyStorke=color(255,255,0);}
if(mouseX>700) MyTsuTsuDer=mouseY/30;
//若滑鼠在X設定位置內(mouseX>700)則筆刷隨Y座標越下面變大
}
2.用程式做出刮畫效果:
首先,先製作出背景:
PImage imgBG;
PImage imgBlack;
void setup(){
size(800,600);
imgBG=loadImage("a.jpg"); //找一張漸層圖片,丟進去程式裡面(最底層的圖)
imgBlack=createImage(800,600,ALPHA);
imgBlack.loadPixels();
for (int i=0;i<imgBlack.pixels.length;i++){
imgBlack.pixels[i] =color(255);
}
imgBlack.updatePixels();
}
void draw() {
image(imgBG, 0 ,0 ,width,height);
}
PImage imgBG;
PImage imgBlack;
void setup(){
size(800,600);
imgBG=loadImage("a.jpg"); //最底層的漸層圖
imgBlack=createImage(800,600,ARGB); //黑色背景(蓋住漸層圖)
imgBlack.loadPixels();
for (int i=0;i<imgBlack.pixels.length;i++){
imgBlack.pixels[i] =color(0,0,0,255); //color(red,green,blue,透明度Alpha)
}
imgBlack.updatePixels();
}
void draw() {
image(imgBG,0,0,width,height); //出現漸層圖
image(imgBlack,0,0,width,height); //出現黑色背景
}
void mouseDragged(){ //滑鼠拖曳函式
imgBlack.loadPixels(); //讀取像素
imgBlack.pixels[mouseX+mouseY*width] = color(0,0,0,0); //算出鼠標的點
imgBlack.updatePixels(); //更新像素
}
因為是用像素畫法,所以刮畫效果會呈現一點一點的,如下圖:
因為是用像素畫法,所以刮畫效果會呈現一點一點的,如下圖:
把Pixels點設大一點,就會有不同的效果:
PImage imgBG;
PGraphics pgBlack;
void setup(){
size(800,600);
imgBG=loadImage("a.jpg");
imgBG.resize(800,600);
pgBlack = createGraphics(800,600);
pgBlack.beginDraw();
pgBlack.background(0);
pgBlack.strokeWeight(50);
pgBlack.stroke(0,0,0,28);
pgBlack.endDraw();
}
void draw(){
background(0);
imgBG.mask(pgBlack);
if(keyPressed) image(pgBlack,0,0);
else image(imgBG,0,0,width,height);
}
void mouseDragged(){
pgBlack.beginDraw();
pgBlack.strokeWeight(45); pgBlack.stroke(255);
pgBlack.line(mouseX,mouseY,pmouseX,pmouseY);
pgBlack.endDraw();
}
再來是畫出漸層色的效果:
PImage imgBG;
PGraphics pgBlack;
void setup(){
size(800,600);
imgBG=loadImage("a.jpg");
imgBG.resize(800,600);
pgBlack = createGraphics(800,600);
pgBlack.beginDraw();
pgBlack.background(0);
pgBlack.strokeWeight(50);
pgBlack.stroke(0,0,0,28);
pgBlack.endDraw();
}
void draw(){
background(0);
imgBG.mask(pgBlack);
if(keyPressed) image(pgBlack,0,0);
else image(imgBG,0,0,width,height);
}
void mouseDragged(){
pgBlack.beginDraw();
pgBlack.strokeWeight(45); pgBlack.stroke(255);
pgBlack.line(mouseX,mouseY,pmouseX,pmouseY);
pgBlack.endDraw();
}
再來是畫出漸層色的效果:
PImage imgBG;
PGraphics pgBlack;
void setup(){
size(800,600);
imgBG=loadImage("a.jpg");
pgBlack=createGraphics(800,600);
pgBlack.beginDraw();
pgBlack.strokeWeight(50);
pgBlack.stroke(0,0,0,28);
pgBlack.endDraw();
}
void draw() {
image(imgBG,0,0,width,height);
image(pgBlack,0,0);
}
void mouseDragged(){
pgBlack.beginDraw();
pgBlack.strokeWeight(50);
pgBlack.stroke(255,255,255,100);
pgBlack.line(mouseX,mouseY,pmouseX,pmouseY);
pgBlack.endDraw();
}
void setup(){
size(800,600);
colorMode(HSB,800);
background(0);
strokeWeight(2);
}
void draw(){
if(mousePressed){
stroke(mouseX,mouseY,800);
line(mouseX,mouseY,pmouseX,pmouseY);
}
}











沒有留言:
張貼留言