BitBlt je zaista sjajna API funkcija za kopiranje delova slika (i mnogih drugih stvari i to veoma brzo). Mada deluje kao izuzetno komplikovana, jedina stvar koja je kod nje zastrasujuca jeste sto ima vise parametara i sto ne radi sa nekim TCanvas objektom kao takvim, vec sa handlerom (hDC) nekog canvasa. Dakle, u parametrima ove funkcije ide Timage.Picture.Bitmap.Cavas.Handle (ako radis sa bitmapom u TImage, mada ne bi trebalo da bude problema ni sa Graphic umesto Bitmap, ako imas jpeg sliku... onda ti je ugnjezden objekat TJpeg, a ne TBitmap - mada ovo ruku na srce nisam probao).
Sve u svemu, evo ti aktivan primer iz jedne moje male desktop igre:
Code:
BitBlt(frmMAIN.Canvas.Handle, lastX, lastY, image1.Width,
image1.Height,BackroundBuffer.Canvas.Handle, lastX, lastY, SRCCOPY);
frmMAIN je naziv forme na kojoj iscrtavam, mada to moze da bude bilo koja komponenta koja ima canvas sa mogucnoscu pisanja, cak i neka bitmapa
backgroundBuffer je TBitmap koji cuva sliku desktopa.
lastX i
lastY su koordinate gornjeg levog ugla pravougaonika, a
image1.Width i
image1.height su, nagadjas...
Medjutim, vaznija stvar ovde je malo nepraktican sistem rada... nikako ti ne preporucujem da pravis previse objekata TImage na formi... nikako. Mislim, ne znam kako ce uopste da izgleda igra, ali ako nameravas da kreiras 20x20 plocica to ti je 400 objekata... kako ces da drzis celu zver pod kontrolom? Prijateljski savet sa cuvanje zivaca: nabaci neki paintbox (unutar kojeg ces po mogucstvu da presretnes i ponistis poruku WM_ERASEBKGND da bi izbegao suvisan & ruzan refreshing, a pritom ti osnovno iscrtavanje ostaje netaknuto) i na njemu iscrtavaj celu stvar. Brze, efikasnije i lakse za odrzavanje. Believe me :)
Pozdrav, Milan
P.S. Ako zaista zelis da radis na neki laksi nacin (?) probaj da radis sa Pixels metodom nekog TCanvas-a kojom pristupas individalnim pikselima, tj. njegovoj boji... ali u stvari dobijes komplikovaniji kod... izbor je tvoj.
Don't try to impress me... I'm good !