1

xnaでtexture2dをトリミングしようとしています。上部と右側の画像をトリミングする次のコードを見つけました。コードをいじってみましたが、特定の間隔ですべての側面をトリミングする方法がわかりません。以下は、私が変更しようとしているコードです:

どんな助けやアイデアも大歓迎です。

Rectangle area = new Rectangle(0, 0, 580, 480);

        Texture2D cropped = new Texture2D(heightMap1.GraphicsDevice, area.Width, area.Height);
        Color[] data = new Color[heightMap1.Width * heightMap1.Height];
        Color[] cropData = new Color[cropped.Width * cropped.Height];

        heightMap1.GetData(data);

        int index = 0;


        for (int y = 0; y < area.Y + area.Height; y++) // for each row
        {

                for (int x = 0; x < area.X + area.Width; x++) // for each column 
                {
                    cropData[index] = data[x + (y * heightMap1.Width)];
                    index++;
                }

        }

    cropped.SetData(cropData);
4

1 に答える 1

3

テクスチャをトリミングするコードは次のとおりです。このGetData方法では、画像の長方形のサブセクションを既に選択できることに注意してください。手動でトリミングする必要はありません。

// Get your texture
Texture2D texture = Content.Load<Texture2D>("myTexture");

// Calculate the cropped boundary
Rectangle newBounds = texture.Bounds;
const int resizeBy = 20;
newBounds.X += resizeBy;
newBounds.Y += resizeBy;
newBounds.Width -= resizeBy * 2;
newBounds.Height -= resizeBy * 2;

// Create a new texture of the desired size
Texture2D croppedTexture = new Texture2D(GraphicsDevice, newBounds.Width, newBounds.Height);

// Copy the data from the cropped region into a buffer, then into the new texture
Color[] data = new Color[newBounds.Width * newBounds.Height];
texture.GetData(0, newBounds, data, 0, newBounds.Width * newBounds.Height);
croppedTexture.SetData(data);

もちろん、パラメータSpriteBatch.Drawを取ることができるsourceRectangleので、テクスチャ データをコピーする必要さえないかもしれません! 元のテクスチャのサブセクションを使用するだけです。例えば:

spriteBatch.Draw(texture, Vector2.Zero, newBounds, Color.White);

(WherenewBoundsは、最初のコード リストと同じ方法で計算されます。)

于 2013-04-22T07:06:07.700 に答える