Du kan prøve med GetPixel og SetPixel.. det skulle gerne være meget hurtiger..
Option Explicit
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal
crColor As Long) As Long
Private Sub Form_Load() Dim i As Long, j As Long With Picture1 .Picture = LoadPicture("C:\billede.jpg") .Visible = False .AutoRedraw = True .ScaleMode = vbPixels For i = 1 To .ScaleWidth Step 5 For j = 1 To .ScaleHeight Step 5 If GetPixel(.hdc, i, j) = vbBlack Then ' <- Hvis pixel er sort. SetPixel .hdc, i, j, vbBlue ' <- Set blå pixel End If Next Next .Picture = .Image SavePicture .Picture, "C:\billede.bmp" End With End Sub
sjh... du er jo med i alle mine spm :) ...det jeg skal bruge det til er at jeg skal resample et stort billede husker du nok... og jeg har sparet den sidste class væk ved SELV at lave en: Sub TegnBillede(Kilde As PictureBox, Dest As PictureBox) og den tager størrelsen fra det store til det lille... men problem er alle de read's den skal lave... det tar en krig: 2048x1536 -> 500x375 = 13 sek. derfor hvis man kunne indlæse billedet i mem lave reads derfra og writes i et andet billede i mem og derefter picture i form = picture i mem... kan du følge mig?
okææ vi prøver igen.. nu kommer jeg billede i mDC.. er du så tilfreds.. hvis du skal løbe alle pixels gennem på et billede som er 1024x768 så skal du altså lave 480000 loops.. og da vb ikke er det hurtigste programmeringssprog, vil det tag lidt tid.. ellers skal du nok over i noget assembler som kan give dig max hastihed.
Private Sub Form_Load() Dim i As Long, j As Long Dim intWidth As Integer, intHeight As Integer
Dim mDC As Long ' <- billede i hukommelsen
With Picture1 .Picture = LoadPicture("C:\billede.jpg") .Visible = False .AutoRedraw = True .ScaleMode = vbPixels intWidth = .ScaleWidth intHeight = .ScaleHeight mDC = .hdc ' <- billede i hukommelsen End With
' Arbejder med billede i hukommelsen For i = 1 To intWidth Step 5 For j = 1 To intHeight Step 5 If GetPixel(mDC, i, j) = vbBlack Then ' <- Hvis pixel er sort. SetPixel mDC, i, j, vbBlue ' <- Set blå pixel End If Next Next ' Arbejder med billede i hukommelsen
With Picture1 .Picture = .Image SavePicture .Picture, "C:\billede.bmp" End With End Sub
hvorfor h....... har du ikke vist mig den noget før!!?!???!? det er jo det jeg har ledt efter i flere dage! du skulle ha røvfuld i den ene ende og kys i den anden!
ja jeg har været forkølet og snotten er løbet ud af kraniet på mig hele ugen.. så jeg har ikke været het på toppen.. men jeg kunne jo være blevet i min seng.. så havede du ikke fået hjælp af mig.. ;)
men det var da godt du fik det som du ville.. nu kan jeg sove roglig i nat :D
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.