Java:使用BufferedImage和1D像素阵列进行不需要的行分离

时间:2017-10-23 19:08:40

标签: java arrays image bufferedimage raycasting

好。所以,我理解这里的代码结构以及应该发生什么,但无论我做什么,我都无法正确渲染图像。

我正在关注Sopiro的经典3D渲染教程#1,我几乎可以肯定我的所有代码都与他完全相同。但是,在处理了一个随机的像素数组后:

filename

newNamepublic void render(Bitmap b, int xOffset, int yOffset) { for (int y=0; y<b.height; y++) { int yPix = y + yOffset; for (int x=0; x<b.width; x++) { int xPix = x + xOffset; pixels[xPix + (yPix * width)] = b.pixels[x + (y * b.width)]; } } } 会更改屏幕上图像的位置。 yOffset数组是窗口的大小(例如640x480),而xOffset是一个数组,表示要添加到pixels的图像的大小。因此,通过简单地更改由b.pixelspixels确定的位置中的像素颜色,b.pixels有效地添加到代表屏幕的pixels数组中。

我删除了边界检查,并将在稍后添加。但是,像素数组链接到具有以下内容的图像...

yOffset

在需要时绘制......

xOffset

img = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); pixels = ((DataBufferInt)img.getRaster().getDataBuffer()).getData(); 是由public void render() { BufferStrategy bs = getBufferStrategy(); if (bs == null) { createBufferStrategy(3); return; } screen.render(); for (int i=0; i<pixels.length; i++) { pixels[i] = screen.pixels[i]; } Graphics g = bs.getDrawGraphics(); g.drawImage(img, 0, 0, WIDTH * SCALE, HEIGHT * SCALE, null); g.dispose(); bs.show(); } 数组表示的图像。

这是我从这段代码中得到的:

Faulty Program Output 这些行应该相互接触,而不是分开 - 我不确定错误是在我的代码中,还是在“黑盒子”像素数组中 - &gt;在幕后发生的图像魔术。

我很乐意提供更多代码。请告诉我。

谢谢

0 个答案:

没有答案