Um Quick Look im Debugger zu verwenden, müssen Sie ein Bild aus diesem Puffer erstellen und die Breite, Höhe, Bits pro Komponente, Bytes pro Zeile, CGBitmapInfo
(dh die Reihenfolge der Komponenten im Puffer) definieren) um es zu sehen. Dann können Sie die Standard-Debugger-Schnellansichtsfunktionen verwenden.
- (UIImage *)imageWithBuffer:(UInt32 *)buffer width:(size_t)width height:(size_t)height {
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(buffer, width, height, 8, width * 4, colorSpace, kCGImageAlphaPremultipliedLast);
CGImageRef imageRef = CGBitmapContextCreateImage(context);
UIImage *image = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
return image;
}
FYI, nimmt die oben, dass Sie wie so Ihre 32-Bit-Werten gefüllt:
UInt32 value = red | green << 8 | blue << 16 | alpha << 24;
Wenn Ihr Byte-Reihenfolge um die andere Art und Weise ist ...
UInt32 value = red << 24 | green << 16 | blue << 8 | alpha
... dann würden Sie kCGBitmapByteOrder32Little
für den Bitmap-Info-Parameterhinzufügen:
CGContextRef context = CGBitmapContextCreate(buffer, width, height, 8, width * 4, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Little);
Wie Sie sehen, wie die Interpretation der Bitmap-Puffer kann in Abhängigkeit von diesen Parametern abhängig, so ist dies, warum der Debugger mehr Informationen zu wissen, als nur den Puffer, um den Debugger Quick Look braucht um das Bild für Sie rendern zu können.
Hinweis, gab es einige Bedenken, dass dies Objective-C-Code war. Es funktioniert aus einer C-Funktion in einer .m
Datei, sondern nur die Funktion Signatur zu ändern, wie unten dargestellt:
UIImage *imageWithBuffer(UInt32 *buffer, size_t width, size_t height) {
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(buffer, width, height, 8, width * 4, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGImageRef imageRef = CGBitmapContextCreateImage(context);
UIImage *image = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
return image;
}
Nachgeben:
Dies ist leider immer noch mit UIImage
. Laut der Dokumentation sollte die CGImageRef
mit Quick Look arbeiten (die Notwendigkeit für die UIImage
), aber meiner Erfahrung nach, hat dies Probleme (von Abstürzen Xcode, um Ihnen einfach die lästige zeigt "Konnte nicht laden Daten für .. ." Botschaft).
Ich wäre überrascht, wenn es ist. –
überraschend, hat es diese Fähigkeit-in Ziel C, für bestimmte Datentypen: http://StackOverflow.com/Questions/2780793/xcode-debugging-Anzeigen-Bilder – bblack
Nizza. Ich fühle mich alt .. –