[R-SIG-Mac] add a bitmap graphic onto a plot

Denis Chabot chabotd at globetrotter.net
Sat Jun 7 14:29:31 CEST 2008


Thanks Simon, this works really well.

Thanks Ken also for the information on the pnm utilities, but at the  
moment I did not have time to figure out how to get and install them.  
The R function is more practical for me.

Denis
Le 08-06-05 à 10:15, Simon Urbanek a écrit :

>
> On Jun 5, 2008, at 7:36 AM, Denis Chabot wrote:
>
>> Hi,
>>
>> a bit frivolous, I know, but I thought of adding a small picture of  
>> each species of fish onto the upper right corner of plots dealing  
>> with metabolic rate of several species of fish.
>>
>> The only information I could find about doing this involved a  
>> package named pixmap. But from what I understand, I must first make  
>> the picture of each fish (diverse original formats, gif, jpeg, pdf)  
>> into a pnm format.
>>
>> How do I manage this on Mac OS X? I had never come across this  
>> format before.
>>
>
> IMHO the simplest solution is to save your image(s) into  
> uncompressed TIFFs (e.g. open the image in Preview and Save As.. ,  
> Format: TIFF , Compression: None). The you can use this simple  
> function to read TIFFs into pixmaps:
>
> read.tiff = function(con, ...) {
>    if (is.character(con)) {
>        con = file(con, "rb")
>        on.exit(close(con))
>    }
>  sig = readBin(con, 1L, 1, 2)
>  if (sig != 0x4949 && sig != 0x4d4d) stop("Invalid signature")
>  end = if (sig == 0x4949) "little" else "big"
>  if (readBin(con, 1L, 1, 2, endian=end) != 42) stop("Invalid  
> signature")
>  o = readBin(con, 1L, 1, 4, endian=end)
>  data = readBin(con, 1L, o - 8, 1, signed=FALSE, endian=end)
>  ifds = readBin(con, 1L, 1, 2, endian=end)
>  info = list()
>  for (i in 1:ifds) {
>    tag = readBin(con, 1L, 6, 2, endian=end)
>    if (tag[1] == 257) info$height = tag[5]
>    if (tag[1] == 256) info$width = tag[5]
>    if (tag[1] == 259 && tag[5] != 1) stop("compressed TIFFs are not  
> supported")
>  }
>  if (is.null(info$width)||is.null(info$height)) stop("missing width/ 
> height tags")
>  res = array(data/255, dim=c(3, info$width, info$height))
>  z = pixmapRGB(0, ncol = dim(res)[2], nrow = dim(res)[3], ...)
>  z at red = t(res[1, , ])
>  z at green = t(res[2, , ])
>  z at blue = t(res[3, , ])
>  z
> }
>
> Cheers,
> Simon
>
>
>> I have seen another way using grImport to import postscript vector  
>> graphics. Does anyone here know if this will also work if I  
>> transform my original pictures and drawings into postscript format  
>> (which obvisouly won't be vector based)?
>>
>> Thanks,
>>
>> Denis Chabot
>>
>> _______________________________________________
>> R-SIG-Mac mailing list
>> R-SIG-Mac at stat.math.ethz.ch
>> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
>>
>>
>



More information about the R-SIG-Mac mailing list