vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Bildpunkte in Array laden 
Autor: Doremi
Datum: 04.04.06 17:58

Ich beschäftige mich zur zeit mit dem Auslesen von informationen aus Bildern. Da VB jedoch selbst mit GetPixel und SetPixel recht langsam ist, hab ich den Pointer Tipp agewendet den ich hier mal gefunden habe..
Type SAFEARRAYBOUND
  cElements As Long
  lLbound As Long
End Type
 
Type SAFEARRAY2D
  cDims As Integer
  fFeatures As Integer
  cbElements As Long
  cLocks As Long
  pvData As Long
  Bounds(0 To 1) As SAFEARRAYBOUND
End Type
 
Type BITMAP
  bmType As Long
  bmWidth As Long
  bmHeight As Long
  bmWidthBytes As Long
  bmPlanes As Integer
  bmBitsPixel As Integer
  bmBits As Long
End Type
 
'für  VB 6!
Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" ( _
    ByRef Ptr() As Any) As Long
 
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
    ByRef pDst As Any, ByRef pSrc As Any, ByVal ByteLen As Long)
 
Declare Function GetObjectAPI Lib "gdi32" Alias "GetObjectA" ( _
    ByVal hObject As Long, ByVal nCount As Long, _
    ByRef lpObject As Any) As Long
 
Public Function Invertieren()
 
Dim pic() As Byte
Dim sa As SAFEARRAY2D
Dim bmp As BITMAP
Dim r As Long, g As Long, b As Long
 
GetObjectAPI Picture1.Picture, Len(bmp), bmp
 
With sa
  .cbElements = 1
  .cDims = 2
  .Bounds(0).lLbound = 0
  .Bounds(0).cElements = bmp.bmHeight
  .Bounds(1).lLbound = 0
  .Bounds(1).cElements = bmp.bmWidthBytes
  .pvData = bmp.bmBits
End With
 
CopyMemory ByVal VarPtrArray(pic), VarPtr(sa), 4
 
For i = 0 To UBound(pic, 1)
  For j = 0 To UBound(pic, 2)
    pic(i, j)= 255 - pic(i, j)
  Next j
Next i
 
CopyMemory ByVal VarPtrArray(pic), 0&, 4
 
Picture1.Refresh
 
end function
Aber erstens verstehe ich diese art von Array deklarationen überhaupt nicht und finde dazu auch nichts im internet.. und 2tens verstehe ich nicht wirklich warum wenn ich was an der variable PIC ändere, diese änderungen auch im Picture Control (nach einem Refresh) übernommen werden, da doch PIC einfach eine Kopie von SA ist.. zumindest hab ich das so verstanden..
Es scheint auch als ob das mehr zeit zum bearbeiten kostet als wenn ich vorher PIC noch mit ner for=>next schleife in ein neues array kopiere und mit diesem arbeite (da ich die Änderungen die ich machen nicht im Bild zu sehen sein müssen)
jedoch geht das mti der for next schleife recht langsam
kann ich das auch irgendwie mit copymemory machen ohne das der rückbezug zum bild dabei ist?
Mein problem ist, dass alle Arbeiten am Bild so schnell wie möglich ausgeführt werden müssen.. momentan dauert alles insgesamt 1,4 sekunden und das ist noch viel zu lang für das was ich brauche..
hat irgendwer nen tipp wie ich noch schneller mit den Bildpunkten aus bildern arbeiten kann? (die änderungen müssen NICHT sichtbar gemacht werden! es reicht wenn sie im Array vorhanden sind)
bin für jede Hilfe sehr dankbar!

Unternehmt etwas gegen TCPA!! Lasst eucht nicht Kontrollieren!!

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Bildpunkte in Array laden632Doremi04.04.06 17:58
Re: Bildpunkte in Array laden428Zardoz04.04.06 22:02
Re: Bildpunkte in Array laden402Doremi04.04.06 22:10

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel