- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试提取 BufferedImage 的 10 px 方形部分并将它们添加到新的 BufferedImage 中,与 this drawImage tutorial 中显示的困惑示例非常相似。但是,我的 BufferedImage 调用后似乎仍为空。如果我调用drawString,我会看到字符串被正常绘制。
在 Graphics.drawImage
的文档中,有这样的说法
This method returns immediately in all cases, even if the image area to be drawn has not yet been scaled, dithered, and converted for the current output device. If the current output representation is not yet complete then drawImage returns false. As more of the image becomes available, the process that loads the image notifies the specified image observer.
我需要一个ImageObserver
来等待输出吗?如果是这样我应该使用什么实现类?如果不是,正确的解决方案是什么?
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class TestImageScale {
public static void main(String[] args) throws IOException {
BufferedImage img = ImageIO.read(new File(
"example.jpeg"));
//Randomly generate some coordinates to grab pixels from
int minDim = Math.min(img.getHeight(), img.getWidth()) - 10;
int[][] coordMatch = new int[5][3];
for (int i = 0; i < 5; i++) {
coordMatch[i][0] = (int) Math.floor(Math.random() * minDim + 5);
coordMatch[i][1] = (int) Math.floor(Math.random() * minDim + 5);
coordMatch[i][2] = 5;
}
BufferedImage simImg = new BufferedImage(10, 10 * 5, BufferedImage.TYPE_INT_ARGB);
Graphics g = simImg.getGraphics();
for (int i = 0; i < 5; i++) {
int x = coordMatch[i][0];
int y = coordMatch[i][1];
int r = coordMatch[i][2];
//Print statement to show that we are in the for loop
System.out.println(String.format("%s,%s,%s", x, y, r));
//g.drawImage should write the pixels from img to simImg
g.drawImage(img, x - r, y - r, x + r, y + r, 0, i * 10, 10, i * 10 + 10, null);
}
//I draw the string "hello" on simImg to show that g is working
g.drawString("hello", 0, 10);
ImageIO.write(simImg, "png", new File("output.png"));
}
}
在测试运行中,我得到了这些行
322,228,5
118,186,5
285,351,5
21,213,5
144,48,5
打印到控制台,保存的文件看起来像
此输出显示已进入 for 循环,并且 Graphics
对象 g
连接到正确的 BufferedImage
。但 img
中的像素不会复制到 simImg
。
最佳答案
我认为您的 drawImage
的一些参数顺序错误。
Javadoc for the drawImage
method you are using提到目标矩形的坐标位于源矩形的坐标之前。在我看来,您好像首先使用源坐标,然后使用目标坐标来调用此方法。
而不是
g.drawImage(img, x - r, y - r, x + r, y + r, 0, i * 10, 10, i * 10 + 10, null);
尝试
g.drawImage(img, 0, i * 10, 10, i * 10 + 10, x - r, y - r, x + r, y + r, null);
我没有你的测试图像,所以我使用了另一张图像。进行此修改并运行您的类后,我得到了一个并非完全空白的输出图像,并且看起来已经从我的示例图像中复制了像素。
关于java - Graphics.drawImage 将 BufferedImage 留空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34007593/
我使用缓冲方法更新 Canvas ,问题是当我在缓冲 Canvas 中绘制图像并将其应用于真实 Canvas 时,真实 Canvas 上没有图像。但我可以将任何其他东西应用到真正的 Canvas 上。
好的,我正在使用 JavaScript Canvas 元素等创建一个游戏。我已经能够加载大量图像,但在选定的少数图像上,JavaScript 会回复错误,例如 Uncaught TypeError:
我的 Canvas 有一个简单的绘制图像,但它不会显示在第一帧上。 这让我发疯,我不知道为什么它不会这样做!! 这是我的脚本: img = new Image(); img.src = 'images
我正在尝试在我的代码上调用 DrawImage(),我正在遵循本教程 Jetpack Tutorial , 但我收到此错误: Unresolved reference: DrawImage 我尝试在
我目前正在尝试将图像打印到屏幕上,以便准备创建游戏。我可以单独显示图像,但前提是该图像是在 paintComponents() 类中实例化的。当然,我不想每帧都重新实例化整个板,但似乎无法让它工作。我
我正在尝试使用drawImage()方法获取要在屏幕上绘制的.jpg图像,但它不会绘制。这是代码: public void paint(Graphics g) { Image imag
在我的程序中,我有以下代码: package io.github.AdmiralSbs.DiceWars; import javax.imageio.ImageIO; import javax.swi
这基本上就是我的代码的工作方式 class Main extends JFrame implements Runnable { public Main() { //init ever
几天来,我一直在努力弄清楚为什么我的九层代码不能按预期工作。据我所知,Graphics.DrawImage 方法似乎存在问题,它无法正确处理我的九个切片图像。所以我的问题是如何补偿在紧凑型框架上运行我
当您将名为 logo.png 的图片放在与此 html 文件相同的目录中并尝试在 Web 浏览器中运行它时,该图片在 IE 中仅出现 10 次刷新中的 1 次,而在Firefox,但在进一步刷新后会出
当我使用 Graphics.DrawImage 绘制图像并以比原始图像更大的尺寸绘制时,它最终变得有点太小了。您可以在下图中看到这一点: 绿线不应该是可见的,也不是图像的一部分。相反,它们被绘制在图像
import java.awt.*; import javax.swing.*; public class Main { JFrame jf; Main() {
我正在尝试使用 Java 面板显示图像,但行不通。该代码没有给出任何异常和/或错误,但图像没有加载。该图像确实存在,我也尝试过 .jpg,但效果不佳。 package feupcraftproject
我需要在内存中保存约 50 个图像(这是必须的,也是我无法改变的条件)。但是,有时我想在 JFrame 上绘制这些图像的缩略图。 使用 graphics.drawImage(picture, 100,
最近我一直在构建一个在JFrame上绘制图像的应用程序,一切都很棒,但是当窗口离开屏幕时,绘制的图像就消失了,我一直想知道是否有办法避免那?谢谢 import javax.swing.*; 导入 ja
我有一个扩展 jlabel 并使用 paintComponent 在其上绘制的类,如下所示这是 paintPhotos.java package myApp; import java.awt.*; i
我正在玩 JavaFX,在 start(Stage theStage) 类中我有以下代码: /*... Scene, stage, canvas ...*/ GraphicsContext gc =
我正在尝试编写一些简单的游戏,但我一直在 Canvas 上绘制资源。我创建了一个 AssetsLoader“类”来加载图像并将其保存为图像对象。一开始我只想绘制一些加载的资源。但是drawImage函
我使用drawImage来“调整”图像的大小; img.onload = function(){ var width = img.width * 0.16,
我正在使用drawImage()。这是我的代码。 imDiv 包含一个内联 svg。 var c =document.getElementById( 'cvs' ); var ctx =c.g
我是一名优秀的程序员,十分优秀!