iPhone CGContextRef CGBitmapContextCreate nicht unterstützte parameter-Kombination
In meiner Anwendung brauche ich zum ändern der Größe und zuschneiden-einige Bilder werden lokal gespeichert und online. Ich bin mit Trevor Harmon ' s tutorial implementiert UIImage+Resize
.
Auf meinem iPhone 4(iOS 4.3.1) funktioniert alles OK, ich habe keine Probleme. Aber auf meinem iPhone 3G (iOS 3.2) die Größe und Ernte-Methoden funktionieren nicht für jedes Bild (die lokal gespeichert sind PNGs).
Dies ist die Ausgabe in der Konsole:
Tue Apr 5 02:34:44 Andreis-MacBook-Pro.local Puzzle[12453] <Error>: CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 32 bits/pixel; 3-component color space; kCGImageAlphaLast; 288 bytes/row.
Tue Apr 5 02:34:44 Andreis-MacBook-Pro.local Puzzle[12453] <Error>: CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 32 bits/pixel; 3-component color space; kCGImageAlphaLast; 288 bytes/row.
Tue Apr 5 02:34:44 Andreis-MacBook-Pro.local Puzzle[12453] <Error>: CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 32 bits/pixel; 3-component color space; kCGImageAlphaLast; 288 bytes/row.
Tue Apr 5 02:34:44 Andreis-MacBook-Pro.local Puzzle[12453] <Error>: CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 32 bits/pixel; 3-component color space; kCGImageAlphaLast; 288 bytes/row.
Dies ist die Ernte-Methode
- (UIImage *)croppedImage:(CGRect)bounds
{
CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], bounds);
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return croppedImage;
}
Die resize-Methode ist diese:
- (UIImage *)resizedImage:(CGSize)newSize
transform:(CGAffineTransform)transform
drawTransposed:(BOOL)transpose
interpolationQuality:(CGInterpolationQuality)quality
{
CGRect newRect = CGRectIntegral(CGRectMake(0, 0, newSize.width, newSize.height));
CGRect transposedRect = CGRectMake(0, 0, newRect.size.height, newRect.size.width);
CGImageRef imageRef = self.CGImage;
CGContextRef bitmap = CGBitmapContextCreate(NULL,
newRect.size.width,
newRect.size.height,
CGImageGetBitsPerComponent(imageRef),
0,
CGImageGetColorSpace(imageRef),
CGImageGetBitmapInfo(imageRef));
if(bitmap == nil)
return nil;
CGContextConcatCTM(bitmap, transform);
CGContextSetInterpolationQuality(bitmap, quality);
CGContextDrawImage(bitmap, transpose ? transposedRect : newRect, imageRef);
CGImageRef newImageRef = CGBitmapContextCreateImage(bitmap);
UIImage *newImage = [UIImage imageWithCGImage:newImageRef];
CGContextRelease(bitmap);
CGImageRelease(newImageRef);
return newImage;
}
Kann mir jemand erklären, wie ich dieses Problem?
Danke,
Andrei
InformationsquelleAutor Andrei Neacsu | 2011-04-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Antworten hier, da hatte ich genau die gleiche pixel-format, wenn ich diese Fehler. Ich hoffe, diese Antwort hilft jemand.
Dem Grund, es war ein Fehlschlag, in meinem Fall war, dass
kCGImageAlphaLast
ist nicht gestattet, mehr Wert auf iOS-8, obwohl es gut funktioniert auf iOS 7. Die 32 pbb, 8 bit-Kombination ist nur erlaubtkCGImageAlphaNoneSkip*
undkCGImageAlphaPremultiplied*
für die Alpha-Info. Anscheinend war es ein problem immer war, aber nicht durchgesetzt werden, bevor iOS 8. Hier ist meine Lösung:In meinem Fall die fehlerhafte Stück code sah so aus, wo imageRef ist ein CGImageRef einer PNG-Datei geladen aus dem app-bundle:
Quellen:
https://stackoverflow.com/a/19345325/3099609
https://developer.apple.com/library/mac/DOCUMENTATION/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_context/dq_context.html#//apple_ref/doc/uid/TP30001066-CH203-BCIBHHBB
InformationsquelleAutor user3099609
Dachte ich, es ist ein problem mit dem Farbraum. Ersetzen Sie einfach CGImageGetColorSpace(imageRef) mit CGColorSpaceCreateDeviceRGB() . Dies funktioniert für mich, wenn versucht, um das Bild zu speichern, bekam ich von AVCaptureSession. Und vergessen Sie nicht, es zu veröffentlichen!
InformationsquelleAutor Hlung
Ok, dies kann oder kann nicht helfen (und ich Schätze, dass dies ein Alter post)
War ich immer ein ähnliches problem, weil der Breite-parameter (in deinem Fall newRect.Größe.Breite) hatte einen Dezimalbruch Komponente (z.B. 100.001 statt 100.0). ich typecast in eine Ganzzahl und wieder zurück, mit dem abschneiden der Nachkommastellen-Komponente, und das problem ging Weg. ich vermute, es ist ein test, um zu sehen, dass die Anzahl der bits pro Komponente x Pixel etc summiert sich, und es kann nicht befassen sich mit fractional-Pixel/Punkte. Sie sind willkommen, verwenden Sie diese Methode, wenn es hilft.
InformationsquelleAutor unsynchronized
Ich hatte das gleiche problem mit iOS 5 simulator und die Antworten oben nicht lösen, mein Problem: Bilder wurden nicht geladen und die Konsole noch berichtet werden die gleichen Fehler.
Ich bin mit dem sehr beliebten Kategorien gefunden hier.
Auf dieser blog Leute mit dem gleichen Problem(en). Matt ' s Antwort vom 22 November, 2011 hat mir geholfen.
Prost!
InformationsquelleAutor kjoelbro
Ich sah diese Frage in den simulator beim Wechsel von 5.1 zu 6.1 für die Prüfung. Schließen Sie den simulator, und öffnen Sie es wieder zu haben scheint, entfernt den Fehler.
InformationsquelleAutor madmik3