我有一个透明的BufferedImage使用以下代码创建(不相关如何创建,我认为):
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gs = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gs.getDefaultConfiguration();
Rectangle screen = transformationContext.getScreen();
// Create an image that supports transparent pixels
return gc.createCompatibleImage((int) screen.getWidth(), (int) screen.getHeight(),
Transparency.BITMASK);
Run Code Online (Sandbox Code Playgroud)
如何在不重新创建图像的情况下以最快的方式清除图像(处于与创建状态相同的空图像)?重新创建映像会给GC带来负担,暂停VM并冻结UI.
我对16位数据使用双线性插值有问题.我有两个图像,origImage和displayImage.我想使用AffineTransformOp通过AffineTransform将origImage过滤到displayImage,这是显示区域的大小.origImage的类型为BufferedImage.TYPE_USHORT_GRAY,并且具有sun.awt.image.ShortInterleavedRaster类型的栅格.这是我现在的代码
displayImage = new BufferedImage(getWidth(), getHeight(), origImage.getType());
try {
op = new AffineTransformOp(atx, AffineTransformOp.TYPE_BILINEAR);
op.filter(origImage, displayImage);
}
catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
为了显示错误,我创建了2个渐变图像.一个具有15位范围内的值(最大值为32767),另一个值位于16位范围内(最大值为65535).以下是两张图片
15位图像

16位图像

