1#ifndef _RASTERIZER_H
2#define _RASTERIZER_H
3
4
5#include <Bitmap.h>
6
7#include "Halftone.h"
8#include "ValidRect.h"
9
10
11class Rasterizer {
12public:
13						Rasterizer(Halftone* halftone);
14	virtual				~Rasterizer();
15
16	/**
17	 *  Sets the bitmap to be rasterized
18	 *  Either the iterator methods HasNextLine() and RasterizeNextLine()
19	 *  can be used to rasterize the bitmap line per line or the method
20	 *	RasterizeBitamp()
21	 *  can be used to rasterize the entire bitmap at once.
22	 *  @param x the x position of the image on the page.
23	 *  @param y the y position of the image on the page.
24	 *  @param bitmap the bitamp to be rasterized.
25	 *  @param height the page height.
26	 *  @return true if the bitmap is not empty and false if the bitmap is
27	 *		empty.
28	 */
29			bool		SetBitmap(int x, int y, BBitmap* bitmap,
30							int pageHeight);
31
32	// Is there a next line?
33			bool		HasNextLine();
34	// Rasterizes the next line and returns the line.
35			const void*	RasterizeNextLine();
36
37	// Iterates over all lines.
38			void		RasterizeBitmap();
39
40	// Returns the Halftone object specified in the constructor
41			Halftone*	GetHalftone()
42						{
43							return fHalftone;
44						}
45	// The bounds of the bitmap to be rasterized
46			RECT		GetBounds()
47						{
48							return fBounds;
49						}
50	// The width (in pixels) of the bounds passed to Rasterized()
51			int			GetWidth()
52						{
53							return fWidth;
54						}
55	// The height (in pixels) of the bounds passed to Rasterize()
56			int			GetHeight()
57						{
58							return fHeight;
59						}
60	// Returns the current x position
61			int			GetX()
62						{
63							return fX;
64						}
65	// Returns the current y position
66			int			GetY()
67						{
68							return fY;
69						}
70
71	// The method is called for each line in the bitmap.
72	virtual	const void*	RasterizeLine(int x, int y,
73							const ColorRGB32Little* source) = 0;
74
75	// Returns the number of bytes to store widthInPixels pixels with
76	// BPP = bitsPerPixel and padBytes number of pad bytes.
77	static	int			RowBufferSize(int widthInPixels, int bitsPerPixel,
78							int padBytes = 1)
79						{
80							int sizeInBytes = (widthInPixels * bitsPerPixel + 7)
81								/ 8;
82							return padBytes * ((sizeInBytes + padBytes - 1)
83								/ padBytes);
84						}
85
86private:
87			Halftone*	fHalftone;
88
89			RECT		fBounds;
90			int			fWidth;
91			int			fHeight;
92			int			fX;
93			int			fY;
94
95			const uchar* fBits;
96			int			fBPR;
97			int			fIndex;
98};
99
100#endif // _RASTERIZER_H
101