Bitmap vykreslování – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Bitmap vykreslování – .NET – Fórum – Programujte.comBitmap vykreslování – .NET – Fórum – Programujte.com

 

Mutagen0
Super člen
6. 3. 2013   #1
-
0
-

Zdravím, dělám si takovou ulitku co mi klikáním do bitmapy vytváří nějakou mapu.

Hlavní problem je v tom, že když tam mám už xx textur přidaných, tak se mi to začíná pomalinku zlehounka zpomalovat a čím víc textur tím pomalejší. Nevím jak to vyřešit. Pozice odkud mě to bere texturu (tileset) a rozkouskovává si zapisuju do Listu a pak přes funkci nechávám vykreslovat.

kod zde

	private void GenerateNewTerain()
        {
            Bitmap bitmap = new Bitmap(SharedEngine.MapField + 1, SharedEngine.MapField + 1);
            Graphics _grap = Graphics.FromImage(bitmap);

            int Size = SharedEngine.MapField / SharedEngine.CutTextureSize;

            int _x = 0;
            int _y = 0;

            for (int x = 0; x < Size; x++)
            {
                for (int y = 0; y < Size; y++)
                {
                    _grap.DrawRectangle(Pens.Black, _x, _y, SharedEngine.CutTextureSize, SharedEngine.CutTextureSize);
                    _y += SharedEngine.CutTextureSize;
                    foreach (PositionTexture pt in SharedEngine.newTexture)
                        if (pt.MapPositionX == x && pt.MapPositionY == y)
                        {
                            string Path = SharedEngine.Tileset_Path;
                            int MapPosX = pt.MapPositionX * SharedEngine.CutTextureSize;
                            int MapPosY = pt.MapPositionY * SharedEngine.CutTextureSize;
                            int CutSize = SharedEngine.CutTextureSize;
                            _grap.DrawImage(SharedEngine.ImageCut.Cut(Path, CutSize, CutSize, pt.TexturePositionX, pt.TexturePositionY), MapPosX, MapPosY, CutSize, CutSize);
                        }
                }
                _y = 0;
                _x += SharedEngine.CutTextureSize;
            }
            PictureBox_Map.Image = bitmap;
        }

Kdyžtak ta funkce co mi najde texturu a rozkouskuje je zde

	public Image Cut(string Img, int Width, int Height, int x, int y)
        {
            Image Obr = Image.FromFile(Img);
            Bitmap bmp = new Bitmap(Width, Height, PixelFormat.Format24bppRgb);

            bmp.SetResolution(Width, Height);

            Graphics gfx = Graphics.FromImage(bmp);

            gfx.SmoothingMode = SmoothingMode.AntiAlias;
            gfx.InterpolationMode = InterpolationMode.HighQualityBicubic;
            gfx.PixelOffsetMode = PixelOffsetMode.HighQuality;
            gfx.DrawImage(Obr, new Rectangle(0, 0, Width, Height), x, y, Width, Height, GraphicsUnit.Pixel);

            Obr.Dispose();
            //bmp.Dispose();
            gfx.Dispose();
            bmp.MakeTransparent(Color.FromArgb(84, 138, 150));
            return bmp;
        }

Díky za pomoc.

Nahlásit jako SPAM
IP: 89.190.90.–
Mutagen0
Super člen
6. 3. 2013   #2
-
0
-

+ ještě abych dodal, tak mi CPU stoupne na maximum, když mám to pole celý soázený zelení a přidám nějakej item (texturu do bitmapy)

Nahlásit jako SPAM
IP: 89.190.90.–
Mutagen0
Super člen
7. 3. 2013   #3
-
0
-

Tak nakonec vyřešeno. Místo CutImage používám

Rectangle CutImage = new Rectangle(pt.TexturePositionX, pt.TexturePositionY, CutSize, CutSize);
Rectangle InputImage = new Rectangle(MapPosX, MapPosY, CutSize, CutSize);

_grap.DrawImage(SharedEngine.Img, InputImage, CutImage, GraphicsUnit.Pixel);

A u formu nastaveno DoubleBuffering.

Nahlásit jako SPAM
IP: 89.190.90.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 54 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý