标签: java-2d

Java2D:扩展问题

我是一位经验丰富的Java程序员,但对Java2D来说相对较新.我正在尝试缩放图像但我的质量结果质量很差.图像是面板的预览,因此包含文本和文本字段等内容.我将永远缩小规模,永不升级.

目前我正在使用以下代码: -

g.drawImage(panelImage, 0, 0, scaledWidth, scaledHeight, null);
Run Code Online (Sandbox Code Playgroud)

其中panelImage是全尺寸预览(BufferedImage),scaledWidth和scaledHeight是相应的目标尺寸.我似乎在文本和文本字段等边缘丢失了很多细节.

我应该使用更好的电话来缩放图像吗?

谢谢,约翰

java scaling java-2d

8
推荐指数
1
解决办法
3989
查看次数

用java绘制烟雾效果

有没有办法在java中绘制烟雾效果(通过使用Java2D API).我想实现这一点:当用户提供烟雾的颜色时,程序会自动使用该颜色绘制烟雾效果.我怎么能这样做?

java java-2d

8
推荐指数
1
解决办法
7297
查看次数

如何在Java2D/Graphics2D中指定回退字体

我正在用g.drawString(str, x, y)一个Graphics2D对象绘制一个String g.当前的字体g不包括所有字符str(我在那里有例如中文字符).在Mac OS X上,似乎会自动使用后备字体,但不会在Windows上显示黑色方形轮廓,而不是所需的字符.

  • 为什么行为会因平台而异?
  • 如果字符丢失,如何指定后备字体(或多种后备字体)?

(例如,那里有一个很好的字体.)

更新/更多信息

因此,不支持所有字符的原始字体不是JVM的逻辑字体之一,而是我的应用程序随附的捆绑字体Font.createFont().因此,将字体添加到JRE的lib/fonts/fallback文件夹在此处不起作用.

java fonts fallback java-2d graphics2d

8
推荐指数
1
解决办法
2070
查看次数

绘制大麻曲线

灵感来自数学网站的大麻方程式(它指的是Wolfram Research Cannabis Curve),我想知道..我们如何使用Java-2D绘制这条曲线?

java awt java-2d

8
推荐指数
1
解决办法
595
查看次数

将组件绘制到BufferedImage会导致显示损坏

我正在使用这里JScrollNavigator描述的组件,以便为我嵌入的大型"画布式"CAD组件提供导航窗口.JScrollPane

我已经尝试调整JScrollNavigator绘制画布的缩略图以向用户提供一些额外的上下文.但是,执行此操作会导致应用程序主框架的呈现损坏.具体来说,它是调用paint(Graphics)视口组件(即我的主画布)的动作,传入由此Graphics创建的对象BufferedImage导致后续显示损坏; 如果我评论这一行,一切正常.

以下是JScrollNavigator被覆盖的paintComponent方法:

