| |

Fortgeschrittene ProgrammierungBildpunkte 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!! |  |
 | 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 |
  |
|
Neu! sevCommand 4.0 
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere InfosTipp des Monats Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
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
|
|