Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

75
Vistas
MTKView - Cambiar el tamaño de la textura a la vista de relleno

Soy muy nuevo en Metal, pero trabajo diligentemente para seguir el proyecto de muestra AVCamFilter de Apple. El proyecto demuestra el uso de MTKView como vista previa de AVCaptureSession.

No he logrado descubrir cómo hacer que mi MTKView se reproduzca en "pantalla completa" (específicamente en iPhone X, XS y iPad Pro de tercera generación). Si bien mis restricciones están configuradas correctamente en el guión gráfico, la vista previa de mi cámara se escala a una relación de aspecto diferente y no a pantalla completa.

Como prueba, puse;

self.clearColor = MTLClearColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0)

en el inicio de mi MTKView, confirmando que el MTKView tiene el tamaño adecuado (puedo ver el fondo rojo en las áreas problemáticas, pero la vista previa de mi cámara no se estira para llenar la pantalla).

Creo que mi problema existe en este cálculo;

 // Calculate scale. if textureWidth > 0 && textureHeight > 0 { switch textureRotation { case .rotate0Degrees, .rotate180Degrees: scaleX = Float(internalBounds.width / CGFloat(textureWidth)) scaleY = Float(internalBounds.height / CGFloat(textureHeight)) case .rotate90Degrees, .rotate270Degrees: scaleX = Float(internalBounds.width / CGFloat(textureHeight)) scaleY = Float(internalBounds.height / CGFloat(textureWidth)) } } // Resize aspect ratio. resizeAspect = min(scaleX, scaleY) if scaleX < scaleY { scaleY = scaleX / scaleY scaleX = 1.0 } else { scaleX = scaleY / scaleX scaleY = 1.0 }

En mi entorno de prueba, el tamaño de mi textura es 2400x1800 y mis límites internos son 834x1194. Si bien reconozco la diferencia en la relación de aspecto, estoy tratando de averiguar las matemáticas correctas para que la textura llene toda la pantalla (incluso si eso significa que se escala un poco menos y pierdo parte de la textura en los lados).

¿Alguien podría aconsejar? ¡Gracias!

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

// Resize aspect ratio. resizeAspect = min(scaleX, scaleY) if scaleX < scaleY { scaleY = scaleX / scaleY scaleX = 1.0 } else { scaleX = scaleY / scaleX scaleY = 1.0 }

Reemplazar con

 // Resize aspect ratio. // For AspectFill Screen scaleX > scaleY // For AspectFit Screen scaleX < scaleY resizeAspect = min(scaleX, scaleY) if scaleX > scaleY { scaleY = scaleX / scaleY scaleX = 1.0 } else { scaleX = scaleY / scaleX scaleY = 1.0 }
over 4 years ago · Santiago Trujillo Denunciar

0

Open PreviewMetalView.swift Replace following lines: let width = CVPixelBufferGetWidth(previewPixelBuffer) let height = CVPixelBufferGetHeight(previewPixelBuffer) with following lines: let previewViewWidth = Int(self.frame.size.width) let previewViewheight = Int(self.frame.size.height) let isPortrait = previewViewheight > previewViewWidth let width = isPortrait ? previewViewheight : previewViewWidth let height = isPortrait ? previewViewWidth : previewViewheight
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda