[ toxi_programer @ 23.08.2007. 18:23 ] @
Zdravo svima.

Opet mi treba vaša pomoć. Našao sam kod za Asteroids igricu koja je napisana u C# jeziku a u toj igricu se "brodić" koji igrač kontroliše rotira za 360°. Gledao sam kod i nisam uspeo da shvatim kako je izvedeno rotiranje. U pitanju je dvodimenzionalna grafika dobijena pomoću GDI+. Recimo imam na sred forme neku bitmapu i želim da se ona rotira pritiskom na recimo strelicu gore odnosno dole... Imate li neku ideju kako ovo da uradim?
[ PeraKojovic @ 23.08.2007. 21:20 ] @
Pozdrav,

prvo, potrebno je znati u kom je formatu slika, pretpostavimo da je tipa Bitmap.
Jedno resenje bi podrazumevalo da se koristi unsafe kod, i uzme pokazivac
na pomenutu bitmapu, pokupe se svi pikseli, odnosno uradi se "rucno" rotiranje
po nekom metodu za rotiranje. Bitmap-a jeste 2D, ali je u memorijskoj predstavi
to zapravo 1D - odnosno vektor piksela, odnosno niz (npr.)bajtova za tri komponente.
Znaci piksel_red1_kolona1, piksel_red1_kolona2...piksel_red1_kolonaN, piksel_red2_kolona1,
piksel_red2_kolona2,...piksel_red2_kolonaN... pa sve do piksel_redM_kolonaN
E sad bas da li je po kolonama pa po redovima ili obratno, probaj pa ces utvrditi.
Nesto kao:

Code:

BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
    int stride = bmData.Stride;
    System.IntPtr Scan0 = bmData.Scan0;
    unsafe
    {
        byte * p = (byte *)(void *)Scan0;
        int nOffset = stride - b.Width*3;
        byte red, green, blue;
        for(int y=0;y<b.Height;++y)
        {
            for(int x=0; x < b.Width; ++x )
            {
                blue = p[0];
                green = p[1];
                red = p[2];
                p += 3;
            }
            p += nOffset;
        }
    }
    b.UnlockBits(bmData);


Nadam se da sam pomogao...

[code]
[ vujkev @ 24.08.2007. 09:30 ] @
Za sve operacija sa gotovim slikama najbolje je koristiti Matrix. Pogledaj ovde
[ PeraKojovic @ 24.08.2007. 12:12 ] @
Lepo...
[ toxi_programer @ 24.08.2007. 17:23 ] @
Pero, jesi pomogao da naučim nešto novo, ali ovo za rotiranje nisam uspeo da uradim preko koda koji si dao
Svejedno, @vujkev je dao extra link, uspeo sam da uradim ovo sada...

Hvala vam!
Usput linkovani sajt mi se mnogo dopada zbog svog sadržaja.