In meinem OpenGL-Projekt muss ich ein UIImage in Textur konvertieren; wie geht das? Können Sie mir helfen?Ein UIImage in eine Textur konvertieren
7
A
Antwort
10
Ich habe nicht testen die folgenden, aber ich werde die Umwandlung in 3 Schritten zerlegen:
Extract Informationen für Ihr Bild:
UIImage* image = [UIImage imageNamed:@"imageToApplyAsATexture.png"]; CGImageRef imageRef = [image CGImage]; int width = CGImageGetWidth(imageRef); int height = CGImageGetHeight(imageRef);
eine
textureData
mit den oben genannten Eigenschaften zuweisen:GLubyte* textureData = (GLubyte *)malloc(width * height * 4); // if 4 components per pixel (RGBA) CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); NSUInteger bytesPerPixel = 4; NSUInteger bytesPerRow = bytesPerPixel * width; NSUInteger bitsPerComponent = 8; CGContextRef context = CGBitmapContextCreate(textureData, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); CGColorSpaceRelease(colorSpace); CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef); CGContextRelease(context);
Richten Sie Ihre Textur ein:
GLuint textureID; glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glGenTextures(1, &textureID); glBindTexture(GL_TEXTURE_2D, textureID); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, textureData);
EDIT:
lesen this tut; Alles wird durch die Umwandlung eines Bildes in eine Textur und das Anwenden einer Textur in einer iOS-Umgebung erklärt.
0
andere Möglichkeit, dies mit dem GLKit Rahmen tun:
//Path to image
NSString *path = [[NSBundle mainBundle] pathForResource:@"textureImage" ofType:@"png"];
//Set eaglContext
[EAGLContext setCurrentContext:[[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]];
//Create texture
NSError *theError;
GLKTextureInfo *texture = [GLKTextureLoader textureWithContentsOfFile:filePath options:nil error:&theError];
glBindTexture(texture.target, texture.name);
texture.name
ist der Name für die Textur des OpenGL-Kontext.
0
Hier rasche Version der Textur bekommen aus einem UIImage
func setupTexture(sourceImage: UIImage) -> GLuint {
guard let textureImage = sourceImage.cgImage else {
print("Failed to load image")
return 0
}
let width = textureImage.width
let height = textureImage.height
/*
it will write one byte each for red, green, blue, and alpha – so 4 bytes in total.
*/
let textureData = calloc(width * height * 4, MemoryLayout<GLubyte>.size) //4 components per pixel (RGBA)
let spriteContext = CGContext(data: textureData,
width: width,
height: height,
bitsPerComponent: 8,
bytesPerRow: width * 4,
space: textureImage.colorSpace!,
bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue)
spriteContext?.draw(textureImage, in: CGRect(x: 0, y: 0, width: width, height: height))
var textName = GLuint()
glGenTextures(1, &textName)
glBindTexture(GLenum(GL_TEXTURE_2D), textName)
glTexParameteri(GLenum(GL_TEXTURE_2D), GLenum(GL_TEXTURE_MIN_FILTER), GL_NEAREST)
glTexImage2D(GLenum(GL_TEXTURE_2D), 0, GL_RGBA, GLsizei(width),
GLsizei(height), 0, GLenum(GL_RGBA), GLenum(GL_UNSIGNED_BYTE), textureData)
return textName
}
. Hinweis: Need im Auge zu behalten, dass Core Graphics Bilder dreht, wenn wir sie in laden
Verwandte Themen
- 1. Konvertieren von PDF in UIImage
- 2. Konvertieren von UIImage in Byte-Array
- 3. Konvertieren von UIImage in PDF-Datei
- 4. Konvertieren eine Tiefe Textur Probe zu einer Entfernung
- 5. IOSurface-backed Textur zu GL_TEXTURE_2D konvertieren
- 6. OpenGL - Rendering in eine Textur
- 7. Konvertieren von UIImage in Byte-Array in Swift
- 8. eine Reihe von UIImage erhalten in schnellen
- 9. ios, wandle UIImage in eine MultipartFile
- 10. zeichne eine Textur pixelig
- 11. Wie erstelle ich ein schwarzes UIImage?
- 12. Iphone Konvertieren von IplImage in UIImage und zurück verursacht Rotation
- 13. WebGL Textur über Textur
- 14. Convert base64string in UIImage
- 15. UIImage userinfo
- 16. Konvertieren von UIImage in CGImage verursachen Drehung von Image
- 17. Konvertieren von UIImageView-Touch-Koordinaten in UIImage-Koordinaten
- 18. Wie kann ich FBProfilePictureView in einen UIImage konvertieren?
- 19. Konvertieren von UIImage zu UInt8 Array in Swift
- 20. Eine SKSpriteNode-Textur horizontal spiegeln
- 21. Tippen Ort in einem UIImage
- 22. eine Textur in watchOS Extrahierung 3
- 23. konvertieren eine Zeichenfolge in ein Datumsformat
- 24. Wie eine Liste in ein Wörterbuch konvertieren
- 25. eine Klasse in ein Array konvertieren
- 26. Render eine MKPolyline in einem UIImage
- 27. Wie decke ich ein UIImage in ein UIImageView?
- 28. Gibt es eine Möglichkeit, eine Textur in ein Array von ihnen unter Verwendung von SOIL in C++ zu teilen?
- 29. hinzufügen UIImage in CALayer
- 30. Tiling Textur BMP-Datei als Textur auf ein Rechteck in OpenGL?
Ich habe zwei Fragen: mein Bild ist 1024x768, wo sollte ich diese Werte setzen? und schließlich, was ist meine Textur? – CrazyDev
Wenn Sie Ihre Bilder Dimensionen kennen müssen Sie nicht extrahieren die Breite und Höhe nur setzen Sie es direkt – tiguero
Ihre 2D-Textur entspricht dem gl-Objekt, das Sie beim Aufruf von glTexImage2D erstellen, können Sie darauf zugreifen Name: textureID – tiguero