Avatar billede fizz Nybegynder
06. september 2005 - 21:57 Der er 18 kommentarer og
1 løsning

Billede i hukommelsen

hvordan gemmer man et billede i hukommelsen??

dim Billede as etellerandet
billede= picture1.image... eller hva?

bytearray måske??

...hjælp!
Avatar billede fizz Nybegynder
06. september 2005 - 21:59 #1
vil gerne kunne lave nogle hurtige Read/Write i de enkelte pixels... og picture.point er ZZzZzZZZzZZZ
Avatar billede fizz Nybegynder
06. september 2005 - 22:08 #2
og picture.pset er endnu mere ZZZZZZZZZZZZZZZZZZZZZ
Avatar billede fizz Nybegynder
06. september 2005 - 23:37 #3
det jeg gerne vil er at åbne et billede, tegne på det og gemme det igen uden at man fysisk skal kunne se billedet i en picturebox
Avatar billede sjh Nybegynder
07. september 2005 - 04:00 #4
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
Avatar billede sjh Nybegynder
07. september 2005 - 04:05 #5
SetPixel skal være sådan..

Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long
Avatar billede fizz Nybegynder
07. september 2005 - 21:03 #6
du har ikke forstået spørgsmålet... jeg vil IKKE have et fysisk billede... jeg vil have det i memory...
men tak for setpixel/getpixel....
Avatar billede sjh Nybegynder
07. september 2005 - 21:10 #7
jo .hdc er adressen til billede i hukommelsen.. ellers må du lige fortælle hvad du mener med billede i hukommelsen??
Avatar billede fizz Nybegynder
07. september 2005 - 21:56 #8
hastigheden på setpixel kontra pset er ca 3/4
det jeg ville var at have en variabel hvor billedet lå i
Avatar billede fizz Nybegynder
07. september 2005 - 22:15 #9
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?
Avatar billede fizz Nybegynder
07. september 2005 - 22:16 #10
13 sek @ 3.6 GHz
Avatar billede sjh Nybegynder
07. september 2005 - 22:18 #11
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
Avatar billede sjh Nybegynder
07. september 2005 - 22:38 #12
Ja.. men du skal nok ikke regne med at vb kan klare det på 1-2 sek .. men det bedste du kan er nok at bruge noget i stil med den her: http://www.vbaccelerator.com/home/VB/Code/vbMedia/DIB_Sections/True_Colour_DIBSection/VB6_DIBSection_Demonstration.asp
Avatar billede fizz Nybegynder
07. september 2005 - 22:42 #13
men om jeg bruger SetPixel mDC eller SetPixel picture1 er hastigheden den samme... LANGSOM... kan man ikke få billedets pixels i et array:

dim mypicture(width,height) as long
mypicture = pixels i picture1.picture
Avatar billede fizz Nybegynder
07. september 2005 - 22:42 #14
kopiere fra picture til array uden brug af loop...
Avatar billede sjh Nybegynder
07. september 2005 - 22:53 #15
Avatar billede fizz Nybegynder
07. september 2005 - 23:52 #16
skod... men du har ret
Avatar billede sjh Nybegynder
08. september 2005 - 10:41 #17
måske kunne du bruge den her: http://www.Planet-Source-Code.com/vb/scripts/ShowCode.asp?txtCodeId=39776&lngWId=1

det må næsten være det du mener med resample..
Avatar billede fizz Nybegynder
08. september 2005 - 22:12 #18
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!
Avatar billede sjh Nybegynder
09. september 2005 - 07:33 #19
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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester