Romasz
Romasz

Reputation: 29792

Captured photo with stripes

I'm using MediaCapture class to take a photo with Windows Phone 8.1 Runtime. The code, where I take a picture looks like this:

// create a file
StorageFile photoFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("myFirstPhoto.jpg", CreationCollisionOption.ReplaceExisting);

// take a photo with choosen Encoding
await captureManager.CapturePhotoToStorageFileAsync(ImageEncodingProperties.CreateJpeg(), photoFile);

The code is working quite fine, as I get a picture, but with strange stripes on left and right side:

enter image description here

I'm trying to find a solution for this problem, but without success. Am I missing something?

EDIT - Photos takes from build-in app are without stripes, so this seems not to be a problem with hardware.

Upvotes: 4

Views: 1861

Answers (2)

superuser
superuser

Reputation: 768

I tried with the lowest resolution it gets the same stripes. From MS Advance Camera sample, they use MediaCapture for preview but SilverLight API for capturing!

The MediaCapture has also memory leak issue each time when you call CapturePhotoToXXX API.

I wonder if they already know MediaCapture is badly managed on WindowsPhone 8.1 and this is the reason why they don't provide a Camera MediaCapture sample with RT APIs.

Upvotes: 0

Romasz
Romasz

Reputation: 29792

Ok I've figured it out myself - it's a problem with resolution which is set as default when using MediaCapture. If you set maximum resolution just after Initializing MediaCapture then there will be no stripes:

// just after initialization
var maxResolution = captureManager.VideoDeviceController.GetAvailableMediaStreamProperties(MediaStreamType.Photo).Aggregate(
                    (i1, i2) => (i1 as VideoEncodingProperties).Width > (i2 as VideoEncodingProperties).Width ? i1 : i2);
await captureManager.VideoDeviceController.SetMediaStreamPropertiesAsync(MediaStreamType.Photo, maxResolution);

Upvotes: 7

Related Questions