Ska göra en skins funktion till mitt program. Har tidigare programmerat VB6, men nu ska jag försöka mig på VB.net. I vb6 finns det ett api kommando som heter BitBlt som är väldigt bra till dessa syften. Men till VB.net verkar denna vara borttagen eller så vet jag ej hur jag ska göra. Har skummat runt lite på nätet och hittat en annan funktion som ska funka på liknande sätt. Men den är inte 100 %ig. Själva ritandet funkar bra. Men bilden fastnar inte för evigt. Så fort ett fönster kommer över mitt program så försvinner bilden och bilden måste ritas om. Då kan man ju tycka att det bara är att infoga samma kod i pant händelsen till pictureboxen. Detta gör att det blir ett ryckigt program. Jag vill att bilden ska ritas en gång och sedan ska den sitta där tills programmet stängs. Hej Ingen av dessa egenskaper finns i VB.Net. Egenskapen AutoRedraw hänvisar de i hjälpen att man ska använda Paint händelsen för att rita om bilden. Ska försöka att modifiera koden lite. Skapa en bitmap i önskad storlek och rita till den istället: Det var en bra ide. Nu har jag kommit en bra bit framåt. Jag fick modifiera Subrutinen SetImage. Destinationsbilden blev lite förstorad av någon anledning, jag fick lägga till någon rad. Rita bild i en picturebox från en annan bild.
Jag hoppas att någon kan detta och kanske kan hjälpa mig att komma framåt.
Jag bifogar en länk till mitt exempel så får ni se. http://groups.msn.com/Johansfiler/Dokument/skins.zip
Naturligtvis funkar inte länken som jag trodde. Den funkar bara om man har ett passportkonto på MSN. Har laddat upp den i filarean så att ni kan se.
Sök på skins i filareanSv: Rita bild i en picturebox från en annan bild.
Det borde räcka med att du ställer PictureBoxens propertie ClipControls = True
Kolla också AutoRedraw egenskapen sätt den till och från i lämpliga läge.
/SvenSv: Rita bild i en picturebox från en annan bild.
Sv: Rita bild i en picturebox från en annan bild.
<code>
Sub SetImage(ByVal Destination As Graphics, ByVal X As Integer, ByVal Y As Integer, ByVal W As Integer, ByVal H As Integer, ByVal bmp As Bitmap, ByRef startX As Integer, ByRef StartY As Integer)
Dim src As New Rectangle(startX, StartY, W, H)
Destination.DrawImage(bmp, X, Y, src, GraphicsUnit.Pixel)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim antal As Integer
Dim Bitmap As Bitmap
Dim Source As Bitmap
Dim G As Graphics
Dim Width As Integer
Dim Height As Integer
Const antalHight = 10
Const antalWith = 5
Width = (antalWith * 25) + 275
Height = (antalHight * 29) + 20 + 38
Source = picSrcPlEdit.Image
Bitmap = New Bitmap(Width, Height)
G = Graphics.FromImage(Bitmap)
SetImage(G, 0, 0, 25, 20, Source, 0, 0) 'TL
SetImage(G, Width - 25, 0, 25, 20, Source, 153, 0) 'TR
For antal = 1 To antalHight
SetImage(G, 0, 20 + (antal - 1) * 29, 25, 29, Source, 0, 42) 'L
SetImage(G, Width - 25, 20 + (antal - 1) * 29, 25, 29, Source, 26, 42) 'R
Next
antal = 0
For antal = 1 To antalWith
SetImage(G, 100 + (antal * 25), Height - 38, 25, 38, Source, 179, 0) 'DM
Next
antal = 0
For antal = 1 To antalWith + 9
SetImage(G, antal * 25, 0, 25, 20, Source, 127, 0) 'DM
Next
SetImage(G, 0, Height - 38, 125, 38, Source, 0, 72) 'DL
SetImage(G, Width - 150, Height - 38, 150, 38, Source, 126, 72) 'DR
SetImage(G, (Width / 2) - 50, 0, 100, 20, Source, 26, 0) 'TM
G.Dispose
PictureBox1.Size = New Size(Width, Height)
PictureBox1.Image = Bitmap
End Sub
</code>Sv: Rita bild i en picturebox från en annan bild.
<code>Sub SetImage(ByVal Destination As Graphics, ByVal X As Integer, ByVal Y As Integer, ByVal W As Integer, ByVal H As Integer, ByVal bmp As Bitmap, ByRef startX As Integer, ByRef StartY As Integer)
Dim src As New Rectangle(startX, StartY, W, H)
Dim dst As New Rectangle(X, Y, W, H) ‘Ny rad
'Destination.DrawImage(bmp, X, Y, src, GraphicsUnit.Pixel) bytte ut denna rad till den senare.
Destination.DrawImage(bmp, dst, src, GraphicsUnit.Pixel)
End Sub</code>
Sedan modifierade jag utterliggare för att kunna stretcha bilder. Det är bättre istället för att köra i loopar.
<code>Sub BitBlt(ByVal Destination As Graphics, ByVal X As Integer, ByVal Y As Integer, ByVal W As Integer, ByVal H As Integer, ByVal bmp As Bitmap, ByRef startX As Integer, ByRef StartY As Integer)
Dim src As New Rectangle(startX, StartY, W, H)
Dim dst As New Rectangle(X, Y, W, H)
Destination.DrawImage(bmp, dst, src, GraphicsUnit.Pixel)
End Sub
Sub StretchBlt(ByVal Destination As Graphics, ByVal X As Integer, ByVal Y As Integer, ByVal W As Integer, ByVal H As Integer, ByVal bmp As Bitmap, ByRef startX As Integer, ByRef StartY As Integer, ByRef SourceW As Integer, ByRef SourceH As Integer)
Dim src As New Rectangle(startX, StartY, SourceW, SourceH)
Dim dst As New Rectangle(X, Y, W, H)
Destination.DrawImage(bmp, dst, src, GraphicsUnit.Pixel)
End Sub
#End Region
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim antal As Integer
Dim Bitmap As Bitmap
Dim Source As Bitmap
Dim G As Graphics
Dim Width As Integer
Dim Height As Integer
Const antalHight = 6
Const antalWith = 8
Width = (antalWith * 25) + 275
Height = (antalHight * 29) + 20 + 38
Source = picSrcPlEdit.Image
Bitmap = New Bitmap(Width, Height)
G = Graphics.FromImage(Bitmap)
BitBlt(G, 0, 0, 25, 20, Source, 0, 0) 'TL
BitBlt(G, Width - 25, 0, 25, 20, Source, 153, 0) 'TR
BitBlt(G, 0, Height - 38, 125, 38, Source, 0, 72) 'BL
BitBlt(G, Width - 150, Height - 38, 150, 38, Source, 126, 72) 'BR
StretchBlt(G, 25, 0, Width - 50, 20, Source, 127, 0, 24, 20) 'TM
StretchBlt(G, 0, 20, 25, Height - 58, Source, 0, 42, 25, 28) 'L
StretchBlt(G, Width - 25, 20, 25, Height - 50, Source, 26, 42, 25, 28) 'R
StretchBlt(G, 125, Height - 38, Width - 275, 38, Source, 179, 0, 24, 38) 'BM
BitBlt(G, (Width / 2) - 50, 0, 100, 20, Source, 26, 0) 'Text TM
G.Dispose()
PictureBox1.Size = New Size(Width, Height)
PictureBox1.Image = Bitmap
End Sub</code>