如何拍摄图像的一部分(.png)并将其作为纹理存储在libGDX中

时间:2017-10-31 00:29:00

标签: java graphics libgdx

所以标题几乎都说明了......

我正在开发一个libGDX项目,该项目需要我拍摄不同图像的部分(例如:从2000x2000图像中取出100x100块)并将其存储为libGDX纹理。

最终目标是采用此纹理并用它填充多边形。

我知道我可以手动格式化这些图像,但这并不好。将始终使用新图像。并且每个部分都有很多部分。

我一直在浏览libGDX api,但一无所获。要么我在错误的地方寻找,要么我正在寻找错误的事情。只要在正确的方向上轻推,我会很高兴。

由于

2 个答案:

答案 0 :(得分:2)

正如icarumbas所说,你可以使用TextureRegion。 TextureRegion将保存对存储区域的纹理的引用,以及纹理中图像的宽度,高度,x位置和y位置。无需将图像拆分为单独的纹理,因为TextureRegion旨在存储纹理区域而无需创建更多纹理。

示例:

Texture wholeImage = new Texture("imagePath");
TextureRegion firstRegion = new TextureRegion(wholeImage,0,0,50,50); // gets the region from the 0,0 point of the whole image and is 50 x 50px
TextureRegion secondRegion = new TextureRegion(wholeImage,0,50,50,50); // gets the region from the 0,50 point of the whole image and is 50 x 50px
TextureRegion topRegion = new TextureRegion(wholeImage,50,0,100,50); // gets the region from the 50,0 point of the whole image and is 100 x 50px

然后可以使用与spritebatch

绘制普通纹理相同的方式绘制它们
batch.begin();
batch.draw(firstRegion, 30,30);
batch.draw(secondRegion , 130,30);
batch.draw(topRegion , 130,130);
batch.end();

使用TextureRegions时的一个常见问题是人们使用getTexture()方法。此方法用于获取整个纹理而不是定义的区域。

答案 1 :(得分:1)

您可以使用TextureRegion $imagelog = Get-Content C:\Windows\ImageLog.ini foreach ($line in $imagelog) { if ($line -like "*Gateway*") { $line | out-file -FilePath "C:\Windows\Gateway.txt" } } $gatewayIP = get-content c:\windows\Gateway.txt $GIP = $gatewayIp -replace '.*:.'.Trim() if ( Test-Connection -ComputerName $Gip -Count 1 -ErrorAction SilentlyContinue ) { Write-Host $GIP `t $GIP `t Ping Success -ForegroundColor Green } else{ $details = get-content c:\windows\imagelog.ini foreach ($line in $details) { if ($line -like "*IP Address*") { $line | out-file -FilePath "C:\Windows\IP Address.txt" } #} $IP = get-content c:\windows\IP Address.txt $systemip = $Ip -replace '.*:.'.Trim() foreach ($line in $details) { if ($line -like "*Subnet Mask*") { $line | out-file -FilePath "C:\Windows\subnet.txt" } } $subnet = get-content c:\windows\subnet.txt $subnetip = $subnet -replace '.*:.'.Trim() netsh interface ip set address "Local Area Connection" static $systemip $subnetip $GIP foreach ($line in $details) { if (Hostname.StartsWith("LCG")) { Set-DNSClientServerAddress –Local Area Connection –ServerAddresses (“10.0.6.65”,”10.0.25.65”,"10.0.0.1") } elseif (Hostname.StartsWith("ENG")) { Set-DNSClientServerAddress –Local Area Connection –ServerAddresses (“10.80.38.33”,”10.0.25.65”,"10.0.0.1") } } } } 方法。

split(..)

这将从这个TextureRegion创建一个tile,从左上角开始,一直到右边,一直到右下角。

UPD: 如果您的区域大小不同或未放置在网格中。使用Pixmap TetureRegion reg = new TextureRegion(new Texture("pathToYourImage")); TextureRegion[][] subRegions = reg.split(100, 100); 方法。

drawPixmap(..)