XNA 게임 (편집기도 XNA에 있음)을 위해 만든 레벨 편집기에서 Texture2D 개체의 크기를 조정할 수 있습니다.XNA에서 Texture2D의 크기를 조정하고 저장하는 방법?
사용자가 레벨을 저장하려고 할 때 게임에서 크기 조정이 필요하지 않도록 실제로 디스크의 이미지 파일 크기를 조정하고 싶습니다.
크기가 조정 된 Texture2D 개체에서 이미지 파일 (PNG 선호)을 쉽게 만들 수 있습니까?
XNA 게임 (편집기도 XNA에 있음)을 위해 만든 레벨 편집기에서 Texture2D 개체의 크기를 조정할 수 있습니다.XNA에서 Texture2D의 크기를 조정하고 저장하는 방법?
사용자가 레벨을 저장하려고 할 때 게임에서 크기 조정이 필요하지 않도록 실제로 디스크의 이미지 파일 크기를 조정하고 싶습니다.
크기가 조정 된 Texture2D 개체에서 이미지 파일 (PNG 선호)을 쉽게 만들 수 있습니까?
원하는 크기로 렌더링 대상에 렌더링 한 다음 렌더링 대상 텍스처를 저장하여 텍스처의 크기를 조절할 수 있습니다.
이 간단한 예제는 어떻게 수행 할 수 있는지 보여줍니다. GraphicsDevice의 설정을 무시하십시오. 작은 자체 포함 예제 만 만들면됩니다. 흥미로운 점은 렌더링 타겟을 만들고 스케일 된 텍스처를 그리는 것입니다. 가능한 경우 렌더 타겟을 재사용해야합니다 (같은 크기의 모든 이미지가 렌더 타겟을 재사용 할 수 있습니다).
using System;
using System.Runtime.InteropServices;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
class Program
{
[DllImport("kernel32.dll", SetLastError = true)]
private static extern IntPtr GetConsoleWindow();
static void Main(string[] args)
{
string sourceImagePath = args[0];
string destinationImagePath = args[1];
int desiredWidth = int.Parse(args[2]);
int desiredHeight = int.Parse(args[3]);
GraphicsDevice graphicsDevice = new GraphicsDevice(
GraphicsAdapter.DefaultAdapter,
DeviceType.Hardware,
GetConsoleWindow(),
new PresentationParameters());
SpriteBatch batch = new SpriteBatch(graphicsDevice);
Texture2D sourceImage = Texture2D.FromFile(
graphicsDevice, sourceImagePath);
RenderTarget2D renderTarget = new RenderTarget2D(
graphicsDevice,
desiredWidth, desiredHeight, 1,
SurfaceFormat.Color);
Rectangle destinationRectangle = new Rectangle(
0, 0, desiredWidth, desiredHeight);
graphicsDevice.SetRenderTarget(0, renderTarget);
batch.Begin();
batch.Draw(sourceImage, destinationRectangle, Color.White);
batch.End();
graphicsDevice.SetRenderTarget(0, null);
Texture2D scaledImage = renderTarget.GetTexture();
scaledImage.Save(destinationImagePath, ImageFileFormat.Png);
}
}
Texture2D.Save()을 사용해 보셨습니까?
Texture2D의 크기가 올바르지 만 그리기 호출로 크기 조절이 수행되면 어떻게됩니까? 크기가 조정 된 Texture2D 개체는 어떻게 만듭니 까? –
이미지 크기를 조정해도 일반적으로 많은 오버 헤드가 발생하지 않으며, 같은 크기의 다른 크기의 메모리를 낭비하지 않으려 고합니다.
물론 Zune 게임을 쓰는 사람이 될 수 있습니다. 즉, 어쩌면 내가 거기에서 스케일링을하지 않을 수도 있습니다.
XNA에서 크기 조정 된 이미지를 직접 저장할 수 있다고 생각하지 않지만 WinForms Image 클래스를 사용하여 이미지를로드 한 다음 레벨 편집기에서 크기를 조정하고 다시 디스크에 저장합니다.
질감이 BMP 또는 PNG가 아닌 경우 Texture2D.Save() 명령을 사용하여 Image 클래스에서 사용할 수있는 형식으로 변환해야 할 수도 있습니다.
이 스레드는 Image 클래스 사용에 도움이 될 수 있습니다. http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/6fe3d353-0b09-440b-95c9-701efdc9e20a/
나는 내 충돌 코드를 간단하게 유지하기 위해 게임 내 스케일링을 피하고 싶습니다. –
텍스처의 크고 작은 복사본을 만드는 코드가 있는데 잠시 후에 오류가 발생합니다. 30 크기 조정 후 나는 처음이 아니라 예외를 얻는다.
렌더링 대상에 문제가있는 것 같지만 잘 모르겠습니다. 이 코드를 너무 많이 실행하면 이러한 예외가 발생할지 궁금합니다.
이것은 구현을 마친 것에 가장 가깝습니다. kernel32 import 나 GetConsoloWindow를 사용하지는 않았지만 단순히 Game 객체의 GraphicsDevice를 사용했습니다. –