-
Processing 구현중 3작가/코드 2014. 9. 16. 23:46
RGB Average Image
결과
PImage[] img;
int num = 4; // number of images
int loca = 0; // index of pixels
float[] r_total, g_total, b_total; // 각 픽셀 위치의 RGB 값 합산 결과
void setup()
{
size(500, 400); // 타일드디스플레이의 각 모니터 가로세로 비율 기준
img = new PImage[num];
r_total = new float[width*height];
g_total = new float[width*height];
b_total = new float[width*height];
//// images loading
for (int i = 0; i < num; i++)
{
img[i] = loadImage("trip"+(i+1)+".jpg");
img[i].resize(500, 400);
}
}
void draw()
{
for(int i=0; i<(width*height); i++)
{
r_total[i]=0;
g_total[i]=0;
b_total[i]=0;
}
////////// 끙끙대다 마지막에 풀린 부분
// draw()는 setup()과 달리 반복적으로 호출된다.
// 그러므로 전역변수에 for문 내의 값이 반복적으로 저장되는 걸 초기화시켜줄 필요가 있다.
////////// 스페셜땡스투 백구
println(r_total[100]); //// 문제 해결 후의 확인출력 (0.0과 255.0 사이의 값이 출력됨)
for (int i = 0; i < num; i++)
{
//// each image started
loadPixels();
img[i].loadPixels();
loca = 0;
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
// loca = x + y * width;
float r = red(img[i].pixels[loca]);
float g = green(img[i].pixels[loca]);
float b = blue(img[i].pixels[loca]);
// pixels[loca] = color(r, g, b);
r_total[loca] += r;
g_total[loca] += g;
b_total[loca] += b;
loca++; // 위 loca.. 줄보다 직관적인 것 같아서
}
}
updatePixels();
//// each image closed
}
//// pure draw region
// println(r_total[100]); //// 문제 해결 전의 확인출력 (값이 255.0을 훨씬 뛰어넘어 지속적으로 증가함)
loadPixels();
for (loca = 0; loca < (width*height); loca++)
{
pixels[loca] = color(r_total[loca]/num, g_total[loca]/num, b_total[loca]/num);
//// 컬러 값을 컨트롤하는 pixels[]에 RGB 값를 넣을 뿐이지만 결과적으로는 이미지를 그리는 역할임
//// 반드시 전후로 loadPixels() 및 updatePixels() 가 수반되어야 함
}
updatePixels();
//// draw closing
}
trip1~4.jpg
'작가 > 코드' 카테고리의 다른 글
Processing 구현중 - Mosaic Learning 2 (0) 2014.10.19 Processing 구현중 - Mosaic Learning 1 (0) 2014.10.19 Processing 구현중 2 (0) 2014.09.16 Processing 구현중 1 (0) 2014.09.12 Processing Example - Alphamask (0) 2014.09.11