On Mon, 21 May 2007, John Fox wrote: > Dear Deepayan, > > I actually thought of the equivalent of this approach, but it doesn't do > quite what I want. > > In retrospect, I didn't specify the problem clearly: What I want to be able > to do is to place text on a background of arbitrary (but known RGB) colour > so that the text is legible. I guess that this is better described as a > "contrasting" than a "complementary" colour.
John, There may be no unique solution. (For gray, for example.) I am not sure (in terms of color theory) that maximizing in rgb space really is the right thing to do, but perhaps this will help you: > cval <- function(x,y) -sum((x-y)^2) > contrasting <- function(x) > optim(runif(3,0,255),cval,lower=0,upper=255,method="L-BFGS-B",y=x)$par > do.call(rgb,as.list(contrasting(col2rgb("gray"))/255)) [1] "#000000" > do.call(rgb,as.list(contrasting(col2rgb("gray"))/255)) [1] "#0000FF" > do.call(rgb,as.list(contrasting(col2rgb("pink"))/255)) [1] "#00FF00" Regards, Chuck > > > Your solution, for example breaks down for grays: > >> mycol <- "#888888" >> do.call(rgb, as.list(1 - col2rgb(mycol) / 255)) > [1] "#777777" > > Thank you for the suggestion. > > John > > -------------------------------- > John Fox, Professor > Department of Sociology > McMaster University > Hamilton, Ontario > Canada L8S 4M4 > 905-525-9140x23604 > http://socserv.mcmaster.ca/jfox > -------------------------------- > >> -----Original Message----- >> From: [EMAIL PROTECTED] >> [mailto:[EMAIL PROTECTED] On Behalf Of Deepayan Sarkar >> Sent: Monday, May 21, 2007 6:45 PM >> To: John Fox >> Cc: r-help@stat.math.ethz.ch >> Subject: Re: [R] Selecting complementary colours >> >> On 5/21/07, John Fox <[EMAIL PROTECTED]> wrote: >>> Dear r-helpers, >>> >>> I wonder whether, given the "#rrggbb" representation of a colour, >>> there is a simple way to select the complementary colour, >> also expressed as a "#rrggbb" >>> string. >>> >>> Any suggestions would be appreciated. >> >> You want rgb2col. The following should work for any standard color >> specification: >> >>> mycol = "royalblue" >>> do.call(rgb, as.list(1 - col2rgb(mycol) / 255)) >> [1] "#BE961E" >> >> -Deepayan >> >> ______________________________________________ >> R-help@stat.math.ethz.ch mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide >> http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> > > ______________________________________________ > R-help@stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > Charles C. Berry (858) 534-2098 Dept of Family/Preventive Medicine E mailto:[EMAIL PROTECTED] UC San Diego http://biostat.ucsd.edu/~cberry/ La Jolla, San Diego 92093-0901 ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.