Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Funktion, ändra storlek på bild

Postades av 2007-08-16 10:42:30 - Pär-Ola Håkansson, i forum vb.net, Tråden har 4 Kommentarer och lästs av 924 personer

Hej!

Jag har skrivit ett litet program som ska ändra storlek på ett gäng bilder. Problemet är
att det fungerar jättebra så länge bilderna inte är större än ca 1 MB. En och en går det
jättebra men om jag loopar min funktion så reagerar min ProgressBar kanske de 10
första gångerna sedan låser sig programmet tills allt är klart. Det kommer alltså till liv
igen när alla bilder är förminskade.

Finns det något i denna funktionen som skulle kunna ändras för att programmet inte ska
låsa sig? Testade att tråda funktionen men det blev bara sämre..

Public Function SavePicture(ByVal File As String, ByVal FileName As String) As Boolean

Try
If Advanced Then
sizeWillBeX = x.Value
sizeWillBeY = y.Value
Else
cb.Focus()
End If

If InStr("gif png jpg jpeg bmp", ext) = 0 Then
If Not Advanced Then
Me.TopMost = False
MsgBox("Det går inte att ändra storlek på " & filen & ", endast GIF JPG BMP och PNG tillåts!", MsgBoxStyle.Critical, "Gick inte ändra storlek")
Me.TopMost = True
Else
info.Items.Add("Fel: Filformat ej godkänt - " & FileName)
End If

pb.Value = 0
Exit Function
End If

Dim bm As New Bitmap(File)

Dim oldWidth As Integer = bm.Size.Width

Dim oldHeight As Integer = bm.Size.Height

pb.Value = 40

Dim Width As Integer
Dim Height As Integer

If keepAspectRatio Then
If (oldWidth > sizeWillBeX Or oldHeight > sizeWillBeY) Then
If (oldWidth >= oldHeight) Then
Width = sizeWillBeX
Height = oldHeight * (sizeWillBeX / oldWidth)
Else
Width = oldWidth * (sizeWillBeY / oldHeight)
Height = sizeWillBeY
End If
Else
Width = oldWidth
Height = oldHeight
End If
Else
Width = sizeWillBeX
Height = sizeWillBeY
End If



Dim thumb As New Bitmap(Width, Height)

Dim graph As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(thumb)

graph.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic

graph.DrawImage(bm, New Rectangle(0, 0, Width, Height), New Rectangle(0, 0, bm.Width, bm.Height), GraphicsUnit.Pixel)

graph.Dispose()

pb.Value = 50

Try
Dim ff As New System.IO.FileInfo(s & FileName)
If ff.Exists Then
If Not Advanced Then
Me.TopMost = False
MsgBox("Filen" & filen & " finns redan. Byt namn på den!", MsgBoxStyle.Critical)
Me.TopMost = True
Else
info.Items.Add("Fel: Filen finns redan i målmappen")
End If
pb.Value = 0
Exit Function
Else
If ext = "jpg" Or ext = "jpeg" Then
thumb.Save(s & FileName, System.Drawing.Imaging.ImageFormat.Jpeg)
ElseIf ext = "gif" Then
thumb.Save(s & FileName, System.Drawing.Imaging.ImageFormat.Gif)
ElseIf ext = "bmp" Then
thumb.Save(s & FileName, System.Drawing.Imaging.ImageFormat.Bmp)
ElseIf ext = "png" Then
thumb.Save(s & FileName, System.Drawing.Imaging.ImageFormat.Png)
End If

End If
Catch ex As Exception

End Try

pb.Value = 80

bm.Dispose()

pb.Value = 90

thumb.Dispose()

pb.Value = 100
If Advanced Then
info.Items.Add("Filen " & FileName & " ändrades.")
End If

pb.Value = 0
Catch ex As Exception
If Advanced Then
info.Items.Add("Det gick inte att hantera filen.")
Else
MsgBox("Ogiltigt filformat!", MsgBoxStyle.Critical)
pb.Value = 0
End If
End Try
End Function


Svara

Sv: Funktion, ändra storlek på bild

Postades av 2007-08-16 11:27:37 - Johan Djupmarker

Testa att lägga till "Application.DoEvents" mellan varje varv i loopen (eller allra helst så ofta som möjligt).

/Johan


Svara

Sv: Funktion, ändra storlek på bild

Postades av 2007-08-16 11:53:55 - Thomas Vanhaniemi

Det du helst ska göra är att köra funktionen i en egen tråd och därifrån uppdatera din progressbar. Hr nu inget exempel att ge dig direkt, men sök på Threading så hittar du säkert många exempel.

Anledningen till att allting fryser till är att funktionen tar upp all processortid och ger inte det grafiska gränssnittet tid att rita om. Man kan göra det med Application.DoEvents som föreslagits, men det är både "snyggare" och troligen mer vanligt att man gör det i en egen tråd.

Ett poblem du kan stöta på är att uppdatera kontrollen från en annan tråd än huvudtråden, men det går att fixa. På kontrollen finns en funktion som heter Invoke, med vilken du kan sätta egenskaper från andra trådar.


Svara

Sv: Funktion, ändra storlek på bild

Postades av 2007-08-16 13:42:47 - Pär-Ola Håkansson

Ja det är klockrent!

Hade ingen aning om att man kunde använda Application.DoEvents till detta. Har
3-5 projekt som ligger på is för att de inte uppdaterar som de ska... :D :D

Men jag kör ändå trådat så mycket jag kan, fick inte till det idag dock..

Tack så mycket!!

Kodar vidare....


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 725
27 958
271 751
332
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies