GP<GBitmap> JB2Image::get_bitmap(int subsample, int align) const { if (width==0 || height==0) G_THROW( ERR_MSG("JB2Image.cant_create") ); int swidth = (width + subsample - 1) / subsample; int sheight = (height + subsample - 1) / subsample; int border = ((swidth + align - 1) & ~(align - 1)) - swidth; GP<GBitmap> bm = GBitmap::create(sheight, swidth, border); bm->set_grays(1+subsample*subsample); for (int blitno = 0; blitno < get_blit_count(); blitno++) { const JB2Blit *pblit = get_blit(blitno); const JB2Shape &pshape = get_shape(pblit->shapeno); if (pshape.bits) bm->blit(pshape.bits, pblit->left, pblit->bottom, subsample); } return bm; }
GP<GBitmap> JB2Image::get_bitmap(const GRect &rect, int subsample, int align, int dispy) const { if (width==0 || height==0) G_THROW( ERR_MSG("JB2Image.cant_create") ); int rxmin = rect.xmin * subsample; int rymin = rect.ymin * subsample; int swidth = rect.width(); int sheight = rect.height(); int border = ((swidth + align - 1) & ~(align - 1)) - swidth; GP<GBitmap> bm = GBitmap::create(sheight, swidth, border); bm->set_grays(1+subsample*subsample); for (int blitno = 0; blitno < get_blit_count(); blitno++) { const JB2Blit *pblit = get_blit(blitno); const JB2Shape &pshape = get_shape(pblit->shapeno); if (pshape.bits) bm->blit(pshape.bits, pblit->left-rxmin, pblit->bottom-rymin+dispy, subsample); } return bm; }