roImagePlayer
Este objeto muestra imágenes de mapa de bits estáticas en la pantalla de video. La forma más sencilla de usar roImagePlayer es realizar llamadas a DisplayFile() con el nombre de archivo como un String. Alternativamente, puede usar PreloadFile() junto con DisplayPreload() para tener más control. Para obtener una estética más agradable al generar un reproductor de imágenes, use el objeto roImageWidget . El equivalente en JavaScript es la etiqueta <img> en HTML.
Creación de objetos: El reproductor de imágenes se muestra creando primero instancias de roRectangle y roImagePlayer y luego llamando a SetRectangle() usando la instancia de roRectangle como argumento.
rectangle = CreateObject("roRectangle", 0, 0, 1024, 768)
i = CreateObject("roImagePlayer")
i.SetRectangle(rectangle)ifImageControl
DisplayFile(image_filename As String) As Boolean
Muestra la imagen con el nombre de archivo especificado. La cadena image_filename debe apuntar a un archivo .png, .jpeg, o .bmp de 8 bits, 24 bits o 32 bits. Tenga en cuenta que los archivos de imagen .jpeg con perfiles de color CMYK no son compatibles.
DisplayFile(parameters As roAssociativeArray) As Boolean
Muestra una imagen usando un arreglo asociativo de parámetros de visualización:
- Nombre de archivo: El nombre del archivo de imagen
- Modo: El modo de imagen. Consulte la entrada de SetDefaultMode() a continuación para obtener más detalles.
- Transición: La configuración de transición de la imagen. Consulte la entrada de SetDefaultTransition() a continuación para obtener más detalles.
- AlgoritmoDeCifrado: El algoritmo de cifrado de archivos. Actualmente las opciones son "AesCtr" y "AesCtrHmac".
- ClaveDeCifrado: La clave para descifrar el archivo de imagen. Este es un arreglo de bytes que consta de 128 bits de clave, seguidos de 128 bits de IV.
Consulte la sección Descifrado de imágenes a continuación para obtener detalles sobre cómo mostrar imágenes cifradas.
El reproductor de imágenes ya no acepta claves de cifrado AES "{A|A}" (es decir, donde los 64 bits superiores e inferiores de la clave son idénticos).
PreloadFile(image_filename As String) As Boolean
Carga el archivo de imagen especificado en un búfer de memoria fuera de pantalla.
PreloadFile(parameters As roAssociativeArray) As Boolean
Carga un archivo de imagen en un búfer de memoria fuera de pantalla. Las propiedades de visualización de la imagen se determinan mediante un arreglo asociativo de parámetros:
- Nombre de archivo: El nombre del archivo de imagen
- Modo: Consulte la entrada de SetDefaultMode() a continuación para obtener más detalles.
- Transición: Consulte la entrada de SetDefaultTransition() a continuación para obtener más detalles.
DisplayPreload() As Boolean
Usa el búfer de memoria en pantalla para mostrar la imagen almacenada en el búfer de memoria fuera de pantalla usando PreloadFile(). Solo hay dos búferes de memoria: uno se muestra en pantalla y el otro se usa para precargar imágenes. PreloadFile() puede llamarse varias veces antes de que se llame a DisplayPreload() y continuará cargando en el mismo búfer fuera de pantalla. El método DisplayFile() llama a PreloadFile() seguido inmediatamente por DisplayPreload(), por lo que cualquier imagen precargada previamente se perderá. Si no hay ninguna imagen precargada, DisplayPreload() no tendrá efecto.
StopDisplay() As Boolean
Elimina una imagen de la pantalla.
DisplayFileEx(filename As String, mode As Integer, x As Integer, y As Integer) As Boolean
PreloadFileEx(filename As String, mode As Integer, x As Integer, y As Integer) As Boolean
SetDefaultMode(mode As Integer) As Boolean
Establece el modo de visualización de imagen predeterminado para DisplayFile() y PreloadFile(). Si no se llama a SetDefaultMode(), el modo predeterminado se establece en 0 (equivalente a que la imagen se centre sin escalado). Los modos de visualización compatibles se enumeran a continuación:
- 0 – Centrar imagen: No se aplica escalado. El recorte solo ocurre si la imagen es más grande que la ventana.
- 1 – Escalar para ajustar: La imagen se escala para que sea completamente visible, manteniendo su relación de aspecto.
- 2 – Escalar para rellenar y recortar: La imagen se escala para que rellene completamente la ventana, manteniendo su relación de aspecto.
- 3 – Escalar para rellenar: La imagen se estira para que rellene la ventana y la imagen completa sea visible. La relación de aspecto no se mantendrá si es diferente de la ventana.
SetDefaultTransition(transition As Integer) As Boolean
Establece la transición que se utilizará cuando se muestre la siguiente imagen. Las siguientes transiciones están disponibles:
- 0: Sin transición: blit inmediato
- 1-4: Barridos desde arriba, abajo, izquierda o derecha.
- 5-8: Explota desde el centro, la esquina superior izquierda, la esquina superior derecha, la esquina inferior izquierda o la esquina inferior derecha.
- 10-11: Utiliza un efecto de persiana veneciana vertical u horizontal.
- 12-13: Peina vertical u horizontalmente.
- 14: Se desvanece hasta el color de fondo y luego reaparece.
- 15: Realiza una transición gradual entre la imagen actual y la nueva imagen.
- 16-19: Se desliza desde arriba, abajo, izquierda o derecha.
- 20-23: Desliza toda la pantalla desde arriba, abajo, izquierda o derecha.
- 24-25: Escala la imagen antigua hacia dentro y luego la nueva hacia fuera nuevamente (esto funciona como una pseudorrotación alrededor de un eje vertical u horizontal).
- 26-29: Expande una nueva imagen en la pantalla desde la derecha, izquierda, abajo o arriba.
SetTransform(transform As String) As Boolean
Aplica una de ocho transformaciones a la imagen. Las llamadas a este método solo tienen efecto cuando se muestra el siguiente archivo. Tenga en cuenta que el rectángulo de la imagen en sí no cambia para adaptarse a la nueva relación de altura y anchura de una imagen transformada. Este método se puede llamar por separado en varias instancias de roImagePlayer o roImageWidget.
- identidad: Sin transformación (comportamiento predeterminado)
- rot90: Rotación de 90 grados en sentido horario
- rot180: Rotación de 180 grados
- rot270: Rotación de 270 grados en sentido horario
- espejo: Transformación de espejo horizontal
- mirror_rot90: Rotación reflejada de 90 grados en sentido horario
- mirror_rot180: Rotación reflejada de 180 grados en sentido horario
- espejo_rot270: Rotación reflejada de 270 grados en sentido horario
OverlayImage(image_filename As String, x As Integer, y As Integer) As Boolean
Compone la imagen con el nombre de archivo especificado sobre la imagen principal de DisplayFile() . Utilice los enteros x y y para especificar su ubicación dentro del widget de imagen.
SetRectangle(r As roRectangle) As Boolean
Cambia el tamaño y la posición del rectángulo de imagen utilizando el objeto roRectangle.
GetRectangle() As roRectangle
Devuelve un objeto roRectangle que tiene la misma ubicación y dimensiones que el objeto roRectangle utilizado para definir la ventana de imagen.
CreateTestHole(hole As roRectangle) As Boolean
Crea un agujero en la imagen con la ubicación y las dimensiones especificadas en la instancia de roRectangle pasada. Cualquier ventana de video ubicada directamente debajo de la imagen se mostrará a través de ella. Este método interrumpirá la reproducción de imágenes y solo debe usarse con fines de prueba.
SetTransitionDuration(duration As Integer) As Boolean
Establece la cantidad de tiempo que tarda (en milisegundos) en producirse un efecto de transición especificado. La duración predeterminada de la transición es de 1000 milisegundos.
DisplayBuffer(a As Object, b As Integer, c As Integer) As Boolean
Hide() As Boolean
Oculta la imagen que se muestra actualmente mediante el widget roImagePlayer.
Show() As Boolean
Muestra la imagen que se está mostrando actualmente mediante el widget roImagePlayer.
Raise() As Void
Envía el widget a la parte superior del orden z en el plano gráfico (es decir, delante de todas las demás superficies que implementan la interfaz ifWidget). De forma predeterminada, los widgets nuevos se colocan en la parte superior del orden z gráfico.
Algunas superficies siempre se dibujan en la parte superior del orden z gráfico, incluidos el cursor del mouse, los subtítulos ocultos y los marquesinas desplazablesmarquesinas desplazables.
Puede usar los métodos PauseGraphics()/ ResumeGraphics() en el objeto roVideoMode para garantizar que varios cambios en el orden z gráfico se produzcan simultáneamente.
Lower() As Void
Envía el widget a la parte inferior del orden z en el plano gráfico (es decir, detrás de todas las demás superficies que implementan la interfaz ifWidget). De forma predeterminada, los widgets nuevos se colocan en la parte superior del orden z gráfico.
X, Y
Los valores x e y indican qué posición de la imagen se debe centrar lo más cerca posible, o tanto x como y pueden establecerse en -1, lo que utiliza el centro de la imagen como el punto que se posicionará más cerca del centro.
Para mostrar imágenes en una zona, se debe llamar a SetRectangle() y EnableZoneSupport() debe incluirse en un script para usar la funcionalidad de zonas.
Prueba de modos de visualización
A continuación se muestran algunos comandos de shell de ejemplo que puede usar para probar los diferentes modos de visualización:
BrightSign> image filename.bmp 0
BrightSign> image filename.bmp 1
BrightSign> image filename.bmp 2
BrightSign> image filename.bmp 3
BrightSign> image filename.bmp 0 0 0
BrightSign> image filename.bmp 2 0 0Precarga de imágenes
El siguiente script de ejemplo utiliza imágenes precargadas para mejorar la velocidad de la interfaz de usuario cuando el usuario presiona una tecla en el teclado. Tan pronto como se presiona una tecla, la pantalla cambia a la nueva imagen, que ya se ha precargado. El único retraso posible ocurre si la tecla se presiona mientras la imagen se está precargando. En este caso, la imagen se mostrará tan pronto como se cargue.
i = CreateObject("roImagePlayer")
p = CreateObject("roMessagePort")
k = CreateObject("roKeyboard")
k.SetPort(p)
i.PreloadFile("one.bmp")
loop:
i.DisplayPreload
i.PreloadFile("two.bmp")
Wait(0,p)
i.DisplayPreload
i.PreloadFile("one.bmp")
Wait(0,p)
goto loopDescifrado de imágenes
Los objetos roImagePlayer, roImageWidget, roClockWidget, roTextWidget, y roCanvasWidget pueden usarse para mostrar imágenes cifradas. Cada objeto tiene un método de reproducción de imágenes que acepta una matriz asociativa, que puede incluir los parámetros de descifrado EncryptionAlgorithm y EncryptionKey.
Póngase en contacto con [email protected] para obtener más información sobre cómo generar una clave para ofuscación y almacenarla en el reproductor.
Puede llamar a roDeviceInfo.HasFeature("media_decryption") para determinar si un modelo de reproductor y una versión de firmware admiten el descifrado de imágenes.
Ejemplo:
print "Play ENCRYPTED image in an image widget"
imagePlayer = CreateObject("roImageWidget", r1)
aa=CreateObject("roAssociativeArray")
aa.filename = "sd:/images_enc.jpg"
aa.encryptionalgorithm = "AesCtr"
aa.encryptionkey = CreateObject("roByteArray")
aa.encryptionkey.fromhexstring("01030507090b0d0f00020406080a0c0e00000000000000000000000000000000")
imagePlayer.DisplayFile(aa)
sleep(10000)
imagePlayer.Hide()
print "Play ENCRYPTED image with PlayStaticImage"
videoPlayer = CreateObject("roVideoPlayer")
aa=CreateObject("roAssociativeArray")
aa.filename = "sd:/images_enc.jpg"
aa.encryptionalgorithm = "AesCtr"
aa.encryptionkey = CreateObject("roByteArray")
aa.encryptionkey.fromhexstring("01030507090b0d0f00020406080a0c0e00000000000000000000000000000000")
videoPlayer.PlayStaticImage(aa)
sleep(10000)
videoPlayer = invalid
print "Show CLOCK image"
resourceManager = CreateObject("roResourceManager", "sd:/resources.txt")
clockWidget = CreateObject("roClockWidget", r1, resourceManager, {})
aa=CreateObject("roAssociativeArray")
aa.filename = "sd:/images_enc.jpg"
aa.encryptionalgorithm = "AesCtr"
aa.encryptionkey = CreateObject("roByteArray")
aa.encryptionkey.fromhexstring("01030507090b0d0f00020406080a0c0e00000000000000000000000000000000")
clockWidget.SetBackgroundBitmap(aa, True)
clockWidget.Show()
sleep(10000)
clockWidget.Hide()
print "Text widget with encrypted background image"
twParams = CreateObject("roAssociativeArray")
twParams.LineCount = 1
twParams.TextMode = 1
twParams.Rotation = 0
twParams.Alignment = 1
tw=CreateObject("roTextWidget",r1,1,2,twParams)
tw.SetBackgroundColor(&h00ff0000)
tw.SetForegroundColor(&hff00ff00)
tw.PushString("Encrypted Background")
'tw.SetRectangle(r)
aa=CreateObject("roAssociativeArray")
aa.filename = "sd:/images_enc.jpg"
aa.encryptionalgorithm = "AesCtr"
aa.encryptionkey = CreateObject("roByteArray")
aa.encryptionkey.fromhexstring("01030507090b0d0f00020406080a0c0e00000000000000000000000000000000")
tw.SetBackgroundBitmap(aa, True)
tw.Show()
sleep(10000)
tw.Hide()
cw=CreateObject("roCanvasWidget", rect)
canvas_aa=CreateObject("roAssociativeArray")
canvas_aa.Filename = "sd:/images_enc.jpg"
canvas_aa.Encryptionalgorithm = "AesCtr"
canvas_aa.EncryptionKey = CreateObject("roByteArray")
canvas_aa.EncryptionKey.FromHexString("01030507090b0d0f00020406080a0c0e00000000000000000000000000000000")
cw.SetLayer(canvas_aa, 1)
cw.Show()