1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90package GUI;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Composite;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
public class myImageAvatar extends JComponent{
private Icon icon;
private int borderSize;
public myImageAvatar() {}
public void setIcon(Icon icon) {
this.icon = icon;
}
public void setBorderSize(int borderSize) {
this.borderSize = borderSize;
}
@Override
protected void paintComponent(Graphics grphcs) {
if (icon != null) {
int width = getWidth(), height = getHeight();
int diameter = Math.min(width, height);
int x = width / 2 - diameter / 2;
int y = height / 2 - diameter / 2;
int border = borderSize*2;
diameter -= border;
Rectangle size = getAutoSize(icon, diameter);
BufferedImage img = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2_img = img.createGraphics();
g2_img.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2_img.fillOval(0, 0, diameter, diameter);
Composite composite = g2_img.getComposite();
g2_img.setComposite(AlphaComposite.SrcIn);
g2_img.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2_img.drawImage(toImage(icon), size.x, size.y, size.width, size.height, null);
g2_img.setComposite(composite);
g2_img.dispose();
Graphics2D g2 = (Graphics2D) grphcs;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
if (borderSize > 0) {
diameter += border;
g2.setColor(Color.gray); // set color for border
g2.fillOval(x, y, diameter, diameter);
}
if (isOpaque()) {
g2.setColor(getBackground());
diameter -= border;
g2.fillOval(x + borderSize, y + borderSize, diameter, diameter);
}
g2.drawImage(img, x + borderSize, y + borderSize, null);
}
super.paintComponent(grphcs);
}
private Rectangle getAutoSize(Icon image, int size) {
int w = size;
int h = size;
int iw = image.getIconWidth();
int ih = image.getIconHeight();
double xScale = (double) w / iw;
double yScale = (double) h / ih;
double scale = Math.max(xScale, yScale);
int width = (int) (scale * iw);
int height = (int) (scale * ih);
if (width < 1) {
width = 1;
}
if (height < 1) {
height = 1;
}
int x = (w - width) / 2;
int y = (h - height) / 2;
return new Rectangle(new Point(x, y), new Dimension(width, height));
}
private Image toImage(Icon icon) {
return ((ImageIcon) icon).getImage();
}
}