Во-первых, вам нужно создать java.awt.image.BufferedImage из java.awt.Image.Вот некоторый код для этого: DZone Snippets .
/**
* @author Anthony Eden
*/
public class BufferedImageBuilder {
private static final int DEFAULT_IMAGE_TYPE = BufferedImage.TYPE_INT_RGB;
public BufferedImage bufferImage(Image image) {
return bufferImage(image, DEFAULT_IMAGE_TYPE);
}
public BufferedImage bufferImage(Image image, int type) {
BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), type);
Graphics2D g = bufferedImage.createGraphics();
g.drawImage(image, null, null);
waitForImage(bufferedImage);
return bufferedImage;
}
private void waitForImage(BufferedImage bufferedImage) {
final ImageLoadStatus imageLoadStatus = new ImageLoadStatus();
bufferedImage.getHeight(new ImageObserver() {
public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
if (infoflags == ALLBITS) {
imageLoadStatus.heightDone = true;
return true;
}
return false;
}
});
bufferedImage.getWidth(new ImageObserver() {
public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
if (infoflags == ALLBITS) {
imageLoadStatus.widthDone = true;
return true;
}
return false;
}
});
while (!imageLoadStatus.widthDone && !imageLoadStatus.heightDone) {
try {
Thread.sleep(300);
} catch (InterruptedException e) {
}
}
}
class ImageLoadStatus {
public boolean widthDone = false;
public boolean heightDone = false;
}
}
Теперь, когда у вас есть BufferedImage, вы можете использовать тот многоугольник координат, который вам нужен, чтобы повернуть пиксели, которые нечеловек, прозрачныйПросто используйте методы, предоставленные в BufferedImage.
Вы не можете буквально вырезать многоугольник из BufferedImage.BufferedImage должен быть прямоугольником.Лучшее, что вы можете сделать - сделать части изображения, которые вам не нужны, прозрачными.Или вы можете поместить нужные пиксели в другое прямоугольное изображение BufferedImage.