imagereader java_Java ImageReader.getNumImages方法代码示例

import javax.imageio.ImageReader; //导入方法依赖的package包/类

public Texture(ResourceLocation location, boolean allowRP)

{

InputStream s = null;

try

{

this.location = location;

s = open(location, allowRP);

ImageInputStream stream = ImageIO.createImageInputStream(s);

Iterator readers = ImageIO.getImageReaders(stream);

if(!readers.hasNext()) throw new IOException("No suitable reader found for image" + location);

ImageReader reader = readers.next();

reader.setInput(stream);

frames = reader.getNumImages(true);

BufferedImage[] images = new BufferedImage[frames];

for(int i = 0; i < frames; i++)

{

images[i] = reader.read(i);

}

reader.dispose();

int size = 1;

width = images[0].getWidth();

height = images[0].getHeight();

while((size / width) * (size / height) < frames) size *= 2;

this.size = size;

glEnable(GL_TEXTURE_2D);

synchronized(SplashProgress.class)

{

name = glGenTextures();

glBindTexture(GL_TEXTURE_2D, name);

}

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, size, size, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, (IntBuffer)null);

checkGLError("Texture creation");

for(int i = 0; i * (size / width) < frames; i++)

{

for(int j = 0; i * (size / width) + j < frames && j < size / width; j++)

{

buf.clear();

BufferedImage image = images[i * (size / width) + j];

for(int k = 0; k < height; k++)

{

for(int l = 0; l < width; l++)

{

buf.put(image.getRGB(l, k));

}

}

buf.position(0).limit(width * height);

glTexSubImage2D(GL_TEXTURE_2D, 0, j * width, i * height, width, height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, buf);

checkGLError("Texture uploading");

}

}

glBindTexture(GL_TEXTURE_2D, 0);

glDisable(GL_TEXTURE_2D);

}

catch(IOException e)

{

e.printStackTrace();

throw new RuntimeException(e);

}

finally

{

IOUtils.closeQuietly(s);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常抱歉,我之前给出的示例代码的`pylon.ImageEventType.ImageReady`在Pylon的Python绑定是无效的。对于Basler相机的图像采集回调,可以使用`GrabResult`对象的`GrabSucceeded`属性来判断图像是否准备好。以下是修改后的示例代码: ```python from pypylon import pylon # 定义回调函数 def image_callback(camera, grab_result): if grab_result.GrabSucceeded(): # 处理图像数据 image = grab_result.Array # 在这里添加你的图像处理代码 # ... # 显示图像 cv2.imshow('Image', image) cv2.waitKey(1) # 等待1毫秒,以便图像显示更新 # 创建Pylon相机对象 camera = pylon.InstantCamera(pylon.TlFactory.GetInstance().CreateFirstDevice()) # 打开相机 camera.Open() # 注册回调函数 camera.RegisterImageEventHandler(image_callback) # 开始采集图像 camera.StartGrabbing() # 持续采集图像,直到按下键盘断 while camera.IsGrabbing(): camera.RetrieveResult(5000, pylon.TimeoutHandling_ThrowException) # 停止采集图像 camera.StopGrabbing() # 关闭相机 camera.Close() # 关闭OpenCV窗口 cv2.destroyAllWindows() ``` 在修改后的代码,我们定义了一个名为`image_callback`的回调函数,该函数接受相机对象和采集结果(`grab_result`)作为参数。在回调函数,我们首先使用`GrabSucceeded`方法检查采集是否成功,然后处理图像数据并进行图像处理。在这个例子,我们使用了OpenCV来显示图像,确保在运行之前安装了OpenCV模块。 请注意,这只是一个简单的示例代码,你可能还需要根据实际需求进行相应的处理和配置。更详细的用法和参数设置,请参考Basler相机的文档或Pylon SDK的文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值