私はポリゴンクラスを操作していて、ポリゴン内のピクセル値を透明に設定するか、可能であればそれらをすべて一緒に削除しようとしていますが、値をRGBとして保存しようとしているため、少し壁にぶつかりましたint値であり、この方法でピクセルを透明/削除する方法がわかりません。
これに加えて、私も同じことをしたいと思いますが、ポリゴン内に含まれるピクセルのみを残すために、可能であればポリゴンの内側にピクセルを保持し、外側のピクセルを削除します。私は以前にこれを探し回ったことがありますが、役に立ちませんでした。
私はこれのためにSSCCEを作成しようとしましたが、時間をかけて助けてくれる人が簡単に操作して表示できるようにしましたが、作成に取り組んでいるはるかに大きなプログラムの一部であるため、時間がかかることが証明されていますが、一度はこの問題をよりよく示すために作業している人がいます。この投稿を編集します。
この問題で私を助けるために時間を割いてくれた誰かに感謝します
以下に、すでに指定されたポリゴン内に含まれるピクセルをセグメント化するために現在使用しているコードをいくつか示します。これは、ポリゴンの外側のピクセルを透明に設定する方法と非常によく似ていますが、ifステートメントの引数を入れ替えて画像のセグメントを削除し、画像を保存するのではなくnewImageを返すだけで、完全に機能します。この方法でポリゴンに含まれるピクセルを保存すると、何らかの理由で保存されません。
public void saveSegment(int tabNum, BufferedImage img) {
segmentation = new GUI.Segmentation();
Polygon p = new Polygon();
Color pixel;
p = createPolygon(segmentation);
int height = img.getHeight();
int width = img.getWidth();
newImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
//loop through the image to fill the 2d array up with the segmented pixels
for(int y = 0; y < height; y++) {
for(int x = 0; x < width; x++) {
//If the pixel is inside polygon
if(p.contains(x, y) == true) {
pixel = new Color(img.getRGB(x, y));
//set pixel equal to the RGB value of the pixel being looked at
int r = pixel.getRed(); // red component 0...255
int g = pixel.getGreen(); // green component 0...255
int b = pixel.getBlue(); // blue component 0...255
int a = pixel.getAlpha(); // alpha (transparency) component 0...255
int col = (a << 24) | (r << 16) | (g << 8) | b;
newImage.setRGB(x, y, col);
}
else {
pixel = new Color(img.getRGB(x, y));
int a = 0; // alpha (transparency) component 0...255
int col = (a << 24);
newImage.setRGB(x, y, col);
}
}
}
try {
//then save as image once all in correct order
ImageIO.write(newImage, "bmp", new File("saved-Segment.bmp"));
JOptionPane.showMessageDialog(null, "New image saved successfully");
} catch (IOException e) {
e.printStackTrace();
}
}