Desidero implementare una telecamera personalizzata nella mia app. Quindi, sto creando questa fotocamera usando AVCaptureDevice
.Impostare GrayScale su Output di AVCaptureDevice in iOS
Ora voglio mostrare solo l'uscita grigia nella mia fotocamera personalizzata. Quindi sto cercando di ottenere questo utilizzando setWhiteBalanceModeLockedWithDeviceWhiteBalanceGains:
e AVCaptureWhiteBalanceGains
. Sto usando AVCamManual: Extending AVCam to Use Manual Capture per questo.
- (void)setWhiteBalanceGains:(AVCaptureWhiteBalanceGains)gains
{
NSError *error = nil;
if ([videoDevice lockForConfiguration:&error]) {
AVCaptureWhiteBalanceGains normalizedGains = [self normalizedGains:gains]; // Conversion can yield out-of-bound values, cap to limits
[videoDevice setWhiteBalanceModeLockedWithDeviceWhiteBalanceGains:normalizedGains completionHandler:nil];
[videoDevice unlockForConfiguration];
}
else {
NSLog(@"Could not lock device for configuration: %@", error);
}
}
Ma per questo, devo avere per passare RGB valori di guadagno tra 1 a 4. Così sto creando questo metodo per il controllo dei valori MAX e MIN.
- (AVCaptureWhiteBalanceGains)normalizedGains:(AVCaptureWhiteBalanceGains) gains
{
AVCaptureWhiteBalanceGains g = gains;
g.redGain = MAX(1.0, g.redGain);
g.greenGain = MAX(1.0, g.greenGain);
g.blueGain = MAX(1.0, g.blueGain);
g.redGain = MIN(videoDevice.maxWhiteBalanceGain, g.redGain);
g.greenGain = MIN(videoDevice.maxWhiteBalanceGain, g.greenGain);
g.blueGain = MIN(videoDevice.maxWhiteBalanceGain, g.blueGain);
return g;
}
Anche io sto cercando di ottenere effetti diversi come il passaggio di valori statici di guadagno RGB.
- (AVCaptureWhiteBalanceGains)normalizedGains:(AVCaptureWhiteBalanceGains) gains
{
AVCaptureWhiteBalanceGains g = gains;
g.redGain = 3;
g.greenGain = 2;
g.blueGain = 1;
return g;
}
Ora, voglio impostare questa scala di grigi (Formula: Pixel = 0.30078125f * R + G + 0.5859375f * 0.11328125f * B) sulla mia macchina fotografica personalizzato. Ho provato questo per questa formula.
- (AVCaptureWhiteBalanceGains)normalizedGains:(AVCaptureWhiteBalanceGains) gains
{
AVCaptureWhiteBalanceGains g = gains;
g.redGain = g.redGain * 0.30078125;
g.greenGain = g.greenGain * 0.5859375;
g.blueGain = g.blueGain * 0.11328125;
float grayScale = g.redGain + g.greenGain + g.blueGain;
g.redGain = MAX(1.0, grayScale);
g.greenGain = MAX(1.0, grayScale);
g.blueGain = MAX(1.0, grayScale);
g.redGain = MIN(videoDevice.maxWhiteBalanceGain, g.redGain);
g.greenGain = MIN(videoDevice.maxWhiteBalanceGain, g.greenGain);
g.blueGain = MIN(videoDevice.maxWhiteBalanceGain, g.blueGain);
return g;
}
Così Come posso passare questo valore tra 1 a 4 ..?
C'è qualche modo o scala per confrontare queste cose ..?
Qualsiasi aiuto sarebbe apprezzato.
La regolazione del bilanciamento del bianco non trasformerà un'immagine a colori in un'immagine in bianco e nero. Devi trovare un'altra API per farlo. Ad esempio [vImageMatrixMultiply_ARGB8888] (https://developer.apple.com/library/ios/documentation/Performance/Reference/vImage_transform/index.html#//apple_ref/c/func/vImageMatrixMultiply_ARGB8888) – Mats
@Mats: Sì, grazie .. !! Si prega di fornire qualsiasi codice di esempio per una migliore comprensione. –
Forse questo, http://stackoverflow.com/questions/21207099/, la domanda aiuta. – Mats