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-2024
 
zurück

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

ActiveX-Programmierung
VirtualBox API - TakeScreenShotToArray 
Autor: KaiBart1986
Datum: 20.09.10 16:43

Hallo,

so mein erster Thread und es geht um die VirtualBox API als COM-Schnittstelle (hier ist zwar ActiveX, aber das ist meiner Meinung nach das nächstgelegendste).

Also... ich möchte von meinem Display Object ein ScreenShot speichern und die Daten hierfür in einem Array erhalten. Es geht zwar auch über den Framebuffer, aber da treff ich auf das gleiche Problem.

Da es immer so schön heisst: RTFM... =) Hier die Funktionsbeschreibung:
--------------------------------------------------------
octet[] IDisplay::takeScreenShotToArray(
[in] unsigned long screenId,
[in] unsigned long width,
[in] unsigned long height)
screenId Monitor to take screenshot from.
width Desired image width.
height Desired image height.
......
and returns it as an array of bytes in
uncompressed 32-bit RGBA format. A pixel consists of 4 bytes in order: R, G, B, 0xFF.
----------------------------------------------------------
Also... kein Ding...

einfach mal initialisieren in der Hoffnung das das Array so angeordnet ist:
{R,G,B,A,R,G,B,A} ...
Dim data() as Byte
//Screenshot von Monitor 0 in der größe 120x120...
idisplay.takeScreenShotToArray(0,120,120)
Keine Chance. "Specified array was not of the expected type."


Ok also noch einmal gucken was genau der Return-Type in VB ist... System.Array... hm etwas allgemein aber probieren als System.array => Specified array...

2 Dimension in der FOrm
[ [RGBA],[RGBA],[RGBA] ] ist es allerdings auch nicht.

Nützliche Tipps wie ich hier weiter vorgehen kann?

hier noch ein link zur Doku:
http://download.virtualbox.org/virtualbox/SDKRef.pdf
Seite 88


Gruß und ich hoffe ihr könnte mir helfen.

Kai B.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VirtualBox API - TakeScreenShotToArray 
Autor: sudave
Datum: 20.09.10 18:18

Du hast es schon aufgerufen mit

data = idisplay.takeScreenShotToArray(0,120,120)
oder?

Wenn ich im Objekt Browser nach der Funktion suche, steht da jedenfalls Byte() als Rückgabewert, die Funktions-Attribute sind aber scheinbar nicht zulässig.

Noch eine Idee: Hast du es mal mit dem Monitor 1 (statt 0) versucht?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VirtualBox API - TakeScreenShotToArray 
Autor: KaiBart1986
Datum: 20.09.10 19:18

Ups sry war ein kopierfehler. Natürlich mit Zuweisung an data.

Probier ich gleich mal aus. Hab das Programm auf der Arbeit, vondaher muss ich das mal fix neu bauen.

Aber ich denke wir sind einer Meinung das ein 1-dimensionales Byte-Array der Rückgabetyp ist?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VirtualBox API - TakeScreenShotToArray 
Autor: KaiBart1986
Datum: 21.09.10 09:18

So gerade mal ausprobiert... kein Erfolg
vbConsole = session.Console
display = vbConsole.Display
Dim data() As Byte
        Try
            data = display.TakeScreenShotToArray(1, 120, 120)
            Console.Write("Success")
        Catch ex As Exception
 
            Console.WriteLine(ex.Message) //Specified array was not of the _
              expected type.
        End Try
Bin langsam echt ratlos
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VirtualBox API - TakeScreenShotToArray 
Autor: KaiBart1986
Datum: 21.09.10 11:19

Nachtrag:

Es handelt sich hierbei um eine Exception des Typs:

"System.Runtime.InteropServices.SafeArrayTypeMismatchException"

Tja... nuuuur... wie implementiere ich ein SafeArray als byte?
  Private Structure SAFEARRAYBOUND
        Public cElements As Long
        Public lLbound As Long
    End Structure
    Private Structure SAFEARRAY
        Public cDims As Integer
        Public fFeatures As Integer
        Public cbElements As Long
        Public cLocks As Long
        Public pvData As Long
        Public Bounds() As SAFEARRAYBOUND
    End Structure
Das sagt mir MSDN....
*ratlos weiterhin*
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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-2024 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