2011-09-05 20 views
9

Jak mogę uzyskać rozdzielczość ekranu (wysokość, szerokość) w pikselach?Jak mogę uzyskać rozdzielczość ekranu w R

+2

Jaki ekran? Mam dwa. –

+1

Bardziej użytecznym pytaniem jest: dlaczego; czy jest coś takiego jak tk lub inny GUI? – mbq

+0

@mbq gvisMotionChart potrzebuje szerokości i wysokości wykresu, który generuje. Pomyślałem więc, że mogę zmienić te parametry zgodnie z rozdzielczością ekranu użytkownika. –

Odpowiedz

10

Można użyć interfejsu commad lini WMI

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

mógł uchwycić wynikać z 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" 

z wieloma ekranami, wyjście jest np

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

Chcemy wszystko ale pierwsze i ostatnie wartości, konwertowane na liczby

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

Błąd w systemie ("Wmic monitor pulpitu dostaje przepustowość", intern = TRUE): nie znaleziono "wmic". Czy muszę coś zainstalować? –

+0

@ gd047 wmic jest na pewno dostępny na Windows Professional Edition (XP/7). Wiem, że go brakuje w XP Home, ale nie wiem, czy można go zainstalować. – Marek

+0

To nie było na drodze! –

1

W systemie Windows można zadzwonić pod numer GetSystemMetrics, mijając SM_CXSCREEN i SM_CYSCREEN. Zwraca szerokość/wysokość ekranu głównego monitora monitora w pikselach.

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

Uważam, że plakat chce zrobić to z języka R zamiast C++. –

+1

@David Hefferman tak, prawda, przepraszam, w każdym razie znalazłem to [link] (http://www.nceas.ucsb.edu/scicomp/usecases/CreateRPackageWithC) może pomóc – Arash

4

Łatwo z JavaScript: wystarczy zrobić

window.screen.height 
window.screen.width 

można wywołać JavaScript z badań przy użyciu pakietu SpiderMonkey z OmegaHat.


Można też solve this with Java i skorzystać z pakietu rJava do niego dostęp.

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

Nie przetestowałem tego tak jak ja walcząc o zbudowanie pakietu. Przekażę raport, gdy już to zrobię. –

+2

Co jest ze sprawą? Wiem, że pomysły są tylko w połowie kompletne, ale są to jednak ważne możliwości. –

+1

Wydaje mi się, że powinno to być możliwe do osiągnięcia bez JVM! Osobiście po prostu zamknęłabym niektóre wywołania interfejsu Win32 API, ale z pewnością gdzieś jest pakiet, który pozwala na zapytanie o informacje o sprzęcie. –

1

Akceptowane odpowiedź nie działa na Windows 8 i późniejszych.

Użyj tego:

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

Aby dostać się rozdzielczość ekranu w wektorze, można wdrożyć go jako:

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)] 

Teraz musisz wektor o długości 2:

> current_resolution 
[1] 1920 1080