1 #include "Rasterizer.h" 2 3 #include <stdio.h> 4 5 6 Rasterizer::Rasterizer(Halftone* halftone) 7 : 8 fHalftone(halftone), 9 fIndex(-1) 10 { 11 fBounds.bottom = -2; 12 } 13 14 15 Rasterizer::~Rasterizer() 16 { 17 } 18 19 20 bool 21 Rasterizer::SetBitmap(int x, int y, BBitmap* bitmap, int pageHeight) 22 { 23 fX = x; 24 fY = y; 25 26 BRect bounds = bitmap->Bounds(); 27 28 fBounds.left = (int)bounds.left; 29 fBounds.top = (int)bounds.top; 30 fBounds.right = (int)bounds.right; 31 fBounds.bottom = (int)bounds.bottom; 32 33 int height = fBounds.bottom - fBounds.top + 1; 34 35 if (y + height > pageHeight) { 36 height = pageHeight - y; 37 fBounds.bottom = fBounds.top + height - 1; 38 } 39 40 if (!get_valid_rect(bitmap, &fBounds)) 41 return false; 42 43 fWidth = fBounds.right - fBounds.left + 1; 44 fHeight = fBounds.bottom - fBounds.top + 1; 45 46 fBPR = bitmap->BytesPerRow(); 47 fBits = (uchar*)bitmap->Bits(); 48 // offset to top, left point of rect 49 fBits += fBounds.top * fBPR + fBounds.left * 4; 50 51 // XXX why not fX += ...? 52 fX = fBounds.left; 53 fY += fBounds.top; 54 fIndex = fBounds.top; 55 return true; 56 } 57 58 59 bool 60 Rasterizer::HasNextLine() 61 { 62 return fIndex <= fBounds.bottom; 63 } 64 65 66 const void* 67 Rasterizer::RasterizeNextLine() 68 { 69 if (!HasNextLine()) 70 return NULL; 71 72 const void* result; 73 result = RasterizeLine(fX, fY, (const ColorRGB32Little*)fBits); 74 fBits += fBPR; 75 fY ++; 76 fIndex ++; 77 return result; 78 } 79 80 81 void 82 Rasterizer::RasterizeBitmap() 83 { 84 while (HasNextLine()) 85 RasterizeNextLine(); 86 } 87