Merko Skrevet 18. mai 2007 Del Skrevet 18. mai 2007 Hei. Jeg holder på med ett lite spill her så lurer jeg litt på hvordan jeg lager en vanlig picture box med svart bakgrundsfarge litt gjennomsiktig? Da tenker jeg gjennom til formen bak pictureboksen, ikke gjennom hele programmet\Spillet. Takk for svar Lenke til kommentar
aadnk Skrevet 18. mai 2007 Del Skrevet 18. mai 2007 Tja, dette er til en viss grad mulig, men det er neppe slik du bør løse dette problemet. Jeg anbefaler at du tar en titt på BitBlt/TransparentBlt (dvs. GDI) eller, om du er riktig så sofistikert, DirectX. Lenke til kommentar
j000rn Skrevet 18. mai 2007 Del Skrevet 18. mai 2007 (endret) System.Drawing.Bitmap b = new Bitmap(pictureBox1.Image); for (int y = 0; y < b.Height; y++) for (int x = 0; x < b.Width; x++) { Color c = b.GetPixel(x, y); b.SetPixel(x, y, Color.FromArgb(128, c.R, c.G, c.B)); } pictureBox1.Image = b; Går *TREIGT*. For å få det til å FORT se GeirGrusom sitt eksempel på "hardcore drawing" i denne tråden: https://www.diskusjon.no/index.php?showtopic=648798 (kun C#) edit; var litt full så jeg klarte å bytte om X & Y Endret 18. mai 2007 av jorn79 Lenke til kommentar
Merko Skrevet 18. mai 2007 Forfatter Del Skrevet 18. mai 2007 (endret) Glemte å nevne at dette var visual basic 6. Nå kan jeg _ingenting_ om DirectX, så tror jeg vil prøve å finne en annen løsning først. Edit: Vil også legge til at jeg vil ha den rundt 50% gjennomsiktig viss det er mulig Endret 18. mai 2007 av vbPro Lenke til kommentar
GeirGrusom Skrevet 19. mai 2007 Del Skrevet 19. mai 2007 Aiaiai, isåfall må du bruke AlphaBlend... men det kreves litt kunnskap om GDI for å brukes skikkelig... pluss at denne tegner 32-bit bilder med Alpha kanal... hvordan du tegner halvveis gjennomsiktig aner jeg ikke... Nå har ikke jeg VB6 installert lenger, så jeg får ikke laget et eksempel for deg. Men problemet med VB6, er at DirectDraw forsvinner helt i DirectX 9 og 10, nyeste implementeringen av DirectDraw finner du i DirectX 7... Etter dette er det Direct3D som gjelder, siden DirectDraw blir strengt tatt unødvendig hvis man har Direct3D eller OpenGL. Og VB6 bruke GDI for å tegne grafikk, og i GDI er det ingen støtte for 32-bit lagt med i VB6, derfor må du bruke API kall for å få det til. Jeg er ikke engang sikker på om VB6 kan laste 32-bit bilder... Du kan evt også bruke OpenGL, men da må du kunne OpenGL. Jeg har derimot laget OpenGL eksempler i VB6, menneh, jeg er ikke sikker på om de ligger på dette forumet lenger, og jeg tror ikke jeg har tatt vare på dem Lenke til kommentar
aadnk Skrevet 19. mai 2007 Del Skrevet 19. mai 2007 Aiaiai, isåfall må du bruke AlphaBlend... men det kreves litt kunnskap om GDI for å brukes skikkelig... pluss at denne tegner 32-bit bilder med Alpha kanal... hvordan du tegner halvveis gjennomsiktig aner jeg ikke... 8645054[/snapback] Lag en bildeboks med navn picImage og legg inn et bilde via Picture-egenskapen. Sett ScaleMode på den og formen til Pixel. Lim dernest inn følgende kode: Private Declare Function AlphaBlend Lib "msimg32.dll" (ByVal hdc As Long, ByVal lInt As Long, _ ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal hdc As Long, ByVal lInt As Long, _ ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal Blendfunc As Long) As Long Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, _ Source As Any, ByVal Length As Long) Private Type BlendFunction BlendOp As Byte BlendFlags As Byte SourceConstantAlpha As Byte AlphaFormat As Byte End Type Const AC_SRC_OVER = &H0 Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim BF As BlendFunction, lData As Long ' Initialiser verdier With BF .BlendOp = AC_SRC_OVER .BlendFlags = 0 .SourceConstantAlpha = 128 ' 50% av 255 .AlphaFormat = 0 End With ' Brukerdefinerte typer kan ikke sendes som ByVal i API-calls. Vi må derfor omgjøre den til Long. CopyMemory lData, BF, 4 ' Tegn bildeboks AlphaBlend Me.hdc, X, Y, picImage.ScaleWidth, picImage.ScaleHeight, picImage.hdc, _ 0, 0, picImage.ScaleWidth, picImage.ScaleHeight, lData End Sub Lenke til kommentar
Merko Skrevet 20. mai 2007 Forfatter Del Skrevet 20. mai 2007 (endret) aadnk: Jeg har prøvd koden din, men den ser ikke ut til å fungere. Jeg fant frem et bilde, men bildet blir ikke noe gjennomsiktig i det heletatt. Er vel egentlig ingen forskjell .. noen tips? Endret 20. mai 2007 av vbPro Lenke til kommentar
aadnk Skrevet 20. mai 2007 Del Skrevet 20. mai 2007 aadnk: Jeg har prøvd koden din, men den ser ikke ut til å fungere. Jeg fant frem et bilde, men bildet blir ikke noe gjennomsiktig i det heletatt. Er vel egentlig ingen forskjell .. noen tips? 8652060[/snapback] Virkelig? Er du sikker på at du ikke bare ser bildet tegn over seg selv to ganger (50% * 2, som da blir 100%)? Kan du poste et skjermskudd? Lenke til kommentar
Merko Skrevet 20. mai 2007 Forfatter Del Skrevet 20. mai 2007 (endret) aadnk: Jeg har prøvd koden din, men den ser ikke ut til å fungere. Jeg fant frem et bilde, men bildet blir ikke noe gjennomsiktig i det heletatt. Er vel egentlig ingen forskjell .. noen tips? 8652060[/snapback] Virkelig? Er du sikker på at du ikke bare ser bildet tegn over seg selv to ganger (50% * 2, som da blir 100%)? Kan du poste et skjermskudd? 8652073[/snapback] Vel noe skjer.. det som skjer er at bildet blir tegnet opp flere ganger der jeg kjører musa (da jeg vifter rundt med musa over formen). Det jeg egentlig villet var å ha bildet gjennom siktig i pictureboksen liksom. =) Endret 20. mai 2007 av vbPro Lenke til kommentar
aadnk Skrevet 20. mai 2007 Del Skrevet 20. mai 2007 Det jeg egentlig villet var å ha bildet gjennom siktig i pictureboksen liksom. =) 8652078[/snapback] Poenget var at du skulle bruke koden jeg gav deg til å skrive nettopp det. Sett den i Form_Load og la AutoRedraw på formen og bildeboksen være satt til True. Glem det med å få bildeboksen gjennomsiktig. Det er ikke den rette veien å gå. Med AlphaBlend kan du TEGNE et bilde på formen med gjennomsiktighet. Koden min viser hvordan. Lenke til kommentar
Merko Skrevet 20. mai 2007 Forfatter Del Skrevet 20. mai 2007 Det jeg egentlig villet var å ha bildet gjennom siktig i pictureboksen liksom. =) 8652078[/snapback] Poenget var at du skulle bruke koden jeg gav deg til å skrive nettopp det. Sett den i Form_Load og la AutoRedraw på formen og bildeboksen være satt til True. Glem det med å få bildeboksen gjennomsiktig. Det er ikke den rette veien å gå. Med AlphaBlend kan du TEGNE et bilde på formen med gjennomsiktighet. Koden min viser hvordan. 8652095[/snapback] Dette var vel overhode ikke det jeg var ute etter. Det jeg spurte etter fra i begynnelsen av var å ha en picturebox til å være ca 50% gjennomsiktig, grunnen til at jeg vil ha den gjennomsiktig er pga jeg bruker Picturebox til ett slags "informasjons vindu" i det spillet jeg holder på med. Derfor ville jeg ha den litt gjennomsiktig. Men takk uansett. Lenke til kommentar
GeirGrusom Skrevet 20. mai 2007 Del Skrevet 20. mai 2007 Hvis man lager spill, bruker man ikke kontroller til å tegne noe som helst, man bruker kun en tom form, som man tegner opp for hver frame, og da må du enten bruke GDI på den måten som aadnk viser, eller legge til DirectDraw, Direct3D eller OpenGL. Hvis du bruker GDI+ (som er nesten helt implementert i VB.NET aprikos) så vil du kunne få til mange mer fancy effekter. Det er mulig man kan få til GDI+ i VB6, men det er mye greier for å få det til. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå