[B3D] 2D-Lupe
Übersicht

![]() |
Der EisvogelBetreff: [B3D] 2D-Lupe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo
Ich habe eine 2D Lupe benötigt, und habe gedacht, der ein oder andere braucht sowas bestimmt auch. Also, erstmal die Erklärung der Funktion: Aufruf: Code: [AUSKLAPPEN] Loupe(lpimg,lpx,lpy,lmx,lmy,zmbf[,zoom])
Parameter: Code: [AUSKLAPPEN] lpimg = Handle der Lupe (z.B. mit CreateImage ermittelt)
lpx = X-Koordinate der Lupe lpy = Y-Koordinate der Lupe lmy = X-Koordinate des Mittelpunktes der Lupe lmy = Y-Koordinate des Mittelpunktes der Lupe zoom = Zomm-Faktor der Lupe (Standard=2) Der Buffer, der gesetzt ist, der wird in das Bild der Lupe vergößert eingezeichnet. Jetzt muss man die Lupe nur noch einzeichnen: Code: [AUSKLAPPEN] DrawImage lpimg,lpx,lpy
Jetzt könnte man die Lupe noch ein wenig verzieren. Wichtig dabei ist: Jedes mal, wenn man die Funktion aufruft, wird das Bild der Lupe komplett übermalt, man muss also die Verzierungen jedes mal neu zeichnen. Jetzt die Funktion: Code: [AUSKLAPPEN] Function Loupe(lpimg,lpx,lpy,lmx,lmy,zoom=2)
If zoom<1 Then RuntimeError(Chr(34)+"zoom"+Chr(34)+" must be greater then 0.") Local zmbf=GraphicsBuffer() Local loupe_width=ImageWidth(lpimg)-1 Local loupe_height=ImageHeight(lpimg)-1 LockBuffer zmbf LockBuffer ImageBuffer(lpimg) For y=0 To loupe_height/zoom For x=0 To loupe_width/zoom rgbpx=x+lpx+lmx/zoom*(zoom-1) rgbpy=y+lpy+lmy/zoom*(zoom-1) If rgbpx>=0 And rgbpx<GraphicsWidth() And rgbpy>=0 And rgbpy<GraphicsHeight() Then rgb=ReadPixelFast(rgbpx,rgbpy,zmbf) Else rgb=$FF000000 EndIf For ty=0 To zoom-1 For tx=0 To zoom-1 rgbpx=x*zoom+tx rgbpy=y*zoom+ty If rgbpx<loupe_width And rgbpy<loupe_height Then WritePixelFast(rgbpx,rgbpy,rgb,ImageBuffer(lpimg)) EndIf Next Next Next Next UnlockBuffer zmbf UnlockBuffer ImageBuffer(lpimg) End Function Und zum Schluss noch ein Beispiel: Code: [AUSKLAPPEN] Graphics 640,480,16,2
HidePointer wallpaper=LoadImage("wallpaper.png") loupe=CreateImage(150,150) loupe_1=LoadImage("loupe.png") : MaskImage loupe_1,255,0,200 loupe_2=CreateImage(150,210) : MaskImage loupe_2,255,0,255 zoom=2 SetBuffer BackBuffer() Repeat Cls DrawImage wallpaper,0,0 Loupe(loupe,MouseX()-75,MouseY()-105,60,60,zoom) SetBuffer ImageBuffer(loupe_2) DrawImage loupe,0,0 DrawImage loupe_1,0,0 SetBuffer BackBuffer() DrawImage loupe_2,MouseX()-75,MouseY()-105 If MouseHit(1) Then zoom=zoom+1 If MouseHit(2) And zoom>1 Then zoom=zoom-1 Flip Until KeyDown(1) WaitKey End Mit der linken Maustaste kann man den Zomm-Faktor erhöhen, und mit der rechten erniedrigen. Hier das ganze als Download-Paket mit Test-Bildern: Download-Paket Kritik ist erwünscht. MfG Der Eisvogel |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
- Zuletzt bearbeitet von Der Eisvogel am Fr, Okt 17, 2008 18:04, insgesamt 4-mal bearbeitet
![]() |
Valnar |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da stimmt etwas nicht im Download-Paket-Beispiel-Code, er meckert beiCode: [AUSKLAPPEN] Loupe(Loupe,MouseX()-75,MouseY()-105,60,60,BackBuffer(),zoom) das dieser zu viele Parameter hat ![]() |
||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh, sry.
Ich hab den Link oben erneuert jetzt müsste es gehen. |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
Nova |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da war wohl das backbuffer() zuviel.
Fehler: Wenn man aus dem Bild raus geht kommt ein MAV wegen ReadPixelFast, allerdings nur oben und unten. |
||
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, bei mit kommt keine MAV, aber ich sehe lustige Dinge, die man sonst eigentlich nicht zu gesicht bekommt.
Aber wenn du willst, dann könnte ich das fixen. EDIT: So erledigt, Link immernoch der Selbe. |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group