Как сделать вывод на пиксель в WPF / XNA? - PullRequest
1 голос
/ 22 сентября 2011

Я хочу нарисовать, как в старом qbasik, где вы можете в 5 линий и PSET (x, y) получить любой график или фигуры Лиссажу.

Вопрос: что может быть лучше для WPF?и способ для XNA?

Есть образцы?

Ответы [ 2 ]

1 голос
/ 22 сентября 2011

В XNA это не самая эффективная вещь в целом, но я думаю, что вам лучше всего создать текстуру и установить каждый пиксель, используя SetData, и отобразить его на экране с помощью SpriteBatch.

    SpriteBatch spriteBatch;
    Texture2D t;
    Color[] blankScreen;

    protected override void LoadContent()
    {
        spriteBatch = new SpriteBatch(GraphicsDevice);

        //initialize texture
        t = new Texture2D(GraphicsDevice, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height, false, SurfaceFormat.Color);

        //clear screen initially
        blankScreen = new Color[GraphicsDevice.Viewport.Width * GraphicsDevice.Viewport.Height];
        for (int i = 0; i < blankScreen.Length; i++)
        {
            blankScreen[i] = Color.Black;
        }

        ClearScreen();
    }

    private void Set(int x, int y, Color c)
    {
        Color[] cArray = { c };

        //unset texture from device
        GraphicsDevice.Textures[0] = null;
        t.SetData<Color>(0, new Rectangle(x, y, 1, 1), cArray, 0, 1);

        //reset
        GraphicsDevice.Textures[0] = t;
    }

    private void ClearScreen()
    {
        //unset texture from device
        GraphicsDevice.Textures[0] = null;
        t.SetData<Color>(blankScreen);

        //reset
        GraphicsDevice.Textures[0] = t;
    }

    protected override void Draw(GameTime gameTime)
    {
        spriteBatch.Begin();
        spriteBatch.Draw(t, Vector2.Zero, Color.White);
        spriteBatch.End();

        base.Draw(gameTime);
    }

При этом вы можете вызвать либо Set, либо ClearScreen по своему желанию в вашем обновлении или Draw.Возможно, вам придется поиграть с индексом текстуры (я только что использовал 0 для этого примера, возможно, он вам не подходит), а также вам нужно только сбрасывать / сбрасывать один раз за кадр, поэтому вы можете оптимизировать это в зависимости от того, как вы используетеим.

1 голос
/ 22 сентября 2011

для WPF и Silverlight WriteableBitmap

http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.writeablebitmap.aspx

Библиотека WriteableBitmapEx. Пытается компенсировать это с помощью расширенных методов, которые просты в использовании, как встроенные методы, и предлагают функциональность, подобную GDI +: http://writeablebitmapex.codeplex.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...