Esta página corresponde ao SDK 2.0.0. Enums de maquiagem / remodelagem: Enums de parâmetros.
Escolher o tipo de quadro certo
DefinaFBImageFrame.type antes de processImage:. Não há argumento de modo de processamento no mecanismo.
FBFrameTypeVideo(1): prévia da câmera, ao vivo, chamadas — menor latência.FBFrameTypeImage(0): fotos estáticas — qualidade mais alta.
Stills grandes (prévia e exportação)
Não envie pixels em resolução total paraprocessImage: a cada movimento do slider, nem descarte o original depois de reduzir.
Ao abrir a foto, mantenha o UIImage completo e crie um quadro de prévia (lado longo cerca de 1280–1440, createWithUIImage:). Ajustes processam a prévia (FBFrameTypeImage). A exportação processa um quadro em resolução total com os mesmos setters. O tamanho da saída acompanha a entrada. A câmera continua na resolução de captura + FBFrameTypeVideo.
Faixas de parâmetros
- Intensidade de pele / maquiagem / filtro:
[0.0, 1.0].0desliga esse efeito. - Remodelagem (
setReshape:intensity:):[-1.0, 1.0].0desliga. Positivo e negativo são direções opostas.
Um mecanismo, uma fila serial
createEngineWithConfig: retorna uma instância, não um singleton de processo. Mantenha um mecanismo por sessão e chame-o a partir de uma fila serial (ou do thread GL quando externalContext = YES).
Memória
- Prefira ARC. Solte as referências de
FBImageFramequando o quadro terminar. - Reutilize buffers de pixel da câmera; evite alocar um buffer RGBA novo a cada quadro se o formato de captura já for NV12 / BGRA.
- Filtros e adesivos carregam no próximo
processImage:(thread GL). Não recarregue o mesmo.fbda cada quadro — chamesetFilter:/setSticker:uma vez e, em seguida,setFilterIntensity:conforme necessário. - Use
clearFilter,clearSticker,clearVirtualBackgroundeclearChromaKeyem vez de criar um segundo mecanismo.
OpenGL ES externo
Quando o app já possui um contexto GL:- Defina
config.externalContext = YES. - Crie o mecanismo nesse thread GL.
- Encapsule a textura com
createWithTexture:width:height:stride:. - Leia a saída com
[output texture].
Monitorar com getStats
Prefira FBEngineStats a um timer caseiro:
avgProcessTimeMs abaixo de ~33 ms a 30 fps. Se subir, reduza a resolução, mude para FBFrameTypeVideo ou desligue maquiagem / adesivos não usados.
Ciclo de vida
Mantenha o mecanismo como propriedade strong no view controller (ou em um objeto de sessão). Atribua nil emdealloc quando a sessão terminar. Pause a captura em viewWillDisappear / applicationDidEnterBackground para parar de chamar processImage: — você não precisa de uma API especial de “pause”.
__weak nos blocos de FBEngineCallbacks para evitar ciclos de retenção.
Captura no iOS
- A prévia da câmera costuma ser
kCVPixelFormatType_420YpCbCr8BiPlanarFullRange(NV12) ou BGRA. CrieFBImageFramecomcreateWithNV12:...oucreateWithBGRA:...em vez de converter para RGBA na CPU. - Câmera frontal:
setMirror:@"horizontal"no quadro (oumirror:se precisar inverter os pixels antes do mecanismo). - Permissão de câmera:
NSCameraUsageDescriptionnoInfo.plist. Biblioteca de fotos:NSPhotoLibraryUsageDescriptionse você escolher stills.
Testes
- Vincule o Bundle ID do app de teste e use um
appId/appKeyoulicenseTokenreais. Strings dummy falham com eventos de licença1/101. - Cubra os caminhos still (
FBFrameTypeImage+createWithUIImage:) e ao vivo (FBFrameTypeVideo). - Afirme que os códigos de retorno dos setters são
FBErrorCode_Success.

