java怎么实现将 bmp图片黑底白字转换为白底黑字?将白色设置为透明色,谢谢

 我来答
yinfengnong
2018-08-05 · TA获得超过5619个赞
知道大有可为答主
回答量:2344
采纳率:89%
帮助的人:2294万
展开全部

代码如下:

package com.baidu.demo019;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;

import javax.imageio.ImageIO;
import javax.swing.*;

public class App extends JFrame {

private static final long serialVersionUID = 1L;

public App() {

this.setSize(500, 500);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Box box = Box.createVerticalBox();
this.add(box);

// 源图像路径
String imageFile = "images/demo019.bmp";

// 源图像
BufferedImage image1 = getImage(imageFile);

JLabel label1 = new JLabel(new ImageIcon(image1));

JPanel panel1 = new JPanel(new BorderLayout());
panel1.add(label1);

box.add(panel1);


// 转换后的图像

Image image2 = translateImage(image1);

JLabel label2 = new JLabel(new ImageIcon(image2));

JPanel panel2 = new JPanel(new BorderLayout());

panel2.add(label2);

box.add(panel2);
}

BufferedImage getImage(String imageFile) {

BufferedImage image = null;

try {

image = ImageIO.read(new File(imageFile));

} catch (IOException e) {
e.printStackTrace();
}

return image;
}

// 转换图像 黑底白字转换为白底黑字,白色设置为透明色
private Image translateImage(BufferedImage image) {

int width = image.getWidth();
int height = image.getHeight();

BufferedImage target = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {

int val = image.getRGB(i, j);

int red = (val >> 16) & 0xff;
int green = (val >> 8) & 0xff;
int blue = val  & 0xff;

red = 255 - red;
green = 255 - green;
blue = 255 - blue;

int alpha = 0xff;

if ((red + green + blue) / 3 >= 0xff) {
alpha = 0x00;
}

int pixel = (alpha << 24) | (red << 16) | (green << 8) | (blue);

target.setRGB(i, j, pixel);
}
}

return target;
}

public static void main(String[] args) {
new App().setVisible(true);
}
}

运行结果:

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式