2012-07-18 12 views
8

Trong một dự án, tôi muốn thay đổi kích thước đồng thời và thay đổi độ mờ của hình ảnh. Cho đến nay tôi nghĩ rằng tôi đã có thay đổi kích thước xuống. Tôi sử dụng một phương pháp được xác định như vậy để thực hiện thay đổi kích thước:Thay đổi độ mờ ảnh

public BufferedImage resizeImage(BufferedImage originalImage, int type){ 

    initialWidth += 10; 
    initialHeight += 10; 
    BufferedImage resizedImage = new BufferedImage(initialWidth, initialHeight, type); 
    Graphics2D g = resizedImage.createGraphics(); 
    g.drawImage(originalImage, 0, 0, initialWidth, initialHeight, null); 
    g.dispose(); 

    return resizedImage; 
} 

Tôi nhận được mã này từ đây. Những gì tôi không thể tìm thấy một giải pháp để thay đổi độ mờ đục. Đó là những gì tôi đang tự hỏi làm thế nào để làm (nếu nó có thể ở tất cả). Cảm ơn trước.

CẬP NHẬT:

Tôi đã thử mã này để hiển thị một hình ảnh của một vòng tròn với bên trong minh bạch và outsides (xem bên dưới hình ảnh) ngày càng tăng và trở nên ngày càng ít đục, nhưng nó đã không làm việc. Tôi không biết có gì sai. Tất cả các mã trong một lớp được gọi là Animation

public Animation() throws IOException{ 

    image = ImageIO.read(new File("circleAnimation.png")); 
    initialWidth = 50; 
    initialHeight = 50; 
    opacity = 1; 
} 

public BufferedImage animateCircle(BufferedImage originalImage, int type){ 

     //The opacity exponentially decreases 
     opacity *= 0.8; 
     initialWidth += 10; 
     initialHeight += 10; 

     BufferedImage resizedImage = new BufferedImage(initialWidth, initialHeight, type); 
     Graphics2D g = resizedImage.createGraphics(); 
     g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, opacity)); 
     g.drawImage(originalImage, 0, 0, initialWidth, initialHeight, null); 
     g.dispose(); 

     return resizedImage; 

} 

Tôi gọi nó là như thế này:

Animation animate = new Animation(); 
int type = animate.image.getType() == 0? BufferedImage.TYPE_INT_ARGB : animate.image.getType(); 
BufferedImage newImage; 
while(animate.opacity > 0){ 

    newImage = animate.animateCircle(animate.image, type); 
    g.drawImage(newImage, 400, 350, this); 

} 
+0

Để được trợ giúp tốt hơn sớm hơn, hãy đăng [SSCCE] (http://sscce.org/). –

Trả lời

19

trước tiên hãy chắc chắn rằng các loại mà bạn đang đi vào phương pháp chứa một kênh alpha, như

BufferedImage.TYPE_INT_ARGB 

và sau đó ngay trước khi bạn vẽ hình ảnh mới, hãy gọi phương thức Graphics2D setComposite như sau:

float opacity = 0.5f; 
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, opacity)); 

sẽ đặt độ mờ bản vẽ thành 50%.

+0

Tôi sẽ thử và liên hệ lại với bạn nếu nó hoạt động. – pasawaya

+0

Ngoài ra, chỉ cần kiểm tra, không 1 tương ứng với hoàn toàn có thể nhìn thấy và 0 để minh bạch? Cảm ơn. Và ngoài ra, tôi có gọi 'setComposite() 'trước hoặc sau khi tôi vẽ không? – pasawaya

+1

0 là trong suốt, 1 là mờ – MadProgrammer