Imagemagick wikk read, convert and write images in a 100 formas with interface with same programming language. Anybody know if exist an harbour wrapper for http://www.imagemagick.org/script/index.php
Resolved with follow copy function ..Here all seem work fine <http://www.imagemagick.org/script/index.php> Log_Handle := fopen(x_prnfile,0) cStr=space(1000) x_letti := Fread(Log_Handle,@cStr,1000) if left(cStr,2)=CHR(27)+"E" cstr=substr(cstr,3,998) endif x_fileprint=x_fileprint + cstr x_letti=1000 do while x_letti=1000 cStr=space(1000) x_letti := Fread(Log_Handle,@cStr,1000) if x_letti<>1000 // ALTD() if substr(cStr,x_letti-1,2)=CHR(27)+"E" cstr=substr(cstr,1,x_letti-2) endif endif x_fileprint=x_fileprint + cstr ENDDO fclose(log_handle) 2010/3/8 Massimo Belgrano <[email protected]> > I try resolve with imagemagik using command line convert (via shell) > convert "G:\myimage.bmp" -rotate 180 -resize 400x250 -density 300x300 > "c:\aa.pcl" > ? ?? chr(K_ESC) ...... > x_prnfile="g:\clip52\lavori\massimo\arca\AA.pcl" > TYPE &X_PRNFILE to print > The image break during printing and page eject > may be that type is not able find end of file (26) > > > > 2010/3/1 Massimo Belgrano <[email protected]>: > > I need the capability print a bmp inside a harbour application > > who print plc . is a old clipper application > > > > I Have found a routine who Print .PCX To Laserjet, but need BMP > > > > > > I search a conversion BMP2PCX or printing BMP in pcl > > (I need also rotate image) > > > > > > http://www.karland.com/code/clipper/ > > function LoadPCX(cFile) > > > > > //---------------------------------------------------------------------------- > > // AUTHOR: Denis A. Sarrazin (Tue 10-11-1994) > > // PURPOSE: to load the PCX into a special array > > // PARAMETERS: cFile <-- the name of the PCX file to load > > // RETURNS: array (see list of #define in MINIPCX.CH and format > below) > > // NOTES: Format of a .PCX header shown below: > > // > > // Byte Item Size Description/Comments > > // ---- --------------- ---- > > ----------------------------------------- > > // 0 Manufacturer 1 Constant Flag 10 = ZSoft .PCX > > // 1 Version 1 Version information: > > // 0 = Version 2.5 > > // 2 = Version 2.8 w/palette > information > > // 3 = Version 2.8 w/o palette > > information > > // 5 = Version 3.0 > > // 2 Encoding 1 1 = .PCX run length encoding > > // 3 Bits per pixel 1 Number of bits/pixel per plane > > // 4 Window 8 Picture Dimensions > > // (Xmin, Ymin) - (Xmax - Ymax) > > // in pixels, inclusive > > // 12 HRes 2 Horizontal Resolution of creating > device > > // 14 VRes 2 Vertical Resolution of creating > device > > // 16 Colormap 48 Color palette setting, see text > > // 64 Reserved 1 > > // 65 NPlanes 1 Number of color planes > > // 66 Bytes per Line 2 Number of bytes per scan line per > > // color plane (always even for > > .PCX files) > > // 68 Palette Info 2 How to interpret palette - 1 = > color/BW, > > // 2 = > grayscale > > // 70 Filler 58 blank to fill out 128 byte header > > // > > // IMPORTANT: > > // All sizes are measured in BYTES. > > // All variables of size 2 are integers. > > // > > > //---------------------------------------------------------------------------- > > local aPCX > > local cBuffer > > local hPCX > > local nRead > > local nFileLength > > > > if !file(cFile) > > > > aPCX := {} > > > > else > > > > aPCX := array(PCX_LENGTH) > > hPCX := fopen(cFile) > > nFileLength := FLEN(hPCX) > > > > cBuffer := space(HEADER_SIZE) > > nRead := fread(hPCX,@cBuffer,HEADER_SIZE) // load PCX > header > > > > aPCX[ PCX_MANUFACTURER ] := asc(substr(cBuffer,1,1)) > > aPCX[ PCX_VERSION ] := asc(substr(cBuffer,2,1)) > > aPCX[ PCX_ENCODING ] := asc(substr(cBuffer,3,1)) > > aPCX[ PCX_BITS_PER_PIXEL ] := asc(substr(cBuffer,4,1)) > > aPCX[ PCX_WINDOW ] := {bin2i(substr(cBuffer,5,2)),; > > bin2i(substr(cBuffer,7,2)),; > > bin2i(substr(cBuffer,9,2)),; > > bin2i(substr(cBuffer,11,2))} > > aPCX[ PCX_HRES ] := bin2i(substr(cBuffer,13,2)) > > aPCX[ PCX_VRES ] := bin2i(substr(cBuffer,15,2)) > > aPCX[ PCX_COLORMAP ] := substr(cbuffer,17,48) > > aPCX[ PCX_RESERVED ] := asc(substr(cBuffer,65,1)) > > aPCX[ PCX_NPLANES ] := asc(substr(cBuffer,66,1)) > > aPCX[ PCX_BYTES_PER_LINE ] := bin2i(substr(cBuffer,67,2)) > > aPCX[ PCX_PALETTE_INFO ] := bin2i(substr(cBuffer,69,2)) > > aPCX[ PCX_FILLER ] := substr(cBuffer,71,58) > > > > cBuffer := space(nFileLength - HEADER_SIZE) > > nRead := fread(hPCX,@cBuffer,nFileLength - HEADER_SIZE) > > if (nRead != (nFileLength - HEADER_SIZE)) > > messaggio("Attenzione File TROPPO GRANDE","T") > > endif > > > > aPCX[ PCX_PIXELS ] := cBuffer > > > > fclose(hPCX) > > > > endif > > > > return (aPCX) > > > > > > > > procedure PrintPCX(nRow,nCol,aPCX) > > > //---------------------------------------------------------------------------- > > // AUTHOR: Denis A. Sarrazin (Tue 10-11-1994) > > // PURPOSE: > > // PARAMETERS: > > // RETURNS: > > // EXAMPLES: > > > //---------------------------------------------------------------------------- > > local nNumCol := aPCX[PCX_WINDOW,3] - aPCX[PCX_WINDOW,1]+1 > > local nTotalBytes := aPCX[PCX_NPLANES] * aPCX[PCX_BYTES_PER_LINE] > > local nStartCol > > local cRasterData := "" > > local nCount > > local nNumBytes > > local cByte > > local nBytePos > > local nPixel > > local nDiff > > nRow := int(nRow * 300) > > nCol := int(nCol * 300) > > nStartCol := nCol > > // X_graph="" > > if SetPrinter() // set the proper codes depending on type of printer > > // PrnGrSet( nRow, nCol ) // cGrSet ; PrnGrMove( <r>, <c> )C > > // X_graph=X_graph+CHR(K_ESC)+"*t300R" + ; // raster > > graphics at 300 dpi > > // CHR(K_ESC)+"*r1A" +; // start graphics at current > position > > // CHR(K_ESC)+"*p"+Cnum(nRow)+"Y"+; > > // CHR(K_ESC)+"*p"+Cnum(nStartCol)+"X" > > ?? chr(K_ESC)+"*t300R" // raster graphics at 300 dpi > > ? chr(K_ESC)+"*p"+cNUM(nRow)+"Y" > > ?? chr(K_ESC)+"*p"+cNUM(nCol)+"X" > > ?? chr(K_ESC)+"*r1A" // start graphics at current > position > > > > ? chr(K_ESC)+"*p"+cNUM(nRow)+"Y" > > ?? > > ?? chr(K_ESC)+"*p"+cNUM(nCol)+"X" > > ?? > > nBytePos := 1 > > nNumBytes := 1 > > while (nBytePos < len(aPCX[PCX_PIXELS])) > > cByte := BYTE2BIN(subst(aPCX[PCX_PIXELS],nBytePos,1)) > > if (left(cByte,2) == "11") > > nCount := BIN2NUM("00"+substr(cByte,3)) > > nBytePos ++ > > cByte := BYTE2BIN(subst(aPCX[PCX_PIXELS],nBytePos,1)) > > else > > nCount := 1 > > endif > > while (nCount > 0) > > // display all bits in byte (or parts thereof) > > if ((nCol+8) > (nNumCol+nStartCol - 1)) // chop > > off the excess > > nDiff := (nCol+8) - (nNumCol+nStartCol - 1) - 1 > > cByte := padr(left(cByte,8 - nDiff),8,"1") // clear any > at end > > endif > > cRasterData += chr(XOR(BIN2NUM(cByte),255)) // invert > > '1's and '0's > > nCol += 8 > > if (nNumBytes >= nTotalBytes) > > // > X_graph=X_graph+CHR(K_ESC)+"*p"+cNUM(nRow)+"Y"+; > > // > +CHR(K_ESC)+"*p"+cNUM(nStartCol)+"X"+; > > // > > +CHR(K_ESC)+"*b"+cNUM(LEN(cRasterData))+"W"+cRasterData > > ? chr(K_ESC)+"*p"+cNUM(nRow)+"Y" > > ?? > > ?? chr(K_ESC)+"*p"+cNUM(nStartCol)+"X" > > ?? > > ?? chr(K_ESC)+"*b"+cNUM(len(cRasterData))+"W"+cRasterData > > ?? > > // PrnGrMove( nRow, nStartCol ) > > // PrnGrLine( cRasterData ) > > cRasterData := "" > > nNumBytes := 0 > > nCol := nStartCol > > nRow ++ > > endif > > nNumBytes ++ > > nCount -- > > end > > nBytePos ++ > > end > > ? chr(K_ESC)+"*rB"+; // end raster graphics > > chr(K_ESC)+"&a0R"+; // move to text row 1 > > chr(K_ESC)+"&a0C" // move to text column 1 > > endif > > > > return > > > > > > > > -- > > Massimo Belgrano > > > > > > -- > Massimo Belgrano > -- Massimo Belgrano
_______________________________________________ Harbour mailing list (attachment size limit: 40KB) [email protected] http://lists.harbour-project.org/mailman/listinfo/harbour
