标签: bufferedimage

尽快清除透明的BufferedImage

我有一个透明的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.

java bufferedimage awt graphics2d

10
推荐指数
2
解决办法
1万
查看次数

关于16位数据的双线性插值的Java错误

我对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)

java bufferedimage image-processing 16-bit affinetransform

10
推荐指数
1
解决办法
2066
查看次数

如何在java中调整缓存的图像n graphics 2d?

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你能帮助我吗?

java bufferedimage image

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

Java BufferedImage,写入底层Raster,像素在最终图像中出现偏移

为线程necromancny道歉,我试图生成一个用于测试的减少版本,它可以在这里找到

https://www.dropbox.com/sh/y0wtlae37yltfz5/yRDSyKj2NY

下载的最大部分是src文件夹中的3个样本图像(其中2个是医疗级眼底图像,所以它们有点大).对不起,如果解决方案的总体规模仍然有点大,但我不能在没有认真反思的情况下将其缩小(我承认我有点睡眠不足,必须在20分钟内开始工作).

我对问题的原始描述如下

我的问题是这样的.我有一个BufferedImage人类视网膜,现在使用自适应阈值器我已成功从眼睛中提取血管结构,我的软件的其余部分涉及绘制血管并确定其厚度,我相信这是正常运作的.最终结果显示所有坐标与其实际位置相差一定程度的坐标(仔细观察,您可以看到一些种子的曲率在血管之后正确连接,坐标跟随图像的环绕.我的问题是这个是什么导致了这种偏移,我该如何解决呢?

java bufferedimage raster image-processing

10
推荐指数
1
解决办法
779
查看次数

Java - 图像旋转

我正在尝试旋转图像.我正在使用这个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)

但我看到奇怪的结果:

资源:

**Sourse图片:**

结果:

**结果图片:**http://s14.postimage.org/cjut935ip/image.jpg

你能帮帮我解决这个问题吗?

java graphics bufferedimage image rotation

10
推荐指数
1
解决办法
2万
查看次数

将ImageIcon转换为BufferedImage

我一直试图将一个转换ImageIconBufferedImage...而且我没有运气.

我有一个预先存在的ImageIcon,需要转换为缓冲图像,用于存在的大量BufferedImage操作.

我找到了几种方法,但所有方法都是CPU密集型的.

java bufferedimage imageicon

10
推荐指数
2
解决办法
2万
查看次数

将tiff转换为缓冲图像(Java)

我需要将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 bufferedimage tiff file javax.imageio

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

通过BufferedImage从文件路径加载图像

我的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 image embedded-resource

10
推荐指数
2
解决办法
6万
查看次数

如何决定使用哪种BufferedImage图像类型?

Java BufferedImage类有一长串类变量,称为图像类型,可用作BufferedImage构造函数的参数.

但是,Java文档对这些图像类型的用途做了最小的解释,它将如何影响要创建的BufferedImage.

我的问题是:

  1. 图像类型如何影响要创建的BufferedImage?它是否控制用于存储各种颜色(红色,绿色,蓝色)的位数及其透明度?

  2. 如果我们只想创建,我们应该使用哪种图像类型

    • 不透明的图像
    • 一个透明的图像
    • 半透明的图像

我多次阅读Java Doc中的描述,但是我们不知道应该如何使用它.例如,这一个:

TYPE_INT_BGR

表示具有8位RGB颜色分量的图像,对应于Windows或Solaris样式的BGR颜色模型,其中颜色为蓝色,绿色和红色打包为整数像素.没有阿尔法.该图像具有DirectColorModel.当具有非不透明alpha的数据存储在此类型的图像中时,必须将颜色数据调整为非预乘形式并丢弃alpha,如AlphaComposite文档中所述.

java bufferedimage

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

如何从原始数据创建BufferedImage

我正在尝试从原始样本中获取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)

java bufferedimage scala awt

9
推荐指数
1
解决办法
7133
查看次数