자바 스윙 음악 재생 기 데스크 톱 가사 글꼴 변색 효과 구현
그 중에서 자모'U'는 두 가지 색깔 이 있 는데 갑자기 기발 하 게 생각해 서 문자 의 변색 을 실현 한다.
사고방식:두 가지 색 을 사용 하여 각각 두 개의 BufferedImage 에 문자열 을 그리고 두 가지 색 이 차지 하 는 공간의 비례 에 따라 두 개의 BufferedImage 에 대응 하 는 내용 을 지우 고 마지막 으로 두 개의 BufferedImage 를 하나 로 합 친다.
효과 도
다음 코드 를 통 해 두 색상 의 비율 을 변경 할 수 있 습 니 다.
StringTwoColor stc = new StringTwoColor(jl1, Color.RED, Color.gray, 0.8);//0.8
비율 변경 후 효과 그림물론 한 글자 만 사용 할 수도 있다.
다음은 테스트 부분 을 포함 하 는 전체 코드 입 니 다.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class StringTwoColor{
private BufferedImage buffImg;
/**
* @param label JLabel
* @param c1 1
* @param c2 2
* @param ratio 1 2
*/
public StringTwoColor(JLabel label, Color c1, Color c2, double ratio){
// ( px)
FontMetrics metrics = label.getFontMetrics(label.getFont());
int width = metrics.stringWidth(label.getText());
int height = metrics.getHeight();
height+=label.getFont().getSize();
// BufferedImage
buffImg = new BufferedImage(width,height,BufferedImage.TYPE_4BYTE_ABGR);
BufferedImage buffImg1 = new BufferedImage(width,height,BufferedImage.TYPE_4BYTE_ABGR);
BufferedImage buffImg2 = new BufferedImage(width,height,BufferedImage.TYPE_4BYTE_ABGR);
// BufferedImage Graphics2D
Graphics2D g1 = buffImg1.createGraphics();
Graphics2D g2 = buffImg2.createGraphics();
//
g1.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//
g1.setFont(label.getFont());
g2.setFont(label.getFont());
//
g1.setColor(c1);
g2.setColor(c2);
//
g1.drawString(label.getText(), 0, height-label.getFont().getSize());
g2.drawString(label.getText(), 0, height-label.getFont().getSize());
//
if(ratio<1 && ratio>0){
int rgb = 0x00000000;
// buffImg1
for(int y=0;y<height;y++){
for(int x=width-1;x>=width*ratio;x--){
buffImg1.setRGB(x, y, rgb);
}
}
// buffImg2
for(int y=0;y<height;y++){
for(int x=0;x<width*ratio;x++){
buffImg2.setRGB(x, y, rgb);
}
}
// buffImg
for(int y=0;y<height;y++){
for(int x=0;x<width*ratio;x++){
buffImg.setRGB(x,y,buffImg1.getRGB(x, y));
}
}
for(int y=0;y<height;y++){
for(int x=width-1;x>=width*ratio;x--){
buffImg.setRGB(x,y,buffImg2.getRGB(x, y));
}
}
}
}
/**
* ImageIcon
* @return
*/
public ImageIcon getImageIcon(){
Image img = buffImg;
ImageIcon imgIcon = new ImageIcon(img);
return imgIcon;
}
public static void main(String[] args) {
JFrame jf = new JFrame();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setSize(300, 200);
jf.setLocationRelativeTo(null);
jf.setLayout(new BorderLayout());
JLabel jl1 = new JLabel(" ");
//JLabel jl1 = new JLabel(" ");
jl1.setFont(new Font(" ",Font.PLAIN,30));
StringTwoColor stc = new StringTwoColor(jl1, Color.RED, Color.gray, 0.7);
//
JLabel jl2 = new JLabel(stc.getImageIcon());
jf.add(jl2, BorderLayout.CENTER);
jf.setVisible(true);
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.