- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想制作一个小程序,可以让您更改图像选定像素的 Alpha channel 。想想photoshop上的橡皮擦工具。所以,我让程序在图像上绘制颜色,并尝试使用 setRGB(0x00000000,0x00000000,0x00000000)
将像素设置为 alpha 0;没有骰子,只是涂成黑色。
我也试过画一个蓝色的椭圆形(效果很好),所以我知道我的鼠标监听器正在工作。 (这在代码中注释掉了)
现在我正在获取该图像的光栅并尝试使用 setPixels()
修改 alpha chanel , 或 setRect()
,但我似乎无法让它工作。我想我的问题是你必须通过的数组。我假设它是一个 10 x 10 像素阵列和 4 个 channel ,因此阵列长度必须为 400。
这是我第一次尝试这个,所以我的代码有点丑,注释掉了很多东西,因为我已经尝试了大约一百万种方法;但它在这里。
提前感谢您的任何帮助。
import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.Raster;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MyFrame extends JFrame implements MouseListener,
MouseMotionListener {
BufferedImage myImage = new BufferedImage(300, 300,
BufferedImage.TYPE_INT_ARGB);
BufferedImage blankImage = new BufferedImage(10, 10,
BufferedImage.TYPE_INT_ARGB);
File myPNG = new File("output.png");
MyPanel mp = new MyPanel();
File tempPNG = new File("temp.png");
File initialFile = new File("test.jpg");
Color blankColor = new Color(0, 0, 0, .0f);
int diameter = 10;
int mouseX = 0;
int mouseY = 0;
boolean mouseClicked = false;
boolean fileCreated;
WritableRaster myRaster;
WritableRaster blankRaster;
int[] emptySquare = new int[400];
ColorModel colorModel = myImage.getColorModel();
public MyFrame() {
setLayout(new BorderLayout());
setSize(800, 800);
add(mp, BorderLayout.EAST);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
setFocusable(true);
addMouseListener(this);
addMouseMotionListener(this);
for (int x = 0; x < 10; x++) {
for (int y = 0; y < 10; y++) {
for (int b = 0; b < 4; b++) {
emptySquare[x * y * b] = 0x00000000;
}
}
}
myRaster = myImage.getRaster();
blankRaster = blankImage.getRaster();
try {
myImage = ImageIO.read(initialFile);
fileCreated = ImageIO.write(myImage, "png", tempPNG);
myImage = ImageIO.read(tempPNG);
} catch (Exception e) {
}
}
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.BLACK);
// g2d.fillRect(0, 0, 300, 300);
g2d.drawImage(myImage, 0, 0, 300, 300, null);
// g2d.setColor(blankColor);
// g2d.setPaint(Color.blue);
// myImage.
}
private class MyPanel extends JPanel {
private MyPanel() {
}
}
@Override
public void mouseClicked(MouseEvent m) {
repaint();
}
@Override
public void mouseEntered(MouseEvent m) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent m) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent m) {
repaint();
}
@Override
public void mouseReleased(MouseEvent m) {
// TODO Auto-generated method stub
}
@Override
public void mouseDragged(MouseEvent m) {
mouseX = m.getX();
mouseY = m.getY();
myRaster.setDataElements(mouseX, mouseY, blankRaster);
myImage = new BufferedImage(colorModel, myRaster, true, null);
myImage.setData(blankRaster);
myRaster.setPixel(mouseX, mouseY, emptySquare);
myImage.setData(blankRaster);
AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .1f);
Graphics2D tempG2d = myImage.createGraphics();
tempG2d.setComposite(AlphaComposite.Clear);
// tempG2d.setColor(Color.blue);
tempG2d.fillOval(mouseX, mouseY, diameter, diameter);
// tempG2d.setColor(blankColor);
// tempG2d.setComposite(AlphaComposite.Src);
for (int i = mouseX; i < mouseX + diameter; i++) {
for (int j = mouseY; j < mouseY + diameter; j++) {
int white = 0xffffff;
Color c = new Color(0xccFF0000, true);
int color = myImage.getRGB(i, j) & 0x00ffffff; // use bitwise &
// to remove
// alpha
// component
myRaster.setPixel(mouseX, mouseY, emptySquare);
myImage.setData(myRaster);
// myImage.setRGB(i,j,color); // transparent white
}
}
// tempG2d.fillOval(mouseX, mouseY, diameter, diameter);
try {
// fileCreated=ImageIO.write(myImage, "png", tempPNG);
} catch (Exception e) {
}
repaint();
}
@Override
public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
最佳答案
相反,使用 getPixel()
在底层Raster
,清除 alpha 字节,并使用 setPixel()
更新图像和更新的数组。另见此相关 example .
关于java - 在java中将像素的alpha channel 设置为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9383988/
我很好奇为什么以下不起作用。一般select用default:防止死锁,但在这种情况下不是: package main import "fmt" func main () { a := mak
我一生都无法弄清楚如何切换图像排序。图像以 (x,x,3) 格式读取,theano 要求它是 (3,x,x) 格式。我尝试更改顺序numpy.array([img[:,:,i] for i in ra
我正在向 libnl 发送单个 SSID 和频率进行扫描,但我得到了多个扫描结果以及我请求的 SSID 和频率,但我需要单个扫描结果(仅适用于请求的 SSID),如何实现这一点。请帮助我,我也发送了我
我是 Golang 的新手,但正在努力理解这门伟大的语言!请帮帮我.. 我有 2 个 channel 。 “进”和“出” channel in, out := make(chan Work),
例如我有这段代码: package main import ( "fmt" ) func main() { c1 := make(chan interface{}) close
我们使用以下调用来获取经过身份验证的用户的 ChannelID,它适用于大多数情况。一些 YouTube 用户将他们的 channel 连接到 Google+ 信息页,但在这种情况下,我们的一位用户无
case 'sinfo': const sinfo = new Discord.MessageEmbed() .addField('Server Name 🔎 :', message.guild.n
我需要让所有 channel 来创建一个 bunker 命令,这使得所有 channel 都是只读的。 最佳答案 他们变了Client.servers至 Client.guilds在 newer ve
为什么当第二个值通过另一个 go routine 发送并且没有收到发送的第一个值时, channel c 没有缓冲? package main import "fmt" func sum(s []in
据我所知,内置的 split 会将一个 3 channel Mat 拆分为三个 1 channel Mat。结果,这三个 Mat 只是具有一些不同强度的灰度。 我的意图是获得三个 3 channel
如何检测当前的 RAM 配置?我需要询问 Windows RAM 当前是在单 channel 、双 channel 还是四 channel 中运行。 我搜索了很多,并没有在这个网站或其他网站上找到任何
我需要拆分一个多 channel wav 文件并将每个 channel 编码为 mp3 文件。 我知道 gtresamer 的 deinterleave 插件,但我不确定如何将它用于 wav 文件以及
关闭。这个问题需要details or clarity .它目前不接受答案。 想要改进这个问题吗? 通过 editing this post 添加详细信息并澄清问题. 关闭 8 年前。 Improve
我正在尝试运行 Hyperledger Fabric 网络,它由单个订购者、单个对等节点和一个 cli 组成。为了学习启动 Hyperledger Fabric 网络的过程,从创建与加密相关的工件到将
我在 Laravel 中使用事件广播。我正在使用基于角色的通知访问权限。我有用于广播的自定义 auth guard。当用户连接到 channel 时,客户端将具有内部权限的 access_token
我正在编写一个使用 Elixir Channels 来处理实时事件的应用程序。我知道每个客户端将打开 1 个套接字,并且可以在其上多路复用多个 channel 。所以我的应用程序是一个聊天应用程序,其
我有一些 .wav 文件,我想转换它们的频率 (fs) 和 channel 数 (nchannels)。我在jupyter笔记本python3.6上使用ffmpeg。我使用了以下命令并且它有效。 cm
我有一个视频渲染器,它需要两个 H265 流(YUV420),我需要烘焙它们以使它们中的一个与另一个形成 alpha 蒙版。这一切都已解决并且效果很好,但是如果我按照此处的说明进行操作: ffmpeg
我运行此命令以便能够将 udp 直播流传输到可使用正在构建的移动应用程序播放的 http 直播流。 它只是一个只有音频流的流。 ffmpeg -i udp://@localhost:1111 -map
我在我的 discord.js 机器人中创建了 nuke 命令,它创建了具有相同名称、权限、主题等的 channel ,并删除了“原始” channel 。但是有一个问题,如何使 channel 与“
我是一名优秀的程序员,十分优秀!