Apple denetimlerinden geçmeden iPhone'da resim kod çekmenin bir yolu var mı? Bunu yapan bir sürü uygulama gördüm. Ancak, hangi API çağrısının kullanılacağından emin değilim.Denetimleri göstermeden iPhone'da fotoğraf çekin
cevap
Evet, bunu yapmanın iki yolu vardır. IOS 3.0 + 'da kullanılabilen bir, showsCameraControls
özelliğini NO olarak ayarlayarak ve cameraOverlayView
özelliğini kendi özel denetimlerinize ayarlayarak UIImagePickerController
sınıfını kullanmaktır. IOS 4.0+ sürümünde kullanılabilen iki model, uygun kamera aygıtını kullanan AVCaptureDeviceInput
ve AVCaptureStillImageOutput
ile AVCaptureSession
yapılandırmasıdır. İlk yaklaşım çok daha basit ve daha fazla iOS sürümü üzerinde çalışıyor, ancak ikinci yaklaşım size fotoğraf çözünürlüğü ve dosya seçenekleri üzerinde çok daha fazla kontrol sağlıyor.
DÜZENLEME: Aşağıdaki yorumlarda da belirtildiği gibi, AVCaptureSession'ın nasıl bildirilmesi ve başlatılması gerektiğini açıkça gösterdim. Bir kaçının başlatma işlemini yanlış yaptığı veya AVCaptureSession'ı bir yöntemde yerel değişken olarak bildirdiği görülüyor. Bu işe yaramazdı. kod takiben
kullanıcı girişi olmadan AVCaptureSession kullanarak resim çekmek için izin verir:
// Get all cameras in the application and find the frontal camera.
AVCaptureDevice *frontalCamera;
NSArray *allCameras = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
// Find the frontal camera.
for (int i = 0; i < allCameras.count; i++) {
AVCaptureDevice *camera = [allCameras objectAtIndex:i];
if (camera.position == AVCaptureDevicePositionFront) {
frontalCamera = camera;
}
}
// If we did not find the camera then do not take picture.
if (frontalCamera != nil) {
// Start the process of getting a picture.
session = [[AVCaptureSession alloc] init];
// Setup instance of input with frontal camera and add to session.
NSError *error;
AVCaptureDeviceInput *input =
[AVCaptureDeviceInput deviceInputWithDevice:frontalCamera error:&error];
if (!error && [session canAddInput:input]) {
// Add frontal camera to this session.
[session addInput:input];
// We need to capture still image.
AVCaptureStillImageOutput *output = [[AVCaptureStillImageOutput alloc] init];
// Captured image. settings.
[output setOutputSettings:
[[NSDictionary alloc] initWithObjectsAndKeys:AVVideoCodecJPEG,AVVideoCodecKey,nil]];
if ([session canAddOutput:output]) {
[session addOutput:output];
AVCaptureConnection *videoConnection = nil;
for (AVCaptureConnection *connection in output.connections) {
for (AVCaptureInputPort *port in [connection inputPorts]) {
if ([[port mediaType] isEqual:AVMediaTypeVideo]) {
videoConnection = connection;
break;
}
}
if (videoConnection) { break; }
}
// Finally take the picture
if (videoConnection) {
[session startRunning];
[output captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {
if (imageDataSampleBuffer != NULL) {
NSData *imageData = [AVCaptureStillImageOutput
jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
UIImage *photo = [[UIImage alloc] initWithData:imageData];
}
}];
}
}
}
}
seans değişken türü AVCaptureSession ait olup sınıfının .h dosyasında ilan edilmiştir (ya bir özellik olarak veya özel olarak sınıf üyesi):
AVCaptureSession *session;
Daha sonra sınıfında, örneğin yere başlatılması gerekir init yöntemi:
session = [[AVCaptureSession alloc] init]
Çok kullanışlı örnek, teşekkürler. – aceofspades
Bu kodu şimdi denedim, hepsi [çıktı captureStillImageAsynchronouslyFromConnection: ... 'çıkışına kadar çalışır, ancak daha sonra durur ve fotoğraf çekilmez. Hemen takip eden çizgiye giriş ekledim ve hiç giriş yapmamıştım. Kod yazdığınız şeydir ve bu noktaya kadar kodu doğruladım (bir düğme ekledim ve .xib'e bağladım, düzgün bir şekilde ateşledim). Ben de AVFoundation.framework ve AssetsLibrary.framework dahil ettik. Herhangi bir fikir? –
Bu satırda bir kesme noktası koydunuz: (imageDataSampleBuffer! = NULL) Vurdu mu? Eğer isabet ederse, NULL değil mi? –
- 1. Web uygulamalarında web kamerası veya mobil fotoğraf makinesinden fotoğraf çekin
- 2. CaptureElement ile MediaCapture ile özel çözünürlükte fotoğraf çekin
- 3. Ruby $ stdin.gets ekranda karakterleri göstermeden
- 4. Parse.com dizisinden resim çekin
- 5. ASP.NET dinamik denetimleri sayısı (giderken denetimleri oluşturma)
- 6. ADB ile özel dosyalar çekin
- 7. Aşağı çekin zıplamadan UITableVIew üstbilgisi
- 8. Odağı çalmadan kullanıcı dikkatini çekin
- 9. git Master'ı geliştirme şubesine çekin
- 10. UIWebView'da yenileme yapmak için çekin.
- 11. Datetime tarih göstermeden zaman damgası ekle VB
- 12. UIImagePickerController Fotoğraf Makinesinden Fotoğraf Çekmek - Varsayılan - kare
- 13. Android - Fotoğraf Makinesinde Parlamayı Azaltma (Fotoğraf/Video)
- 14. Fotoğraf makinesinden PHP sunucusuna bir fotoğraf yükleyin
- 15. Fotoğraf kod yazıcısının sağ sütuna yerleştirilmemesi Fotoğraf:
- 16. Winforms'ta WPF denetimleri barındırma
- 17. WPF: Koddan denetimleri ekle
- 18. jQuery UI Denetimleri
- 19. MVVM Swapping out denetimleri
- 20. Delphi Açılır Menüsü Denetimleri
- 21. Denetimleri kaldır wxWidgets
- 22. Ninject.Web ve kullanıcı denetimleri
- 23. Kullanıcı arabirimi olmadan android uygulamasında nasıl fotoğraf çekilir ..?
- 24. Çin/Asya'da santrifüjlü docker çekiciyi çekin
- 25. Bir olay kullanmadan sensörden tek değer çekin
- 26. Her seferinde kimlik doğrulama olmadan github'ten çekin
- 27. Git Yerel Değişiklikleri Göz ardı ederken Çekin?
- 28. Git SSH'yi çekin - Havuz bulunamadı. HTTPS çalışır
- 29. docker çekin/itme güvenli kayıt defterinde çalışmıyor
- 30. Popüler kütüphane olmadan Android'de yenilemek için çekin
UIImagePickerController kullanmadan kastettiğiniz varsayılarak "Apple denetimleri" ile. – aceofspades