Bilder aufhellen/verdunkeln von ??? |
Hi, ich habe gerade eine kleine funktion für ShadowTurtles Online-Rollenspiel geschrieben. Mit dieser funktion kann man Bilder aufhellen/verdunkeln. somit ensteht das gefühl als wäre es nacht/tag. das ganz wird direkt im speicher geändert und somit wird das bild sofort geändert. wenn man das original im speicher behalten will sollte man vorher mit copyimage ein neues erstellen. hier der code: [code:1:9c19caf147] Graphics 640,480,16,2 Const CONST_SUB% = - 1 Const CONST_ADD% = + 1 Image = LoadImage ("C:Test.Bmp") MaskImage Image,255,0,255 For Temp = 1 To 100 Image = SetImageGamma (Image,CONST_SUB%,3) DrawImage Image,0,0 Delay 20 Next WaitKey End Function SetImageGamma (hImage%,Mode% = CONST_ADD%,GammaWert% = 8,MaskColor_R% = 255,MaskColor_G% = 0,MaskColor_B% = 255) ImageW% = ImageWidth (hImage%) ImageH% = ImageHeight (hImage%) LockBuffer ImageBuffer (hImage%) For PosY% = 0 To ImageH% - 1 For PosX% = 0 To ImageW% - 1 RGB_Pixel% = ReadPixelFast (PosX%,PosY%,ImageBuffer (hImage%)) R_Pixel% = ((RGB_Pixel And $FF0000) / $10000) G_Pixel% = ((RGB_Pixel And $FF00) / $100) B_Pixel% = (RGB_Pixel And $FF) If R_Pixel% = MaskColor_R% And G_Pixel% = MaskColor_G% And B_Pixel% = MaskColor_B% Then Goto JumpPoint_1 R_Pixel% = R_Pixel% + (GammaWert% * Mode%) G_Pixel% = G_Pixel% + (GammaWert% * Mode%) B_Pixel% = B_Pixel% + (GammaWert% * Mode%) Select Mode% Case - 1 If R_Pixel% < 0 Then R_Pixel% = 0 If G_Pixel% < 0 Then G_Pixel% = 0 If B_Pixel% < 0 Then B_Pixel% = 0 Case + 1 If R_Pixel% > 255 Then R_Pixel% = 255 If G_Pixel% > 255 Then G_Pixel% = 255 If B_Pixel% > 255 Then B_Pixel% = 255 End Select RGB_Pixel% = ((R_Pixel% * $10000) + (G_Pixel% * $100) + B_Pixel%) WritePixelFast (PosX%,PosY%,RGB_Pixel%,ImageBuffer (hImage%)) .JumpPoint_1 Next Next UnlockBuffer ImageBuffer (hImage%) Return hImage% End Function [/code:1:9c19caf147] die funktion kann frei verwendet werden. würde mich aber freuen wenn ihr mir sagt ob ihr sie gebracuhen konntet oder nicht... :-) cu |
von ??? |
Ist es in Realtime brauchbar bei einem Screen von 800x600? ;) Hmm, da vertrau ich lieber auf den alten Trick mit B3D eine Schwarze Box über den 2D screen zu machen und zu faden ;) |
von ??? |
hi, da sich die grafiken ja nicht ständig ändern - da sich die helligkeit eines tages ja nicht durchgehend ändert - ist es in einem spiel dieser auflösung durchaus brauchbar. die grafiken werden ja im speicher geändert. somit ist die veränderung nur 1x nötig. außerdem könnte man das ganze zur not auch vorrendern. man könnte es aber auch so machen, dass wenn die zeit, die gespielt wurde über 2 Std. ist wird alles dunkler, und die zeit wird zurückgestellt. nach weiteren 2 Std. wird alles wieder heller. danach wieder normal. was ist daran so langsam ? :-) cu |