从通讯簿中检索数据时出现异常

时间:2010-08-26 06:31:05

标签: objective-c cocoa macos

我在从地址簿中检索数据时遇到此异常。我通过互联网检查但没有得到任何帮助。

溢出分配位图后备存储。无法返回每行320字节,-2147483648高度和1个平面的位图

我正在使用AddressBook Framework从地址簿中检索数据。是这个记忆的问题,或者是由于我在地址簿联系中设置的头像信息。

请帮忙。如果有任何建议或建议,那么请给它...

2 个答案:

答案 0 :(得分:1)

感谢您的回复

正如您所说,我已经检查了绘制大图像或视图的所有代码。并找到了我用于调整图像大小的以下功能。现在调整图像大小将在服务器端完成。我对这个问题更加怀疑。您可以在下面的代码块中查看它。现在等待客户解决这个问题。

再次感谢您的帮助。

-(NSData *)getCompressedImageDataFromData:(NSData *)imData
{
    NSImage *pImage = [[[NSImage alloc] initWithData:imData] autorelease];
NSSize orgSize = [pImage size];
int widthInput, heightInput;
widthInput = orgSize.width;
heightInput = orgSize.height;
if(widthInput <= 72 && heightInput <= 72)
    return imData;
double newheight = heightInput;
NSSize   newSize;
if(widthInput >= 72)
{
    double ratio;
    ratio = widthInput / heightInput;
    newheight = 72 / ratio;
    newSize = NSMakeSize (72, newheight);
}
else
    newSize = NSMakeSize(widthInput, newheight);
NSImage *outputImage = [[[NSImage alloc] initWithSize:newSize] autorelease];

if(![outputImage isValid])
    return nil;

[outputImage lockFocus];

[[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh];


[pImage drawInRect:NSMakeRect(0, 0, newSize.width, newSize.height)
          fromRect:NSZeroRect operation:NSCompositeCopy fraction:1.0];

[outputImage unlockFocus];
NSData *imageData = [outputImage TIFFRepresentationUsingCompression:NSTIFFCompressionJPEG factor:0];

return [imageData mutableCopy];
}

-(NSData *)getCompressedImageDataFromData:(NSData *)imData { NSImage *pImage = [[[NSImage alloc] initWithData:imData] autorelease]; NSSize orgSize = [pImage size]; int widthInput, heightInput; widthInput = orgSize.width; heightInput = orgSize.height; if(widthInput <= 72 && heightInput <= 72) return imData; double newheight = heightInput; NSSize newSize; if(widthInput >= 72) { double ratio; ratio = widthInput / heightInput; newheight = 72 / ratio; newSize = NSMakeSize (72, newheight); } else newSize = NSMakeSize(widthInput, newheight); NSImage *outputImage = [[[NSImage alloc] initWithSize:newSize] autorelease]; if(![outputImage isValid]) return nil; [outputImage lockFocus]; [[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh]; [pImage drawInRect:NSMakeRect(0, 0, newSize.width, newSize.height) fromRect:NSZeroRect operation:NSCompositeCopy fraction:1.0]; [outputImage unlockFocus]; NSData *imageData = [outputImage TIFFRepresentationUsingCompression:NSTIFFCompressionJPEG factor:0]; return [imageData mutableCopy]; }

答案 1 :(得分:0)

您是在创建一个大型视图或图像,您要在地址簿中绘制多个联系人吗?听起来你正试图创建太大的图像/视图。