Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

77
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!