我有一个JInternalFrame,它绘有BufferedImage并包含在JFrame的JDesktopPane中.我还有一个JTextArea,我想编写一些java代码(函数),它将当前JInternalFrame的绘制BufferedImage作为输入,在对此输入进行一些操作后,它返回另一个操作的BufferedImage,它再次使用新的操作Image绘制JInternalFrame.
操纵JTextArea的java代码: -
public BufferedImage customOperation(BufferedImage CurrentInputImg)
{
Color colOld;
Color colNew;
BufferedImage manipulated=new BufferedImage(CurrentInputImg.getWidth(),CurrentInputImg.getHeight(),BufferedImage.TYPE_INT_ARGB);
// make all Red pixels of current image black
for(int i=0;i< CurrentInputImg.getWidth();i++) {
for(int j=0;j< CurrentInputImg.getHeight(),j++) {
colOld=new Color(CurrentInputImg.getRGB(i,j));
colNew=new Color(0,colOld.getGreen(),colOld.getBlue(),colOld.getAlpha());
manipulated.setRGB(i,j,colNew.getRGB());
}
}
return manipulated;
}
Run Code Online (Sandbox Code Playgroud)
如何在运行时运行/编译此JTextArea Java代码并获取一个新的操作图像以便在JInternalFrame上绘制?
(这个类不是实际的,但是我为你创建了它,用于包含JTextArea,JInternalFrame,Apply Button的基本接口)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.JInternalFrame;
import javax.swing.JDesktopPane;
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;
import java.io.File;
import java.util.*;
class MyCustomOperationSystem extends JFrame
{
public JInternalFrame ImageFrame;
public BufferedImage …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试使用 JOGL 生成带纹理的多边形表面,但收到一条我不明白的错误消息。Eclipse 告诉我“java.lang.IndexOutOfBoundsException:缓冲区中需要 430233 个剩余字节,只有 428349”。据我所知,由 readTexture 方法生成的缓冲图像的大小不足以与 glTex2D() 方法一起使用。但是,我不确定如何解决该问题。代码的相关部分如下,任何帮助将不胜感激。
public void init(GLAutoDrawable drawable)
{
final GL2 gl = drawable.getGL().getGL2();
GLU glu = GLU.createGLU();
//Create the glu object which allows access to the GLU library\
gl.glShadeModel(GL2.GL_SMOOTH); // Enable Smooth Shading
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Black Background
gl.glClearDepth(1.0f); // Depth Buffer Setup
gl.glEnable(GL.GL_DEPTH_TEST); // Enables Depth Testing
gl.glDepthFunc(GL.GL_LEQUAL); // The Type Of Depth Testing To Do
gl.glEnable(GL.GL_TEXTURE_2D);
texture = genTexture(gl);
gl.glBindTexture(GL.GL_TEXTURE_2D, texture);
TextureReader.Texture texture = null;
try {
texture …Run Code Online (Sandbox Code Playgroud) 我有一个图像,其中每个像素为 4 字节,即红色掩码为 0xFF0000,绿色为 0xFF00,蓝色为 0xFF。我读入图像并将其作为函数传递给函数(byte imgBuff,int w,int h) 然后我有
void fun(byte imgBuff,int w,int h)
{
Graphics g;
BufferedImage img;
DataBuffer dBuffer = new DataBufferByte(imgBuff, w * h);
WritableRaster wr = Raster.createPackedRaster(dBuffer,w,h,24,null);
DirectColorModel dcm = new DirectColorModel(24,0xFF0000,0xFF00,0xFF);
img = new BufferedImage(dcm,wr,false,null);
g = getGraphics();
g.drawImage(img,x,y,w,h,null);
}
Run Code Online (Sandbox Code Playgroud)
但是当我跑步时我得到
线程“Thread-23”中的异常 java.lang.IllegalArgumentException:光栅 sun.awt.image.SunWritableRaster@1d82ed7 与 ColorModel DirectColorModel 不兼容:rmask=ff0000 gmask=ff00 bmask=ff amask=0
如何从 bytebuffer viaPackedRaster到 Buffered Image for 24bit over 4 bytes
我有图像的RBG值的数组int [] [],我需要将它存储到jpg文件.我试着这样做:
BufferedImage image = ImageIO.read(new ByteArrayInputStream(result));
ImageIO.write(image, "jpg", new File("/path/", "snap.jpg"));
Run Code Online (Sandbox Code Playgroud)
但我有一个int [] []不是byte []数组.如何将int [] []转换为byte []而不会丢失值?
我正在制作一个游戏,并希望从左到右让单个图像"淡入淡出",图像的左侧部分的alpha值为1.0,右侧的alpha值为0.0.(注意:我不希望它随着时间的推移改变它的样子,如淡入或淡出,但只是从左到右逐渐消失并保持不变).尝试绘制我想要的最终结果如下所示:
lll lll ll ll l l l l l
lll lll ll ll l l l l l
lll lll ll ll l l l l l
lll lll ll ll l l l l l
lll lll ll ll l l l l l
lll lll ll ll l l l l l
Run Code Online (Sandbox Code Playgroud)
'l'的密度代表alpha
我目前正在使用TYPE_INT_RGB的缓冲图像,并希望尽可能保持相同.
是否有任何内置的java类可以帮助我做到这一点,或者至少是一种(相对简单的)自己做的方式,这是我无法弄清楚的?
编辑:我不想有任何形式的不透明框架.我想在另一个BufferedImage上绘制一个BufferedImage(带有alpha渐变).
我正在尝试绘制一个显示某物质量的条形图。
我创建了一个这样的缓冲图像:
private static BufferedImage createBufferedImage(int width, int height) {
int[] palette = {0x00ff00ff, 0xffff00ff, 0xff0000ff , 0xffff0000};
IndexColorModel colorModel = new IndexColorModel(2, 4,
palette, 0, true, 0, DataBuffer.TYPE_BYTE);
return new BufferedImage(width,height,BufferedImage.TYPE_BYTE_INDEXED, colorModel);
}
Run Code Online (Sandbox Code Playgroud)
colorModel 应该有颜色:绿色、黄色、红色和一种透明的。条的颜色取决于质量,如下所示:
private static Color getBarColor(double quality) {
if (quality >= 0.70) {
return Color.GREEN;
} else if (quality >= 0.40) {
return Color.YELLOW;
} else {
return Color.RED;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在创建图形来绘制条形并设置颜色:
Graphics2D g = image.createGraphics();
g.setColor(getBarColor(quality));
Run Code Online (Sandbox Code Playgroud)
但是,当我将质量的颜色设置为大于 0.7 时,它会绘制蓝色条,而对于低于 0.7 的质量,id 会绘制红色。
我认为问题出在我的调色板上,我没有正确设置颜色,当我试图获得绿色并且它不在那里时,设置的可能最接近。我认为格式 RRGGBBAA 应该用于 …
我有一个字节数组,其中包含原始灰度 8 位图像的数据,我需要将其转换为 BufferedImage。我尝试过这样做:
BufferedImage image = ImageIO.read(new ByteArrayInputStream(bytes));
Run Code Online (Sandbox Code Playgroud)
但是,生成的image对象为 null,这意味着我在这里做错了。
进行这种转换的正确方法是什么?
我想在JLabel上制作矩形并将该矩形转换为BufferedImage ......就像在paint shop中的图层一样... drafferedImage并调整大小......任何人都可以帮助
我做到了这一点,但它没有奏效
Rectangle2D rectangle2D;
BufferedImage bi = new BufferedImage(bimg.getWidth(), bimg.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D big = bi.createGraphics();
rectangle2D = new Rectangle2D.Float(eX, eY, sW, sH);
big.setStroke(new BasicStroke(5));
big.setColor(color);
shapePaint = new TexturePaint(bi, rectangle2D);
g2d.setPaint(shapePaint);
Run Code Online (Sandbox Code Playgroud) 我正在尝试优化我使用教程构建的Animation类,但每当我尝试将BufferedImage添加到BufferedImage类型的LinkedList时,我都会得到NullPointerException.
这是我的代码:
public class Animation
{
private int speed;
private int frames;
private int index = 0;
private int count = 0;
private LinkedList<BufferedImage> img;
private BufferedImage currentImg;
public Animation(int speed, BufferedImage img1, BufferedImage img2)
{
this.speed = speed;
img.add(img1);
img.add(img2);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我不能将BufferedImage添加到LinkedList?
我的形象宣言:
ImageIcon imageIcon1 = new ImageIcon(main.class.getResource("image1.png"));
Image image1 = imageIcon1.getImage();
Run Code Online (Sandbox Code Playgroud)
如何拍摄image1,沿着垂直轴翻转并将其保存为另一张图像?
我google了,我发现的每个解决方案都带有某种类型的转换错误.此外,如果有更有效的方式来声明我的形象,请告诉我.
我需要在图像中找到字母.我需要一个帮助来编写一个算法来解码图像.
我把图像转换成了一个ByteArrayOutputStream但我不知道我用它做了什么.
有我的java代码:
URL url = new URL(urlImg);
WebClient webClient = new WebClient(BrowserVersion.getDefault());
WebRequest reqImg = new WebRequest(url);
reqImg.setHttpMethod(HttpMethod.GET);
InputStream imgStream = webClient.getPage(reqImg).getWebResponse().getContentAsStream();
BufferedImage img = ImageIO.read(imgStream);
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(img, "png", out);
Run Code Online (Sandbox Code Playgroud)
依赖关系:net.sourceforge.htmlunit htmlunit 2.15
JDK 1.6.0_43