[Harbour] Re: How can i Print BMP?
Massimo Belgrano
mbelgrano at deltain.it
Mon Mar 29 06:13:22 EDT 2010
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, at 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, at 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 <mbelgrano at deltain.it>
> 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 <mbelgrano at deltain.it>:
> > 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, at 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, at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.harbour-project.org/pipermail/harbour/attachments/20100329/6d0198ed/attachment-0001.html
More information about the Harbour
mailing list