jestem w obliczu katastrofy z następującym błędem:crash CGDataProviderCreateWithCopyOfData: vm_copy failed: Status 1
"CGDataProviderCreateWithCopyOfData: vm_copy failed: status 1."
Mam wiele pytań, a może pomóc.
Co oznacza status 1 w vm_copy?
Ta awaria ma miejsce tylko wtedy, gdy ustawiam punkt przerwania wewnętrznej pętli danych. A następnie wznów i usuń punkt przerwania. Jeśli nie ma punktu przerwania, funkcja jest wykonywana, ale pojawia się pusty obraz. Jak mogę się upewnić, że nawet jeśli nie ustawię punktu przerwania, takie awarie zostaną przechwycone, a aplikacja przestanie wykonywać?
Ten błąd pojawia się, gdy wykonuję CGBitmapContextCreateImage. Czy ktoś wie, jak rozwiązać ten problem?
-(UIImage *) convertBitmapRGBA8ToUIImage:(UInt8**)img
:(int) width
:(int) height
{
CGImageRef inImage = m_inFace.img.CGImage;
UInt8*piData = calloc(width*height*4,sizeof(UInt8));
int iStep,jStep;
for (int i = 0; i < height; i++)
{
iStep = i*width*4;
for (int j = 0; j < width; j++)
{
jStep = j*4;
piData[iStep+jStep] =img[i][j];
piData[iStep+jStep+1] =img[i][j];
piData[iStep+jStep+2] = img[i][j];
}
}
CGContextRef ctx = CGBitmapContextCreate(piData,
CGImageGetWidth(inImage),
CGImageGetHeight(inImage),
CGImageGetBitsPerComponent(inImage),
CGImageGetBytesPerRow(inImage),
CGImageGetColorSpace(inImage),
CGImageGetBitmapInfo(inImage)
);
CGImageRef imageRef = CGBitmapContextCreateImage(ctx);
UIImage *finalImage = [UIImage imageWithCGImage:imageRef];
CGContextRelease(ctx);
CGImageRelease(imageRef);
free(piData);
return finalImage;
}
Tak, to był problem z wyrównaniem pamięci. Nie brałem pod uwagę orientacji obrazu. Który dał inną szerokość i wysokość dla CGimage. To, co zauważyłeś, spowodowało nieprawidłowe ustawienie pamięci. Dziękuję za odpowiedź. – Jailbroken