Re: Need help about how to bring image to clipboard?
- To: mathgroup at smc.vnet.net
- Subject: [mg16974] Re: Need help about how to bring image to clipboard?
- From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
- Date: Sat, 10 Apr 1999 02:13:22 -0400
- Organization: Universitaet Leipzig
- References: <7ehmf7$o3i@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hi Ruangyuth, what you ar doing is a bit long winded. You missuse the clipboard to get a bitmap repesentation of the PostScript image. But with DisplayString[] you can already create a bitmap from a graphics and to send the bitmap image via MathLink to your external program. You can look at the source code of my PNGBitmap package, it redefines Display[gr,"PNG"] so that a native png-bitmap can be saved. It calls DisplayString[graph,"PBM"] and send the string to the MathLink program. The PBM format is quit simple the header consist only of P6 width heigth bitdepth rrgrgbrgb... when your program has found the width and the height it can skip to the rgb data in the rest of the string. In your C-program read the string and convert it from unicode /* the result of DisplayString[] is get manual */ MLGetString(stdlink,(const char **) &uni_str); len=strlen(uni_str); end_str=uni_str+len; image_data=pbm=(char *)calloc(len,sizeof(char)); for(j=i=0,sp=uni_str; i<len; i++) { pbm[j++]= (char) MLNextCharacter((const char **)&sp,(const char *)end_str); if(!pbm) break; } MLDisownString(stdlink,uni_str); /* now we have C-string and we skip over the header */ while(*pbm!='\012') pbm++; /* skip over "P6\n" */ sscanf(++pbm,"%d %d\n",&width,&height); while(*pbm!='\012') pbm++; sscanf(++pbm,"%d",&bit_depth); true_bit_depth=bit_depth=8/*log((double)(bit_depth+1))/M_LN2*/; while(*pbm!='\012') pbm++; pbm++; /* ... write the png file */ Here pbm now points to the begin of the rgb-data and of the pixels. The Matheamtica code is simple Display[file_String,gr_,"PNG"]:= (PNGBitmap`RawWritePNGGraphics[file,1.0,DisplayString[gr,"PBM"]];gr) So no clipboard and no keys needed. Hope that helps Jens Ruangyuth Inorn wrote: > > Hello all > > My problem is I must do this series of job > - PLot[....] > - use mouse right click at the image to copy image to clipboard > - call my mathlink program to read DIB image from clipboard to process > - Plot[...] > - use mouse right click at the image to copy image to clipboard > - call my mathlink program to read DIB image from clipboard to process > . > . > . > . > > I must do it for many time and I want to write it to package for do > this routine job, > then I want to write this job to package but I didn't know how to bring > image to > clipboard without use mouse click, Is someone had any solution? and Is > Mathematica > had command to put image direct to clipboard? > > Best Regards > Ruangyuth Inorn.