2011-09-05 22 views
9

¿Cómo puedo obtener la resolución de la pantalla (alto, ancho) en píxeles?¿Cómo puedo obtener la resolución de la pantalla en R

+2

¿Qué pantalla? Tengo dos. –

+1

La pregunta más útil es por qué; ¿Están involucradas cosas como tk u otra GUI? – mbq

+0

@mbq gvisMotionChart necesita un ancho y alto del gráfico que produce. Así que pensé que podría cambiar esos parámetros de acuerdo con la resolución de pantalla del usuario. –

Respuesta

10

Usted puede utilizar el interfaz commad línea a WMI

> system("wmic desktopmonitor get screenheight") 
ScreenHeight 
900 

Se podría capturar resultado con system

(scr_width <- system("wmic desktopmonitor get screenwidth", intern=TRUE)) 
# [1] "ScreenWidth \r" "1440   \r" "\r" 
(scr_height <- system("wmic desktopmonitor get screenheight", intern=TRUE)) 
# [1] "ScreenHeight \r" "900   \r" "\r" 

con múltiples pantallas, la salida es, por ejemplo,

[1] "ScreenWidth \r" "1600   \r" "1600   \r" "" 

Queremos que todos, pero los valores primero y último, convierten en números

as.numeric(c(
    scr_width[-c(1, length(scr_width))], 
    scr_height[-c(1, length(scr_height))] 
)) 
# [1] 1440 900 
+0

Error en el sistema ("wmic desktopmonitor get screenwidth", interno = TRUE): "wmic" no encontrado. ¿Debo instalar algo? –

+0

@ gd047 wmic está disponible en Windows Professional Edition (XP/7) con seguridad. Sé que falta en XP Home, pero no sé si podría estar instalado. – Marek

+0

¡No estaba en el camino! –

1

En Windows puede llamar al GetSystemMetrics pasando SM_CXSCREEN y SM_CYSCREEN. Esto devuelve el ancho/alto de la pantalla del monitor de visualización principal, en píxeles.

DWORD dwWidth = GetSystemMetrics(SM_CXSCREEN); 
DWORD dwHeight = GetSystemMetrics(SM_CYSCREEN); 
+1

Creo que el póster está buscando hacer esto desde el lenguaje R en lugar de C++. –

+1

@David Hefferman sí, sí, lo siento, de todos modos encontré este [enlace] (http://www.nceas.ucsb.edu/scicomp/usecases/CreateRPackageWithC) tal vez ayuda – Arash

4

Es fácil con JavaScript: usted acaba de hacer

window.screen.height 
window.screen.width 

Usted puede llamar a JavaScript de R utilizando el paquete de SpiderMonkeyOmegaHat.


Usted también podría solve this with Java, y utilizar el paquete rJava para acceder a ella.

library(rJava) 
.jinit() 
toolkit <- J("java.awt.Toolkit") 
default_toolkit <- .jrcall(toolkit, "getDefaultToolkit") 
dim <- .jrcall(default_toolkit, "getScreenSize") 
height <- .jcall(dim, "D", "getHeight") 
width <- .jcall(dim, "D", "getWidth") 
+0

No he probado esto yo mismo como soy luchando para obtener el paquete para construir. Informaré una vez que administre esto. –

+2

¿Qué pasa con el voto a favor? Sé que las ideas están a la mitad, pero son posibilidades válidas. –

+1

¡Me parece que esto debería ser posible sin la necesidad de una JVM! Personalmente, me gustaría terminar algunas llamadas a la API de Win32, pero seguramente en algún lugar hay un paquete que le permite consultar información de hardware. –

1

respuesta aceptada no funciona en Windows 8 y versiones posteriores.

Utilice esta:

system("wmic path Win32_VideoController get VideoModeDescription,CurrentVerticalResolution,CurrentHorizontalResolution /format:value")

para conseguir que la resolución en pantalla de un vector, se puede implementar como:

suppressWarnings(
    current_resolution <- system("wmic path Win32_VideoController get CurrentHorizontalResolution,CurrentVerticalResolution /format:value", intern = TRUE) %>% 
     strsplit("=") %>% 
     unlist() %>% 
     as.double() 
) 
    current_resolution <- current_resolution[!is.na(current_resolution)] 

Ahora vamos a tener un vector con una longitud de 2:

> current_resolution 
[1] 1920 1080 
Cuestiones relacionadas