这两个图像是以相同的方式创建的,看起来应该相同,但请注意16位图像中间的线条.起初我认为这是一个溢出问题,然而,奇怪的是它在梯度的中心而不是在像素值更高的末端表现出来.此外,如果它是溢出问题,我怀疑15位图像也会受到影响.
任何有关这方面的帮助将不胜感激.
我只是想知道为什么没有人回答,我提供了足够的信息吗?需要更多信息吗?
下面是我用来生成AffineTransform的代码.所有引用的变量都是根据用户输入(鼠标移动)计算出来的,并且应该是正确的(它已被包括我自己在内的很多人测试过).希望这可以帮助解决错误.
AffineTransform panTranslate = new AffineTransform();
panTranslate.translate(imagePanOffset.x, imagePanOffset.y);
AffineTransform rotateCenterTranslate = new AffineTransform();
rotateCenterTranslate.translate(imageRotateCTR.x, imageRotateCTR.y);
AffineTransform rotateTransform = new AffineTransform();
rotateTransform.rotate(Math.toRadians(rotateValue));
AffineTransform rotateAntiCenterTranslate = new AffineTransform();
rotateAntiCenterTranslate.translate(-imageRotateCTR.x, -imageRotateCTR.y);
AffineTransform translateTransform = new AffineTransform();
translateTransform.translate(imageMagOffset.x, imageMagOffset.y);
AffineTransform flipMatrixTransform = new AffineTransform();
switch (flipState) {
case ENV.FLIP_NORMAL: // NORMAL
break;
case ENV.FLIP_TOP_BOTTOM: // …Run Code Online (Sandbox Code Playgroud) int width = 175;
Graphics2D gb = (Graphics2D) g;
bufferedimage = (BufferedImage) createImage(width, width);
Graphics2D graphics = bufferedimage.createGraphics();
graphics.setColor(/*this.getBackground()*/Color.red);
graphics.fillRect(0, 0, width, width);
Run Code Online (Sandbox Code Playgroud)
嗨,我有缓冲大尺寸...我必须调整缓冲图像... PLZ你能帮助我吗?
为线程necromancny道歉,我试图生成一个用于测试的减少版本,它可以在这里找到
https://www.dropbox.com/sh/y0wtlae37yltfz5/yRDSyKj2NY
下载的最大部分是src文件夹中的3个样本图像(其中2个是医疗级眼底图像,所以它们有点大).对不起,如果解决方案的总体规模仍然有点大,但我不能在没有认真反思的情况下将其缩小(我承认我有点睡眠不足,必须在20分钟内开始工作).
我对问题的原始描述如下
我的问题是这样的.我有一个BufferedImage人类视网膜,现在使用自适应阈值器我已成功从眼睛中提取血管结构,我的软件的其余部分涉及绘制血管并确定其厚度,我相信这是正常运作的.最终结果显示所有坐标与其实际位置相差一定程度的坐标(仔细观察,您可以看到一些种子的曲率在血管之后正确连接,坐标跟随图像的环绕.我的问题是这个是什么导致了这种偏移,我该如何解决呢?
我正在尝试旋转图像.我正在使用这个Java代码:
BufferedImage oldImage = ImageIO.read(new FileInputStream("C:\\workspace\\test\\src\\10.JPG"));
BufferedImage newImage = new BufferedImage(oldImage.getHeight(), oldImage.getWidth(), oldImage.getType());
Graphics2D graphics = (Graphics2D) newImage.getGraphics();
graphics.rotate(Math.toRadians(90), newImage.getWidth() / 2, newImage.getHeight() / 2);
graphics.drawImage(oldImage, 0, 0, oldImage.getWidth(), oldImage.getHeight(), null);
ImageIO.write(newImage, "JPG", new FileOutputStream("C:\\workspace\\test\\src\\10_.JPG"));
Run Code Online (Sandbox Code Playgroud)
但我看到奇怪的结果:
资源:

结果:
**结果图片:**http://s14.postimage.org/cjut935ip/image.jpg
你能帮帮我解决这个问题吗?
我一直试图将一个转换ImageIcon为BufferedImage...而且我没有运气.
我有一个预先存在的ImageIcon,需要转换为缓冲图像,用于存在的大量BufferedImage操作.
我找到了几种方法,但所有方法都是CPU密集型的.
我需要将tiff文件转换为BufferedImage.我写了以下代码:
String filepath = "C:\\tiffFolder\\";
String filename = "myTiffImage.tif";
File myFile = new File (filepath + filename);
BufferedImage img = ImageIO.read(myFile);
Run Code Online (Sandbox Code Playgroud)
我知道myFile是正确实例化的:问题是在第四行代码后img仍为null.
我究竟做错了什么?非常感谢!
编辑
解决了,我使用了以下代码:
FileSeekableStream stream = new FileSeekableStream(filepath + filename);
TIFFDecodeParam decodeParam = new TIFFDecodeParam();
decodeParam.setDecodePaletteAsShorts(true);
ParameterBlock params = new ParameterBlock();
params.add(stream);
RenderedOp image1 = JAI.create("tiff", params);
BufferedImage img = image1.getAsBufferedImage();
Run Code Online (Sandbox Code Playgroud) 我的Java应用程序有问题,特别是从我的计算机中的某个位置加载图像.
在这篇文章之后,我使用a BufferedImage和a InputFileStream在我的计算机上加载图像.首先,我将image(pic2.jpg)放入源代码中,这是有效的.但是,如果我把图像放到另一个地方(让我们说C:\\ImageTest\pic2.jpg),Java IDE 会给我看一个IllegalArgumentException
return ImageIO.read(in);
Run Code Online (Sandbox Code Playgroud)
这是代码:
public class MiddlePanel extends JPanel {
private BufferedImage img;
public MiddlePanel(int width) {
//img = getImage("pic2.jpg");
img = getImage("C:\\ImageTest\\pic2.jpg");
this.setPreferredSize(new Dimension(800,460));
}
public void paintComponent(Graphics g) {
// ...
}
private BufferedImage getImage(String filename) {
// This time, you can use an InputStream to load
try {
// Grab the InputStream for the image.
InputStream in = getClass().getResourceAsStream(filename);
// Then read it. …Run Code Online (Sandbox Code Playgroud) Java BufferedImage类有一长串类变量,称为图像类型,可用作BufferedImage构造函数的参数.
但是,Java文档对这些图像类型的用途做了最小的解释,它将如何影响要创建的BufferedImage.
我的问题是:
图像类型如何影响要创建的BufferedImage?它是否控制用于存储各种颜色(红色,绿色,蓝色)的位数及其透明度?
如果我们只想创建,我们应该使用哪种图像类型
我多次阅读Java Doc中的描述,但是我们不知道应该如何使用它.例如,这一个:
TYPE_INT_BGR
表示具有8位RGB颜色分量的图像,对应于Windows或Solaris样式的BGR颜色模型,其中颜色为蓝色,绿色和红色打包为整数像素.没有阿尔法.该图像具有DirectColorModel.当具有非不透明alpha的数据存储在此类型的图像中时,必须将颜色数据调整为非预乘形式并丢弃alpha,如AlphaComposite文档中所述.
我正在尝试从原始样本中获取BufferedImage,但是我尝试读取超出可用数据范围的例外情况,我只是不明白.我想要做的是:
val datasize = image.width * image.height
val imgbytes = image.data.getIntArray(0, datasize)
val datamodel = new SinglePixelPackedSampleModel(DataBuffer.TYPE_INT, image.width, image.height, Array(image.red_mask.intValue, image.green_mask.intValue, image.blue_mask.intValue))
val buffer = datamodel.createDataBuffer
val raster = Raster.createRaster(datamodel, buffer, new Point(0,0))
datamodel.setPixels(0, 0, image.width, image.height, imgbytes, buffer)
val newimage = new BufferedImage(image.width, image.height, BufferedImage.TYPE_INT_RGB)
newimage.setData(raster)
Run Code Online (Sandbox Code Playgroud)
不幸的是我得到:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 32784
at java.awt.image.SinglePixelPackedSampleModel.setPixels(SinglePixelPackedSampleModel.java:689)
at screenplayer.Main$.ximage_to_swt(Main.scala:40)
at screenplayer.Main$.main(Main.scala:31)
at screenplayer.Main.main(Main.scala)
Run Code Online (Sandbox Code Playgroud)
数据是标准RGB,带有1字节填充(因此1个像素== 4个字节),图像大小为1366x24像素.
我终于得到了运行以下建议的代码.最终的代码是:
val datasize = image.width * image.height
val imgbytes = image.data.getIntArray(0, datasize)
val raster = Raster.createPackedRaster(DataBuffer.TYPE_INT, …Run Code Online (Sandbox Code Playgroud)