Дорогой мир стека. Я хотел бы задать вопрос о проблеме, с которой сталкиваюсь с небольшой программой, которую я пишу в R. Я написал код, который позволяет импортировать изображение и управлять им с помощью библиотеки EBImage()
. Я использую библиотеку gWidgets()
, чтобы пользователь мог выполнять динамические манипуляции. Код этого один:Показать и обрабатывать изображения с gwidgets
library("EBImage")
library("gWidgets2")
setwd(choose.dir())
imageinput<-file.choose()
image<-readImage(imageinput)
##defininig the color mode
colorimage<-c(Greymode="gray",RGBmode="rgb")
updateImage <-function (h,...) {
image1<-((svalue(brightness)+image*svalue(contrast))^(svalue(gamma)))
image2<-channel(image1,colorimage[svalue(colormode)])
display(image2)
}
colormode <- gradio(names(colorimage), horizontal=FALSE,handler=updateImage)
brightness<-gslider(from=-1,to=1,by=.1, value=0,handler=updateImage)
contrast <- gslider(from=0,to=10,by=.1, value=1,handler=updateImage)
gamma <- gslider(from=0,to=10,by=0.1, value=1,handler=updateImage)
window <- gwindow("Image Editing")
BigGroup <- ggroup(cont=window)
group <- ggroup(horizontal=FALSE, container=BigGroup)
tmp <- gframe("Colormode", container=group)
add(tmp, colormode)
tmp <- gframe("Brightness", container=group)
add(tmp, brightness, expand=TRUE)
tmp <- gframe("Contrast", container=group)
add(tmp, contrast, expand=TRUE)
tmp <- gframe("Gamma", container=group)
add(tmp, gamma, expand=TRUE)
Но я столкнулся с проблемой (как я писал в предыдущем вопросе, но я решил некоторые вопросы, и я подумал, что было бы хорошо, чтобы перепечатывать новый с лучшим кодом и многим проблемы решены). Проблема в том, что я не могу отобразить в графическом интерфейсе gWidgets, который я создал, и как он динамически редактируется. Хотя есть способ увидеть изображение с функцией display()
пакета EBImage, это не тот, который я хочу, потому что он отображается в веб-браузере, а не в графическом интерфейсе.
Я был бы признателен, если бы кто-нибудь знал, что я могу сделать, чтобы решить эту проблему.
Я не уверен, как сделать изображение текущим интерактивным устройством, но если вы можете, вы можете использовать 'ggraphics' с' cairoDevice'. В качестве альтернативы вы можете использовать 'writeImage' для записи в файл изображения и отображения его через' gimage'. Это обычно достаточно отзывчивое, хотя, возможно, и не с большими изображениями. – jverzani
Я использовал gimage, но проблема, как вы сказали, но проблема заключалась в том, что изображение не обновлялось, когда произошли изменения. ggraphics и cairoDevice Я никогда не использовал их раньше. @jverzani Г-н Верзани - это тот, кто связан с написанием gWidgets? – Tony