我有一個來自字節數組的緩衝圖像。我如何將圖像變成一個圓圈?作物?我不想轉了一圈,我想原單形象成爲圓形和顯示Bufferedimage成圓形
def bufferedImage = imgSvc.convertByteArrayToBufferedImage(crop.image)
我有一個來自字節數組的緩衝圖像。我如何將圖像變成一個圓圈?作物?我不想轉了一圈,我想原單形象成爲圓形和顯示Bufferedimage成圓形
def bufferedImage = imgSvc.convertByteArrayToBufferedImage(crop.image)
您可以使用Graphics類的setClip的()方法將圖形上下文的繪圖區域限制在一個特定的區域。這個缺點是這個剪輯不會被消除。
有一些更高級的技巧來達到一個更好看的結果,看到回答以下問題:
這可以幫助
g.setClip(new Ellipse2D.Float(x, y, w, h));
g.drawImage(yourBufferedImage, x, y, w, h, null);
如果bufferedImage
被平方,則使用此代碼:
int width = bufferedImage.getWidth();
BufferedImage circleBuffer = new BufferedImage(width, width, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = circleBuffer.createGraphics();
g2.setClip(new Ellipse2D.Float(0, 0, width, width));
g2.drawImage(bufferedImage, 0, 0, width, width, null);
你在circleBuffer
圓形裁剪圖像我不會發布這作爲一個答案,看到它可能不是最好的解決辦法,但使用半徑爲畢達哥拉斯測量和複製像素圖像到半徑範圍內的所有其他圖像都可以工作,但可能是馬虎。你將不得不使用BufferedType.TYPE_ARGB。當然包括alpha透明度。 – 2013-02-06 16:38:07