Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2009

Skapa och spara en bitmap VB

Hej

Jag har ett Graphics objekt som jag vill spara som en bild, tex bitmap.

Dim mygraphics As Graphics

sen har jag ritat lite i den med

mygraphics.DrawLine.... &
mygraphics.DrawString..

nu skulle jag vilja spara det objektet som en bild,

mygraphics är också kopplad till en picturebox om det hjälper

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Apr 2004

Titta till exempel här: http://msdn.microsoft.com/en-us/library/system.drawing.image....

Något i stil med
picturebox.Image.Save("uu.bmp")
borde fungera.

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2009

Okej saken ska undersökas

men nu har jag ett lite jobbigare problem

programmet jag håller på med skickar ett kommando till en modul via en usb port, eller virituell com port.

jag kan skicka och ta emot data utan problem men jag skulle vilja göra det i bakrunden.

dvs jag vill skicka ett spec. kommando vänta på svar, när man har fått svar skicka ett nytt och vänta på svar.. om och om igen..

men det skulle behövas göras i bakrunden så jag kan behandla svaren under tiden och så att användaren kan peta på GUI'n tex trycka på cancel osv.. det finns några fina exempelprogram i msdn men ja lyckas inte få det att fungera med comprten :/

här är en bit av koden:

Dim comPorts As Array 'Com ports enumerated into here Public rxBuff As String 'Buffer for receievd data Dim connected As Integer = 0 Public Sub Connect() comPorts = IO.Ports.SerialPort.GetPortNames() 'Set remaining port attributes SerialPort1.BaudRate = 19200 SerialPort1.Parity = IO.Ports.Parity.None SerialPort1.StopBits = IO.Ports.StopBits.One SerialPort1.DataBits = 8 For i As Integer = 0 To UBound(comPorts) '=============================================== SerialPort1.Close() SerialPort1.PortName = comPorts(i) SerialPort1.Open() '=============================================== '=============================================== 'If port is closed, then open it 'If SerialPort1.IsOpen = False Then '=============================================== If SendCommand("AT+GMM", 0) = "UC864-E" Then MsgBox("Connection made" ) connected = 1 Exit For End If 'SerialPort1.Close() Next If connected = 0 Then MsgBox("No connection made") End If End Sub

If SendCommand("AT+GMM", 0) = "UC864-E" Then

Är för att den ska välja ut rätt port, AT+GMM ger svar UC864-E om det är rätt modul ansluten

Public Function SendCommand(ByVal command As String, ByVal mode As Integer) 'Clear buffer rxBuff = "" ''Write this data to port If SerialPort1.IsOpen = True Then SerialPort1.Write(command & vbCr) Else MsgBox("No connection to the device") End If 'Pause for 25ms System.Threading.Thread.Sleep(20) 'If the port is open, then close it 'If SerialPort1.IsOpen = True Then SerialPort1.Close() 'If the buffer is still empty then no data. If rxBuff = "" Then Return "No Response" Else MsgBox(rxBuff) Return rxBuff End If End Function

Kan man på nått sätt köra SendCommand via en tråd? jag lyckas inte iallafall

Trädvy Permalänk
Medlem
Plats
Bromma
Registrerad
Aug 2008

läs på om trådar;) du kan anropa en funktion när en ny tråd skapas!
Edit: Det blir lite krångligare med trådar. Men pilla runt så ska det fungera. Du kan sätta att huvudtråden ska vänta in en subtråd. Inte helt 100 på att huvudtråden inte låser sig då men testa. Annars kanske du får bygga en helt ny tråd med beräkningen, inte enbart för den funktionen..

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Apr 2004

Det enklaste är att sköta hanteringen från ett backgroundWorker-objekt.

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2009

Precis

Har läst runt lite om trådar och kikade på Walkthrough: Multithreading

http://msdn.microsoft.com/en-us/library/ywkkz4s1.aspx

Men jag måste säga att jag har lite svårt att greppa vad den gör med alla
CType(e.UserState, ....) osv

måste BackgroundWorker köra ett objekt? den kan inte bara utföra en funktion om jag har förstått det hela rätt?

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Apr 2004
Citat:

Ursprungligen inskrivet av niklu147
måste BackgroundWorker köra ett objekt? den kan inte bara utföra en funktion om jag har förstått det hela rätt?

Jodå, man kan egentligen strunta i alla parametrar om man vill; det är bara att skriva vad man vill göra i DoWork(). Dock är de smidiga om man till exempel vill skicka med nödvändig data när tråden skapas eller om man vill skicka data till omvärlden. e.Argument, e.UserState och liknande är då bara object-objekt av de data man skickade med; konvertera dem till vad de var innan för att använda dem.