C# DirectX - Problem mit Listen

Zum 2. Problem: typeof(int) !!!
 
Jop, das habe ich mitlerweile selber gemerkt. Habe eben alle ints auf Color geändert in der Hoffnung gleich die Farben zu erhalten.

Wieder ein Problem:

Code:
        public void NewCreateNewMap()
        {
            int[] MapSlope = BasicsMap.CreateMapSlope();
            BasicsMap.Map.MapTexture = new Texture(graphicDevice, 1680, 1050, 0, Usage.None, Format.R5G6B5, Pool.Managed);
            int[,] numArray = (int[,])BasicsMap.Map.MapTexture.LockRectangle(typeof(int), 0, LockFlags.None, new int[] { 1680,1050 });

            for (int x = 0; x < 1680; x++)
            {
                for (int y = 0; y < 1050; y++)
                {
                    numArray[x, y] = Color.Red.ToArgb();
                }
            }
            BasicsMap.Map.MapTexture.UnlockRectangle(0);
        }

        private void DrawMap()
        {
            sprite.Begin(SpriteFlags.AlphaBlend);
            sprite.Draw2D(BasicsMap.Map.MapTexture, Rectangle.Empty, new SizeF(1680, 1050), new PointF(0f, 0f), Color.White);
            sprite.End();
        }

Jetzt mach ich meine Textur 1680x1050 gross oder?
1. Ich denke um alle Pixel zu erhalten mit dem LockRectangle muss ich wohl beim int[,] Index hinten beim LockRectangle auch 1680 und 1050 nehmen oder? Wenn ich das aber laufen lasse erhalte ich einen AccessViolation Error. Warum des? Wie kann ich alle Pixel erhalten?
2. Wenn ich das mit 1680 und z.b.50 mache dann gehts, dann bekomm ich oben einige Pixel. Nun will ich diese Rot einfärben. Mit Color.Red.ToARGB(). Nun werden diese aber Grau gemacht. Liegt das am Sprite.Draw2D(.....Color.White)?
3. Ich habe darunter eine Blaue Zeichnung mit Wolken. Wie kann ich einzelne Pixel der Textur durchsichtig machen? wenn ich Transparent angebe wird es weiss.Blau, wenn ich es gar nicht setze, dann wird es schwarz.

Gruss Mike
 
MikeLadurner schrieb:
1. Ich denke um alle Pixel zu erhalten mit dem LockRectangle muss ich wohl beim int[,] Index hinten beim LockRectangle auch 1680 und 1050 nehmen oder? Wenn ich das aber laufen lasse erhalte ich einen AccessViolation Error. Warum des? Wie kann ich alle Pixel erhalten?
2. Wenn ich das mit 1680 und z.b.50 mache dann gehts, dann bekomm ich oben einige Pixel. Nun will ich diese Rot einfärben. Mit Color.Red.ToARGB(). Nun werden diese aber Grau gemacht. Liegt das am Sprite.Draw2D(.....Color.White)?
3. Ich habe darunter eine Blaue Zeichnung mit Wolken. Wie kann ich einzelne Pixel der Textur durchsichtig machen? wenn ich Transparent angebe wird es weiss.Blau, wenn ich es gar nicht setze, dann wird es schwarz.
1) Xtremebergi hatte in seinem Beispiel new Texture(...,...,...,1, und Du 0, was macht der Wert? Was für andere LockFlags gibt es denn noch evtl. LockFlags.ReadWrite ??
2) Dein Texturformat ist R5G6B5, also 16 Bit, Color ist aber A8R8G8B8 = 32 Bit, es kann gut sein das die Textur dann nur aus den ersten beiden Bytes (Alpha & Rot) erstellt wird, da die beide 0xFF sind bei Color.Red, deswegen kommt warscheinlich Grau raus.
3) Dafür brauchst Du ein Format mit Alpha-Channel wie Color es bietet (A8R8G8B8), je niedriger der Alpha-Wert desto durchsichtiger ist es dann, also bei Alpha = 0 ist diese Farbe komplett durchsichtig.
 
Danke, es lag am Format. Jetzt noch ein Problem:
Wie kann man von ner Textur die grösse auslesen?
Ich meine wenn ich mitm TextureLoader ne Textur lade, dann will ich doch vieleicht man etwas damit Rechnen. Warum gibts da nicht einfach die .Width oder .Height eigenschaft?

Gruss
 
Weil eine Textur nicht einfach nur ein Bild ist. Eine Textur hat mehrere Bilder, nämlich die Mipmaps. Deswegen kann eine Textur auch keine "Größe" haben. Aber du kannst die Größe der Mipmaps erhalten. In deinem Fall nimmst du einfach die Größe der Mipmap auf Level 0:

Code:
Surface mipmapLevel0 = myTexture.GetSurfaceLevel(0);
int width = mipmapLevel0.Description.Width;
int height = mipmapLevel0.Description.Height;
 
Zuletzt bearbeitet:
Zurück
Oben