@Override
protected void paintComponent(Graphics g) {
    Component view = jScrollPane.getViewport().getView();
    BufferedImage img = new BufferedImage(view.getWidth(), view.getHeight(), BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2d = img.createGraphics();

    // Paint JScrollPane view to off-screen image and then scale.
    // It is this action that causes the display corruption!
    view.paint(g2d);
    g2d.drawImage(img, 0, 0, null);
    Image scaled = img.getScaledInstance(getWidth(), getHeight(), 0);

    super.paintComponent(g);
    g.drawImage(scaled, 0, 0, null);
}
Run Code Online (Sandbox Code Playgroud)

有没有人对腐败的原因有任何建议?我原本以为绘画到幕外图像应该对现有的绘画操作没有影响.

编辑 …

java swing bufferedimage awt java-2d

7
推荐指数
1
解决办法
1876
查看次数

更改抽象字符串中的文本颜色()

我正在尝试使用swing来强调字符串中的一个作品.

建议我使用以下代码的HTML:

Graphics2D g2 = (Graphics2D) g;
g.drawString("this is something I want people to <p color="#00FF00">NOTICE</p>", x, y);
Run Code Online (Sandbox Code Playgroud)

我试过这个,但没有运气......它只是输出HTML

谁能指出我正确的方向?

java swing awt java-2d styledtext

7
推荐指数
1
解决办法
3万
查看次数

如何通过BufferedImage将巨大的图像加载到Java?

我想将大图像(18000 x 18000)加载到我的应用程序中.如果我使用BufferedImage类型int_rgb,我需要大约1235mb的堆内存来加载.这是一个非常大的内存量,最终用户可能会有更少的内存(1GB或更少).

在我的开发PC上,当我从MyEclipse IDE加载图像时,它会抛出内存不足Exception.当我将我的代码打包到一个可执行jar并在Eclipse外部的PC上运行时,它仍然会抛出异常.

如何在不使用1235mb内存的情况下使用缓冲图像将如此大的图像加载到我的应用程序中?有没有一个技巧,比如将图像分成像图像分割这样的较小部分?

在SO上找到了这个帖子,但它对我没用; 我想加载图像BufferedImage,然后Panel使用Graphics该类绘制它.

java image image-processing java-2d

7
推荐指数
1
解决办法
2296
查看次数

如何将BufferedImage保存为低于特定大小

(使用java 8)鉴于图像用户需要能够以像素为单位指定最小/最大图像大小,并且还需要以kbs为单位指定已保存图像的最大大小,图像将保存为jpg.

所以我通过调整缓冲图像的大小来完成第一个工作:

public static BufferedImage resizeUsingImageIO(Image srcImage, int size)
    {
        int w = srcImage.getWidth(null);
        int h = srcImage.getHeight(null);

        // Determine the scaling required to get desired result.
        float scaleW = (float) size / (float) w;
        float scaleH = (float) size / (float) h;

        MainWindow.logger.finest("Image Resizing to size:" + size + " w:" + w + ":h:" + h + ":scaleW:" + scaleW + ":scaleH" + scaleH);

        //Create an image buffer in which to paint on, create as an opaque …
Run Code Online (Sandbox Code Playgroud)

java bufferedimage java-2d java-8

7
推荐指数
1
解决办法
1387
查看次数

带有TexturePaint的图标会抛出InternalError:Surface无法缓存

我有一个自定义Icon其使用TexturePaint的油漆,并调用fillPolygon一个上Graphics2D对象.

这段代码在JDK6和JDK7上运行良好,但在64位Linux的JDK8下失败(在64位Linux上尝试了最新的JDK1.8).在Windows上,这适用于JDK8.

java -version用于重现问题的JDK命令的输出.

java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
Run Code Online (Sandbox Code Playgroud)

重现问题的代码:

import java.awt.*;
import java.awt.image.*;
import javax.swing.*;

public class TexturePaintIconTest {

  private static class CustomIcon implements Icon{

    private static final int[] sXArray = new int[]{2, 5, 7, 12, 12, 4, 1, 1, 2};
    private static final int[] sYArray = new int[]{4, 4, 2, 2, 11, 11, 8, 5, 4}; …
Run Code Online (Sandbox Code Playgroud)

java swing awt java-2d graphics2d

7
推荐指数
1
解决办法
199
查看次数

Java游戏2D重叠阴影与Swing

我目前正在使用Swing作为我的主要绘图组件开发2D Java游戏.每个对象都有一个阴影(BufferedImage),但每个阴影都与其他阴影重叠.是否可以只让阴影不相互重叠?因为如果物体在它下面,我仍然希望阴影在玩家上方绘制,而不是如果物体在玩家之上.为清晰起见,这是一张图片:

截图

我看过alpha合成,我想我需要Source Out?我还想过让所有阴影(没有透明度)在一个图层上绘制,然后用透明度绘制它,然后它不会像以前那样在玩家和其他对象上绘制.

我有一个Draw对象,它是一个JPanel并覆盖paintComponent方法.在这个方法中,我绘制当前房间的地板,然后迭代属于当前房间的对象列表,并调用每个对象的绘制方法来绘制所有内容.

对象绘制方法:

public void draw(Graphics g) {
    if (visible && checkInScreen()) {

        // The required drawing location
        int drawLocationX = getX() - globalCameraX;
        int drawLocationY = getY() - globalCameraY;

        if (shadow) {
            g.drawImage(shadowImages.get(imageIndex),
                    drawLocationX + shadowOffset.x + (getImageWidth()/2),
                    drawLocationY + shadowOffset.y, null);
        }
        g.drawImage(images.get(imageIndex), drawLocationX, drawLocationY, null);

        //Collisionbox
        if (SHOW_COLLISION_BOXES){
            g.setColor(Color.WHITE);
            g.drawRect(drawLocationX + getCollBoxX(), drawLocationY + getCollBoxY(), getCollBoxW() - getCollBoxX(), getCollBoxH() - getCollBoxY());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果这个问题已被提出,我很抱歉,但我找不到类似的东西.

java swing java-2d paintcomponent

7
推荐指数
1
解决办法
421
查看次数