간단한 작업을하려고합니다. 바이너리 이미지가 있고 컬러 이미지에 바이너리 이미지를 오버레이하는 것이지만 이진 이미지의 흰색 픽셀은 빨간색이어야하고 검정색 투명해야합니다. 저는 JavaFx에 익숙하지만 저는이 문제에 익숙합니다. PixelReader를 사용하여 모든 픽셀을 반복 처리하여 얻을 수 있지만 더 쉬운 방법이라고 확신합니다. 나는 어떤 종류의 혼합 효과를 사용하려고 시도했지만 지금까지는 운이 없다. 는 나는 다음과 유사해야한다고 생각 : How to Blend two Image in javaFXjavafx에서 이미지 오버레이 마스크 만들기
내가이 함께했다 : 이미지 이미지 = 새 이미지 ("/ circle.jpg", 거짓); ImageView iv = 새로운 ImageView (이미지);
Image mask = new Image("/mask.jpg", false);
ImageView ivMask = new ImageView(mask);
Rectangle r = new Rectangle(mask.getWidth(), mask.getHeight());
r.setFill(Color.RED);
r.setBlendMode(BlendMode.MULTIPLY); // sets the white area red
Group g = new Group(ivMask, r); // sets the white area red
// this is not working as expected
iv.setBlendMode(BlendMode.DIFFERENCE);
Group g2 = new Group(iv, g);
의견을 보내 주셔서 감사합니다. 오버레이를 만드는 것보다 픽셀 단위로 처리하는 것이 빠르다고 생각되면 알려 주시기 바랍니다. 픽셀 독자에 의해
솔루션은 다음과 같습니다
Pane root = new Pane();
// read the underlaying image
root.getChildren().add(new ImageView(new Image("/src.jpg")));
Image mask = new Image("/mask.jpg");
PixelReader pixelReader = mask.getPixelReader();
Canvas resultCanvas = new Canvas();
root.getChildren().add(resultCanvas);
GraphicsContext resultLayer = resultCanvas.getGraphicsContext2D();
for (int y = 0; y < mask.getHeight(); y++) {
for (int x = 0; x < mask.getWidth(); x++) {
if(pixelReader.getColor(x, y).equals(Color.WHITE)){
resultLayer.fillRect(x, y, 1.0, 1.0);
}
}
}
건배!
코드입니다. :-) – blaster
나는 당신의 대답으로 무언가를 시도했다. 몇 가지 스텐실 (동일한 치수와 이진수)을 결합하고 싶습니다. 나는 스텐실 (스텐실 이미지를 의미 함)으로 행동해야하는 그룹을 만들었다. sth ImageView처럼 iv1 = 새로운 ImageView (스텐실 1); iv1.setBlendMode (BlendMode.ADD) 등등 ..이 그룹에 넣어. 여태까지는 그런대로 잘됐다. 거꾸로 된 스텐실을 만들기 위해 위의 코드를 사용하고 새로운 ImageView (스텐실)를 미리 만든 그룹으로 대체했습니다. 그러나 결과는 검은 색입니다. 어떤 제안? – blaster
나는 당신의 코멘트 블래스터를 이해하지 못한다. 원래 질문과 다른 것을 시도하고 어려움을 겪고 있다면 새로운 질문을하십시오. – jewelsea