Hi all,

I keep on getting weird malloc errors with the following code, first from
ATSFontManager, and then:

FooProgram(1343,0xa01e1720) malloc: *** mmap(size=30855168) failed (error
code=12)

*** error: can't allocate region

*** set a breakpoint in malloc_error_break to debug

2009-09-07 19:37:17.606 KindPDF[1343:10b] *** NSCopyMemoryPages(0xfc18a000,
0x0, 30851072) failed


It seems to me that somewhere I have a memory leak, but I just cannot figure
out where.

What the function does is to take in a PDFPage and crop according to some
cropRect and scale down to

render the page on some surface with arbitrary geometry.

The program fails after processed for around 400 images with a device size
of 786x1144 and RENDER_SCALE_FACTOR

of 2. MAX_POINTS of 300 (This constant is to make the cropRect units
percetages)


Hope someone could help me.... this program has been making me mad for
around a week... Thanks.




-(NSImage *) generatePage:(PDFPage *) page withCropRect:(CropRect) cropRect
onDevice:(NSSize) deviceSize

{

NSRect originalPageMediaBox = [page boundsForBox:kPDFDisplayBoxMediaBox];

 NSRect croppedPageMediaBox = NSMakeRect((float)originalPageMediaBox.size.
width * (float)cropRect.left / MAX_POINTS,

(float)originalPageMediaBox.size.height * (float)cropRect.bottom /
MAX_POINTS,

originalPageMediaBox.size.width * (1.0 - (float)cropRect.horiCropped /
MAX_POINTS),

originalPageMediaBox.size.height * (1.0 - (float)cropRect.vertCropped /
MAX_POINTS));


 float croppedPDFAspectRatio = croppedPageMediaBox.size.height /
croppedPageMediaBox.size.width;

 float deviceAspectRatio = deviceSize.height / deviceSize.width;

float width, height;

if (croppedPDFAspectRatio > deviceAspectRatio)

{

height = deviceSize.height;

width = height / croppedPDFAspectRatio;

} else

{

width = deviceSize.width;

height = width * croppedPDFAspectRatio;

}

 width = width * RENDER_SCALE_FACTOR;

height = height * RENDER_SCALE_FACTOR;

 //

// Crop the PDF Page

//

 NSPDFImageRep *pdfImg = [NSPDFImageRep imageRepWithData:[page
dataRepresentation]];

NSSize pageSize = NSMakeSize(width / (1.0 - cropRect.horiCropped /
MAX_POINTS), height / 1.0 - cropRect.vertCropped / MAX_POINTS);

NSImage *pdfPage = [[NSImage alloc] initWithSize:pageSize];

[pdfPage lockFocus];

[pdfImg drawInRect:[pdfPage rect]];

[pdfPage unlockFocus];


 NSBitmapImageRep *pdfPageRep = [NSBitmapImageRep imageRepWithData:[pdfPage
TIFFRepresentation]];

 NSImage *rasterizedPage = [[NSImage alloc] initWithSize:NSMakeSize(width,
height)];

 [rasterizedPage lockFocus];

[[NSColor whiteColor] setFill];

NSRectFill(NSMakeRect(0, 0, width, height));

[pdfPageRep drawAtPoint:NSMakePoint(-1 * width * cropRect.left / MAX_POINTS,
-1 * height * cropRect.bottom / MAX_POINTS)];

[rasterizedPage unlockFocus];

 [pdfPage release];

 //

// Scale down to original size

//

NSImage *surface = [[[NSImage alloc] initWithSize:NSMakeSize(width /
RENDER_SCALE_FACTOR, height / RENDER_SCALE_FACTOR)] autorelease];


 [surface lockFocus];

[rasterizedPage drawInRect:[surface rect] fromRect:[rasterizedPage rect]
operation:NSCompositeCopy fraction:1];

[surface unlockFocus];

 [rasterizedPage release];

 return surface;

}
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to