[C#][DirectX] Problem z bitmapą w DX2D (pixel format)

1

Na początku chciałbym zaznaczyć że używam obecnie SlimDX, można powiedzieć że to taki lepszy DXmanaged :>

I mam problem z bitmapą w directx2d :/ A konkretnie z tworzeniem nowej, bo wyskakuje mi błąd:
D2DERR_UNSUPPORTED_PIXEL_FORMAT: The pixel format is not supported. (-2003292288)
i nie wiem czemu :/

Tutaj trochę kodu:

        static void CreateTexture()
        {
            texture = new Bitmap(Target.Instance, new System.Drawing.Size(10, 10));
            FileStream stream = new FileStream("D:\\T.jpg", FileMode.Open);
            texture.FromStream(stream, 0, (int)stream.Length);
        }

Błąd wyskakuje przy pierwszej linijce.

Target.Instance to singleton -> mniej więcej tak inicjuje instancję:

private static void InitializeTarget(Control parent)
        {
            WindowRenderTargetProperties properties;
            properties = new WindowRenderTargetProperties();
            properties.Handle = parent.Handle;
            properties.PixelSize = parent.Size;
            properties.PresentOptions = PresentOptions.None;

            instance = new WindowRenderTarget(factory, properties);
        }

A Control parent to już normalne windowsowskie okienko :/

Prosiłbym o pomoc bo nie mam pomysłu jak to zrobić :(

Z góry dziękuje [soczek]...

0
            System.IO.Stream stream = new System.IO.FileStream("D:\\T.jpg", FileMode.Open);
            texture = new Texture(device, stream, Usage.Dynamic, Pool.Default);           

Próbowałeś na takie różne inne sposoby?
directX3D jest tajemniczy...
gdzie się podział directDraw

1

Trochę poprawiłem,, kod wygląda teraz tak i nawet działa, ale...

            BitmapProperties p = new BitmapProperties();
            p.PixelFormat = new PixelFormat(SlimDX.DXGI.Format.B8G8R8A8_UNorm, AlphaMode.Ignore);
            texture = new Bitmap(Target.Instance, new System.Drawing.Size(1024, 768), p);
            FileStream stream = new FileStream("D:\\T.jpg", FileMode.Open);
            texture.FromStream(stream, 0, (int)stream.Length);

Tylko że wynik wygląda tak:
http://img214.imageshack.us/img214/9858/13232913.png
a rysuję jakieś tam tulipany etc...

EDIT:
texture = new Texture(device, stream, Usage.Dynamic, Pool.Default);
sorry za moje dziwaczne nawyki, ale ja nie używam textury tylko bitmapy :] tzn wygląda to tak:
SlimDX.Direct2D.Bitmap texture
jak widać jestem dziwny, ale jakoś ciągnęło mnie do nazwy texture :) :D

0

Nie mam pojęcia jak tutaj wygląda rysowanie 2D.
Ale jak robiłem coś w DirectDraw to śmiało mogłem używać klas System.Drawing.Bitmap do przechowywania obrazów.
A z nich już potem tworzyć powierzchnie do rysowania(surface).

No właśnie swoją drogą jak się rysuje w tym SlimDX.Direct2D?
Ciekaw jestem x)

1

Domyślam się że wcześniej używałeś managed? :) Slim jest podobny tylko trudniejszy ;( I gorzej sprzężony z klasami .NET :/
Ale ogólnie to go polubiłem :D i jest, w przeciwieństwie do managed, rozwijany :)

0

yes, managed. ;]
tak na pierwszy rzut oka jak zobaczyłem Twoj kod, to pomyślałem że to już DirectX3D xP

1

Managed na tą wadę że nie jest rozwijany :] I nie ma wersji 64bitowej, a 32 bitowa nie działa na systemach 64bitowych, więc chcąc, nie chcąc, musiałem się przerzucić ;(
directx 2D od 3D różni się na pierwszy rzut oka tym że w 3d używa się device, a w 2d renderTargeta (albo renderTargetu?) :D I w dx2d nie ma takiego nacisku na vertexy, w ogóle wszystko jest jakieś takie... inne :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1