BPicture * FlattenPictureTest::SaveAndRestore(BPicture *picture) { BMallocIO *data = new BMallocIO(); AutoDelete<BMallocIO> _data(data); TEST_AND_RETURN(data == NULL, "BMallocIO could not be allocated for flattening the picture!" , NULL); picture->Flatten(data); data->Seek(0, SEEK_SET); BPicture *archivedPicture = new BPicture(); TEST_AND_RETURN(archivedPicture == NULL, "BPicture could not be allocated for unflattening the picture!" , NULL); archivedPicture->Unflatten(data); return archivedPicture; }
status_t PrintJobPage::NextPicture(BPicture& picture, BPoint& point, BRect& rect) { if (fPicture >= fNumberOfPictures) return B_ERROR; fPicture++; fJobFile.Seek(fNextPicture, SEEK_SET); fJobFile.Read(&point, sizeof(BPoint)); fJobFile.Read(&rect, sizeof(BRect)); status_t rc = picture.Unflatten(&fJobFile); fNextPicture = fJobFile.Position(); if (rc != B_OK) fPicture = fNumberOfPictures; return rc; }
void PictureView::AllAttached() { BeginPicture(new BPicture); DrawStuff(this); BPicture *picture = EndPicture(); if (picture == NULL) return; BMessage message; picture->Archive(&message); message.PrintToStream(); BMallocIO stream; status_t status = picture->Flatten(&stream); delete picture; if (status != B_OK) printf("Error flattening BPicture: %s\n", strerror(status)); if (status == B_OK) { stream.Seek(0, SEEK_SET); fPicture = new BPicture(); status = fPicture->Unflatten(&stream); if (status != B_OK) { printf("Error unflattening BPicture: %s\n", strerror(status)); return; } } BMessage message2; fPicture->Archive(&message2); message2.PrintToStream(); }