ตัวอย่างที่ผมนำมาทดลองนะครับ
https://www.cp.eng.chula.ac.th/~somchai/ULearn/Programming/index.htm
1. การพัฒนาซอฟต์แวร์ >>> วงจรการพัฒนาโปรแกรม
************************
ปัญหาที่ผมสงสัยครับ
************************
ผมได้ลองนำภาพเคลื่อนไหว ชื่อ bird 4.gif = รูปการ์ตูนเคลื่อนไหว
มาซ้อนทับภาพนิ่ง ชื่อ sky3.jpg = รูปภาพมือ
===========
สิ่งที่ต้องการ คือ ภาพการ์ตูนเคลื่อนไหว อยู่บนมือ (ภาพมือ คือ ภาพนิ่ง )
===========
**** แต่ผลลัพธ์ที่แสดงออกมา กลับเป็นภาพนิ่ง
sky3.jpg = รูปภาพมือ
[img]http://image.free.in.th/v/2013/ia/190705022032.jpg[/img]
bird 4.gif = รูปการ์ตูนเคลื่อนไหว ( ต้องเปิดด้วย internet exploer นะครับ)
[img]http://image.free.in.th/v/2013/ie/190705022334.gif[/img]
=========
code JLAB ( copy comment ภาษาไทย จาก JLab แล้ว ภาษาไทยมันมั่วๆ นะครับ )
=========
import jlab.graphics.DWindow;
import java.util.Scanner;
/* โปรแกรมผสมภาพ นะครับ */
public class ChromaKey {
public static void main(String[] args) {
DWindow wfg = new DWindow(); // สร้างหน้าต่างเบื้องหน้า
wfg.loadImage("c:/java101/bird4.gif"); //นำภาพเบื้องหน้า (รูปการ์ตุน) ขึ้นมา
DWindow wbg = new DWindow(); //สร้างหน้าต่างเบื้องหลัง
wbg.loadImage("c:/java101/sky3.jpg"); //นำภาพเบื้องหลัง (รูปมือ) ขึ้นมา
int width = wfg.getWidth(); //นำค่าความกว้างของรูปการ์ตูน มาเก็บในตัวแปร width
int height = wfg.getHeight(); //นำค่าความสูงของรูปการ์ตูน มาเก็บในตัวแปร height
DWindow win = new DWindow(width, height); //สร้างหน้าต่าง win ที่มีความสูง กับ ความกว้างเท่ากับขนาดของรูปการ์ตูน
int[][] fg = wfg.getPixmap(); //หยิบข้อมูลของรูปมือ ออกมาทีละจุดเม็ดสี
int[][] bg = wbg.getPixmap(); //หยิบข้อมูลของรูปการ์ตูน ออกมาทีละจุดเม็ดสี
int[][] mix = win.getPixmap(); //สร้างหน้าต่างขึ้นใหม่เพื่อรองรับรูปผสม ระหว่างมือ กับ การ์ตูน
for (int x = 0; x < fg.length; x++) { //เทียบเม็ดสีทีละจุดระหว่างภาพมือกับการ์ตูน เริมต้นจากแนวนอน
//เพิ่มค่าแนวนอนทีละ1
for (int y = 0; y < fg[0].length; y++) { //เทียบเม็ดสีทีละจุดระหว่างภาพมือกับการ์ตูน เริมต้นจากแนวตั้ง
//เพิ่มค่าแนวแกนตั้งทีละ1
int g = DWindow.getG(fg[x][y]); //หยิบแม่สีเขียว ของภาพมือ พิกัด(x,y) เก็บในตัวแปร g
if (g == 255) { //ตรวจสอบว่า แม่สีเขียวที่หยิบมา เป็นสีสดหรือไม่
mix[x][y] = bg[x][y]; //ถ้าจุดที่หยิบมาเป็นสีเขียวสด ให้นำจุดในภาพมือ พิกัด(x,y)
//ไปใส่ในภาพผสมที่พิกัด (x,y)
} else { //ถ้าไม่ใช่สีเขียวสด
mix[x][y] = fg[x][y]; //ให้นำจุดในภาพการ์ตูน พิกัด(x,y) ไปใส่ในภาพผสมที่พิกัด (x,y)
}
}
}
win.setPixmap(mix); //เอารูปที่ผสมเสร็จแล้ว ไปตั้งที่หน้าต่างผลลัพธ์แล้วแสดงภาพออกมา
}
}
ขอบคุณครับ
+++++ไม่เกี่ยวข้องนะ++++++++++++
https://ppantip.com/topic/39015803
+++++++++++++++++++++++++++
ปัญหา Java JLab นำรูปเคลื่อนไหวมาซ้อนทับรูปนิ่ง
https://www.cp.eng.chula.ac.th/~somchai/ULearn/Programming/index.htm
1. การพัฒนาซอฟต์แวร์ >>> วงจรการพัฒนาโปรแกรม
************************
ปัญหาที่ผมสงสัยครับ
************************
ผมได้ลองนำภาพเคลื่อนไหว ชื่อ bird 4.gif = รูปการ์ตูนเคลื่อนไหว
มาซ้อนทับภาพนิ่ง ชื่อ sky3.jpg = รูปภาพมือ
===========
สิ่งที่ต้องการ คือ ภาพการ์ตูนเคลื่อนไหว อยู่บนมือ (ภาพมือ คือ ภาพนิ่ง )
===========
**** แต่ผลลัพธ์ที่แสดงออกมา กลับเป็นภาพนิ่ง
sky3.jpg = รูปภาพมือ
[img]http://image.free.in.th/v/2013/ia/190705022032.jpg[/img]
bird 4.gif = รูปการ์ตูนเคลื่อนไหว ( ต้องเปิดด้วย internet exploer นะครับ)
[img]http://image.free.in.th/v/2013/ie/190705022334.gif[/img]
=========
code JLAB ( copy comment ภาษาไทย จาก JLab แล้ว ภาษาไทยมันมั่วๆ นะครับ )
=========
import jlab.graphics.DWindow;
import java.util.Scanner;
/* โปรแกรมผสมภาพ นะครับ */
public class ChromaKey {
public static void main(String[] args) {
DWindow wfg = new DWindow(); // สร้างหน้าต่างเบื้องหน้า
wfg.loadImage("c:/java101/bird4.gif"); //นำภาพเบื้องหน้า (รูปการ์ตุน) ขึ้นมา
DWindow wbg = new DWindow(); //สร้างหน้าต่างเบื้องหลัง
wbg.loadImage("c:/java101/sky3.jpg"); //นำภาพเบื้องหลัง (รูปมือ) ขึ้นมา
int width = wfg.getWidth(); //นำค่าความกว้างของรูปการ์ตูน มาเก็บในตัวแปร width
int height = wfg.getHeight(); //นำค่าความสูงของรูปการ์ตูน มาเก็บในตัวแปร height
DWindow win = new DWindow(width, height); //สร้างหน้าต่าง win ที่มีความสูง กับ ความกว้างเท่ากับขนาดของรูปการ์ตูน
int[][] fg = wfg.getPixmap(); //หยิบข้อมูลของรูปมือ ออกมาทีละจุดเม็ดสี
int[][] bg = wbg.getPixmap(); //หยิบข้อมูลของรูปการ์ตูน ออกมาทีละจุดเม็ดสี
int[][] mix = win.getPixmap(); //สร้างหน้าต่างขึ้นใหม่เพื่อรองรับรูปผสม ระหว่างมือ กับ การ์ตูน
for (int x = 0; x < fg.length; x++) { //เทียบเม็ดสีทีละจุดระหว่างภาพมือกับการ์ตูน เริมต้นจากแนวนอน
//เพิ่มค่าแนวนอนทีละ1
for (int y = 0; y < fg[0].length; y++) { //เทียบเม็ดสีทีละจุดระหว่างภาพมือกับการ์ตูน เริมต้นจากแนวตั้ง
//เพิ่มค่าแนวแกนตั้งทีละ1
int g = DWindow.getG(fg[x][y]); //หยิบแม่สีเขียว ของภาพมือ พิกัด(x,y) เก็บในตัวแปร g
if (g == 255) { //ตรวจสอบว่า แม่สีเขียวที่หยิบมา เป็นสีสดหรือไม่
mix[x][y] = bg[x][y]; //ถ้าจุดที่หยิบมาเป็นสีเขียวสด ให้นำจุดในภาพมือ พิกัด(x,y)
//ไปใส่ในภาพผสมที่พิกัด (x,y)
} else { //ถ้าไม่ใช่สีเขียวสด
mix[x][y] = fg[x][y]; //ให้นำจุดในภาพการ์ตูน พิกัด(x,y) ไปใส่ในภาพผสมที่พิกัด (x,y)
}
}
}
win.setPixmap(mix); //เอารูปที่ผสมเสร็จแล้ว ไปตั้งที่หน้าต่างผลลัพธ์แล้วแสดงภาพออกมา
}
}
ขอบคุณครับ
+++++ไม่เกี่ยวข้องนะ++++++++++++
https://ppantip.com/topic/39015803
+++++++++++++++++++++++++++