Dieser Artikel wurde maschinell übersetzt.

Windows Phone

Entwicklung einer erweiterten Kamera-App für Nokia Lumia-Mobiltelefone

Rajesh Lal

In diesem Artikel werde ich Ihnen beibringen, wie eine app für die 41-Megapixel (MP) Nokia Lumia 1020 und 20MP Lumia 1520 Nokia Smartphones zu entwickeln.Ich konzentriere mich hauptsächlich auf die Nokia-Lumia-1020, aber die Informationen gelten für alle Lumia Windows Phone 8 Geräte mit PureView-Technologie.Zuerst PureView, die Technologie hinter der leistungsfähige Kamera, die in die Telefone enthalten erörtert und dann erkläre ich die erweiterten Funktionen zugreifen und verbessern Ihre Fotos zur Verfügung.Ich bieten einen Überblick über die Nokia Imaging SDK (es hat Tonnen von Ready-to-Use-Grafikfilter) und eine Anleitung wie man es benutzt.Ich werde auch Deckung den typischen Workflow erforderlich, um eine Kamera-app zu bauen und zeigen Ihnen, wie einen Tilt-Shift-Foto-Filter um geringe Schärfentiefe simulieren erstellt.Lassen Sie uns beginnen.

Verständnis der PureView-Technologie in einem 41MP-Kamera-Handy

PureView-Technologie umfasst erweiterte Kamera-Hardware und verwandter Software.Gemeinsam ermöglichen sie die Erfassung und Speicherung von hochwertigem, hochauflösenden Bildern.Die drei wichtigsten Aspekte der PureView-Technologie sind eine hochauflösende Kamera-Linse, oversampling und verlustfreier Zoom.Ich werde jeweils kurz erklären.

Der Kern der PureView-Technologie ist ein hochauflösender Sensor, 7.728 Pixel breit und hoch, 5.368 Pixel in Höhe von mehr als 41MP.Dadurch ist die Kamera-Handy um großen Fotografien, sechs Mal größer als ein normaler 5MP Foto zu erfassen.

Abbildung 1 ein 41MP-Auflösung-Bild mit einem 5MP Auflösung Bild vergleicht.Wegen dieser 41MP Auflösung, Sie können fotografieren qualitativ hochwertige 34MP 16:9 (7.728 x 4.354) sowie 38MP 4:3 Fotos (7.152 x 5.368), wie in der Objektiv-Ansicht der Kamera dargestellt Abbildung 2.

Ein Bild des 41MP im Vergleich mit einem 5MP BildAbbildung 1 41MP Bild im Vergleich mit einem 5MP Bild

Verlustfreier Zoom ist immer noch Teil des FotosAbbildung 2 verlustfreier Zoom ist immer noch Teil des Fotos

Pixel-Oversampling ist, wenn die Kamera ein Foto 41MP nimmt und erstellt das Bild eines hochwertigen 5MP.Dies ist das Bild, das Sie auf dem Handy-Display zu sehen.Darüber hinaus hält der Oversampling-Prozess im Bild aber Filter entfernt jede visuelle Störungen, der reichen Details.

Der dritte Aspekt der PureView-Technologie ist verlustfreier Zoom, was einfach bedeutet, dass Sie nicht verlieren, Bildqualität, beim vergrößern.Dies ist möglich, weil — an jedem Punkt in der Zeit — Sie zur Verfügung haben die original 41MP-Bild, das ein 5MP Foto zeigen abgetastet wird.Beim Vergrößern, sind Sie wirklich in einen Teil des ursprünglichen 41MP Fotos zoomen.Bei haben bis ein 3fach-Zoom, Sie noch mit Teilen des Originalfotos 41MP tun.Und auch bei maximalem Zoom Foto-Qualität ist immer noch die Qualität eines regulären 5MP Fotos.Die Bildqualität wird durch Oversampling, nur besser, da Sie die Ansicht vergrößern.Abbildung 2 zeigt, wie der verlustfreie Zoom noch das ursprüngliche Foto gehört.

Das Nokia Imaging SDK

Wenn Sie eine Kamera-app zu erstellen, ist ein hochauflösendes Foto der Rohstoff, aber Sie benötigen einen erweiterte Software-Stack, der die riesige Bilder und lassen Sie zugreifen und Sie manipulieren kann.Hier kommt das Nokia Imaging SDK ins Bild (bit.ly/1hJkmpl).Es bietet eine Reihe von erweiterten Funktionen auf eine hochauflösende Fotografie von der Kamera zuzugreifen.

Das Nokia-Imaging-SDK enthält teilweise JPEG-Dekodierung, Random Access JPEG (RAJPEG) Technologie genannt.RAJPEG für direkten Zugriff von JPEG-Daten ermöglicht schnelle Herunterskalierung Bilder und sofortige teilweise Dekodierung.Diese Aspekte des RAJPEG aktivieren Sie Echtzeit-Bildbearbeitung.Das Nokia-Imaging-SDK enthält mehr als 50 Verbesserungen, Effekte und Filter.Es enthält auch eine Reihe von am häufigsten verwendeten Bild-Vorgänge, z. B. zuschneiden, Größe ändern, drehen und rückgängig zu machen, um nur um wenige zu nennen.Diese Out-of-the-Box-Funktionen helfen Ihnen erweiterte Kamera/Foto-zentrierte Anwendungen zu erstellen, ohne sich Gedanken über die am häufigsten verwendeten Funktionen.Das Nokia Imaging SDK in Ihrem Projekt verwenden möchten, befolgen Sie die Anweisungen auf der Seite Nokia Lumia-Entwickler-Bibliothek (bit.ly/KzDPNG).

Imaging SDK APIs

Die APIs im Imaging SDK kann leicht auf die Bilddaten, die von der Kamera in den relativ wenigen Zeilen erfasst angewendet werden:

var imageSource = new StreamImageSource(e.ChosenPhoto);
// Definieren die Effekte anwenden
var filterEffect = new FilterEffect(imageSource);
filterEffect.Filters = new [] { new FogFilter() };
// Rendern das Bild mit WriteableBitmapRenderer
WriteableBitmapRenderer renderer =
  new WriteableBitmapRenderer(filterEffect, 
  myImageBitmap,OutputOption.PreserveAspectRatio);
await renderer.RenderAsync();

Hier wird e.ChosenPhoto verwendet, um eine StreamImageSource zu erstellen. Die e.ChosenPhoto können direkt von einer Kamera erfasst-Foto oder ein Foto in das Album kommen. Anschließend erstellt einen Filtereffekt anzuwenden auf das Foto und die Filter-Array eine künstlerische FogFilter in mein Effekt hinzugefügt. Falls gewünscht, kann dieses Array mehrere Filter enthalten, die dann angewendet und in MyImageBitmap mit einem WriteableBitmapRenderer wiedergegeben werden. Wie der Name schon sagt, macht es eine Bildquelle auf eine "WriteableBitmap". Schließlich trägt die RenderAsync-Methode in der asynchronen Darstellung des Bildes.

Zusammen mit FogFilter können Sie mehr als 50 andere Imaging SDK-Filter auf ein Bild anwenden. Abbildung 3 zeigt die Liste der Verbesserung Filter innerhalb der kostenlosen App Filter-Explorer, out of the Box für Entwickler zur Verfügung. Es umfasst Filter wie AutoEnhanceFilter, AutoLevelsFilter, ColorBoostFilter und ExposureFilter. Dies sind Filter können direkt auf jedes Foto in Echtzeit aufgenommene Bild Qualität zu verbessern.

Erweiterung-Filter in die kostenlose App Filter-Explorer
Abbildung 3 Enhancement-Filter in die kostenlose App Filter-Explorer

Es gibt andere Filter für Helligkeit (BrightnessFilter) und Kontrast (ContrastFilter), die Parameter für Helligkeit und Kontrast nehmen. Es gibt eine Reihe von Filtern nur für künstlerische Effekte, wie Relief, Graustufen- und Sepia. Es gibt auch die Bildbearbeitung "Filter", die bieten die zuvor erwähnten häufig verwendeten Funktionen wie drehen, kippen, Spiegel und so weiter. Diese können auf ein einzelnes Bild mehrfach eine übereinander, um dramatische Effekte zu erzeugen angewendet werden.

Hochauflösende Kamera App Workflow

Jetzt, wo ich dir die Hardware und Imaging SDK Funktionen erzählt habe, zeige ich Ihnen den typischen Workflow benötigen Sie für den Aufbau einer leistungsstarken Kamera-Telefon-app. Weil ich ein großes Bild tun habe, habe ich schön zu spielen, so dass meine app nicht langsam andere apps machen oder eine große Menge an Arbeitsspeicher nehmen. Dies kann gewährleistet werden, indem man nicht versucht, direkt auf das große Bild in der Kamera bearbeiten.

An irgendeinem Punkt der Zeit haben die Kamera zwei Fotos: die original 41MP-Fotografie und die 5MP-Fotografie, die im Bereich Kamera-Ansicht angezeigt wird. In meiner app werde ich immer auf dem Foto, 5MP Kamera Telefon, arbeiten, welche entweder das Malmaskenmodus Bild des ganzen Fotos der vergrößerten Teil des Bildes oder der Malmaskenmodus und teilweise vergrößerten Teil des Fotos sein kann.

Abbildung 4 zeigt den Workflow für die Bildbearbeitung app.

Bild-App-Workflows
Abbildung 4-Bild-App-Workflows

Die einzelnen Schritte umfassen:

  • Hochauflösende Bilder zu erfassen.
  • Speichern sie Ihre lokalen Speicher.
  • Zaubern Sie mit dem Imaging SDK.
  • Das resultierende Bild auf 5MP skalieren.
  • Speichern Sie das 5MP verbessertes Bild zur Kamerarolle.

Erstellen von fotografischen filtern: Tilt-Shift

Jetzt werde ich durch den Workflow meiner fotografischen basierenden, Tilt-Shift Kamera APP nötig. Tilt-Shift Fotografie ist die Verwendung von Kamerabewegungen — speziell Tilt — für Tiefenschärfe einer Miniatur-Landschaft zu simulieren (siehe Abbildung 5). Finden Sie weitere Informationen über Tilt-Shift Fotografie an bit.ly/1bRYYNK. In dieser app werde ich die geringe Schärfentiefe mit digitaler Nachbearbeitung mit mehreren Filtern im Nokia Imaging SDK simulieren.

Der Tilt-Shift-Effekt
Abbildung 5 der Tilt-Shift-Effekt

Ich werde Ihnen zeigen, wie das im Workflow passt ich bereits erörtert.

Foto erwerben der erste Schritt für jede Kamera-basierte app ist ein Bild aus der Handy-Kamera oder Bildergalerie zu erwerben. Dies ist auf drei verschiedene Arten möglich. Eine ist die Standard-5MP-Kamera verwenden, mithilfe der CameraCaptureTask, die den normalen Kamerasucher auslöst. Die zweite Methode wird mithilfe des systemeigenen Foto-Datumsauswahl-Steuerelements von PhotoChooserTask aufgerufen. Diese beiden Alternativen sind ausreichend für die meisten Kamera-apps, aber für eine erweiterte app, wo Sie brauchen, um hochauflösende Fotos zu erfassen, müssen Sie einen benutzerdefinierten Sucher zu schaffen, der integrierten Kamera Pro Anwendung Sucher mit hoher Auflösung löst. Dies geschieht mithilfe des PhotoCaptureDevice-Objekts. Finden Sie unter Abbildung 6 für die Liste der Methoden und Eigenschaften, die von PhotoCaptureDevice unterstützt.

Methoden und Eigenschaften, die von PhotoCaptureDevice unterstützt
 Abbildung 6-Methoden und Eigenschaften, die von PhotoCaptureDevice unterstützt

Die UI die Tilt-Shift-app besteht aus zwei Bilder: ein Original­Bild angezeigt das eigentliche Bild erfasst oder über die Foto-Auswahl und die TiltShiftImage, die das endgültige Bild anzeigt, nachdem der Tilt-Shift Filter auf das Originalbild angewendet wird ausgewählt. Die SelectButton löst der native Foto-Auswahl und die Kamera­Button löst die Kamera wie im Code in Abbildung 7.

Abbildung 7 die XAML-Benutzeroberflächencode

<Canvas x:Name="LayoutRoot" Background="Transparent">
  <TextBlock Text="" Style="{StaticResource
    PhoneTextNormalStyle}" />
  <Image x:Name="TiltShiftImage" Height="480" Width="728"
    Stretch="UniformToFill" MouseLeftButtonUp
    ="TiltShiftImage_MouseLeftButtonUp"/>
  <Image x:Name="OriginalImage" Height="480" Width="728"
    Stretch="UniformToFill" Canvas.ZIndex="0"
    MouseLeftButtonUp="OriginalImage_MouseLeftButtonUp"
    Source="/Assets/Landscapes.jpg"/>
  <Rectangle x:Name="TiltshiftRegion" Fill="White" Height="65"
    Stroke="#FF0B7AFF" Canvas.Top="320" Width="728"
    Opacity="0.25" StrokeThickness="5"/>
  <Button x:Name="SelectButton" Content="Select"
    Click="PickAnImageButton_Click" Canvas.Left="4"
    Canvas.Top="398" />
  <Button x:Name="CameraButton" Content="Camera"
    Click="CameraButton_Click" Canvas.Left="123"
    Canvas.Top="398" />
  <Button x:Name="ProButton" Content="Pro Camera"
    Click="ProCameraButton_Click" Canvas.Left="254"
    Canvas.Top="398" />
  <Button x:Name="SaveButton" Content="Save"
    Click="SaveImage_Click" Canvas.Left="630"
    Canvas.Top="398" />
  <Button x:Name="TiltShiftButton" Content="Tilt Shift"
    Click="TiltShiftButton_Click" Canvas.Left="449"
    Canvas.Top="398" />
</Canvas>

Die daraus resultierende Kamera UI zeigt Abbildung 8.

Die Tilt-Shift-App-Benutzeroberfläche
Abbildung 8 die Tilt-Shift-App-Benutzeroberfläche

Eine hochauflösende Aufnahme die ersten beiden Methoden der normale Kamera und Foto-Picker-Funktionalität sind unkompliziert. Der Microsoft.Phone.Tasks-Namespace enthält zwei Task-Objekten, Kamera­CaptureTask und PhotoChooserTask, für diese beiden Zwecke. Wählen Sie einfach das Bild aus der Foto-Auswahl oder das Ergebnis der Kamera Aufnahme als Quelle für den Tilt-Shift-Filter:

private void PickAnImageButton_Click(object sender, RoutedEventArgs e)
{
  PhotoChooserTask chooser = new PhotoChooserTask();
  chooser.Completed += PickImageCallback;
  chooser.Show();  
}
private void CameraButton_Click(object sender, RoutedEventArgs e)
{
  CameraCaptureTask camera = new CameraCaptureTask();
  camera.Show();
  camera.Completed += PickImageCallback;
}

Ich muss um ein hochauflösendes Foto zu erfassen, erstellen Sie einen benutzerdefinierten Sucher mit einem video Pinsel, dessen Quelle das Bild der Kamera Pro Anwendung stehen:

<Canvas x:Name="Canvas" Tap="Canvas_Tap" Height="480"
  HorizontalAlignment="Center" VerticalAlignment="Center">
  <Canvas.Background>
    <VideoBrush x:Name="ViewfinderVideoBrush" Stretch="Uniform"/>
  </Canvas.Background>          
  <Border x:Name="FocusBracket" Width="80" Height="80"
    BorderBrush="White" BorderThickness="2" Margin="-40"
    Visibility="Collapsed" CornerRadius="360"/>
  <Image x:Name="FreezeImage" Visibility="Collapsed"
    Stretch="Uniform" Height="480"/>
</Canvas>

Ich muss auch die Pro-Kamera-Anwendung mit der richtigen Auflösung je nach Gerät, Lumia 1020 oder Lumia 1520 und die Art der Auflösung wollte zu initialisieren.Finden Sie unter Abbildung 9 für Optionen.

Hochauflösende Abbildung 9-Optionen

Modelle-Varianten Manuell konfigurierbar Hochauflösende Optionen
Lumia-1020 RM-875, RM-876, RM-877 7712 x 4352 (16:9), 7136 x 5360 (4:3)
Lumia-1020 RM-937, RM-938, RM-940 RM-939 5376 x 3024 (16:9), 4992 x 3744 (4:3)

Abbildung 10 zeigt, wie Sie die Pro-Kamera-Anwendung initialisieren können.

Abbildung 10 initialisieren die Pro Kamera-Anwendung

private void InitializeCamera() {
  Windows.Foundation.Size captureResolution;
  var deviceName = DeviceStatus.DeviceName;
  if (deviceName.Contains("RM-875") || deviceName.Contains("RM-876") ||
    deviceName.Contains("RM-877"))
  {
    captureResolution = new Windows.Foundation.Size(7712, 4352); // 16:9
    //captureResolution = neue Windows.Foundation.Size(7136, 5360); // 4:3
  }
  else if (deviceName.Contains("RM-937") || deviceName.Contains("RM-938") ||
    deviceName.Contains("RM-939"))  {
      captureResolution = new Windows.Foundation.Size(5376, 3024); // 16:9
      //captureResolution = neue Windows.Foundation.Size(4992, 3744); // 4:3
    }
  else {
    captureResolution = PhotoCaptureDevice.GetAvailableCaptureResolutions(
      REAR_CAMERA_SENSOR_LOCATION).First();
  }
  var task = PhotoCaptureDevice.OpenAsync(REAR_CAMERA_SENSOR_LOCATION,
  captureResolution).AsTask();
  task.Wait();
  _device = task.Result;
  _device.SetProperty(
    KnownCameraGeneralProperties.PlayShutterSoundOnCapture, true);
  if (_flashButton != null) {
    SetFlashState(_flashState);
  }
  AdaptToOrientation(); 
  ViewfinderVideoBrush.SetSource(_device);
  if (PhotoCaptureDevice.IsFocusSupported(REAR_CAMERA_SENSOR_LOCATION))  {
    Microsoft.Devices.CameraButtons.ShutterKeyHalfPressed +=
    CameraButtons_ShutterKeyHalfPressed;
  }
  Microsoft.Devices.CameraButtons.ShutterKeyPressed +=
    CameraButtons_ShutterKeyPressed;
}

Aufzeichnen des Abbilds aus der Pro-Kamera-Anwendung umfasst ShutterHalfKeyPressed und ShutterKeyPressed Ereignisse, wie in dargestellt Abbildung 11.

Abbildung 11 eine Aufnahme über Auslöser gedrückt Events

private async void CameraButtons_ShutterKeyHalfPressed(
  object sender, EventArgs e) {
    if (!_focusing && !_capturing) {
      _focusing = true;
      await _device.FocusAsync();
      _focusing = false;
    }
}
private async void CameraButtons_ShutterKeyPressed(
  object sender, EventArgs e) {
    if (!_focusing && !_capturing) {
      _capturing = true;
      var stream = new MemoryStream();
      try {
        var sequence = _device.CreateCaptureSequence(1);
        sequence.Frames[0].CaptureStream = stream.AsOutputStream();
        await _device.PrepareCaptureSequenceAsync(sequence);
        await sequence.StartCaptureAsync();
      }
      catch (Exception ex) {
        stream.Close();
      }
      _capturing = false;
      if (stream.CanRead) {
        // Process the image in the stream
        // This can be saved to the local storage
      }
    }
}

Die zaubern ich werde zuerst die PickImageCallback verwenden, um ein Foto zu erhalten, die dann als Quelle für das OriginalImage festgelegt ist. Um die Abmessungen des Bildes zugreifen zu können, verwende ich ImageProviderInfo.

Ich werde auch Filter erstellen und anwenden in der Sitzung. Um einen Tilt-Shift-Effekt zu erzielen, verwende ich drei verschiedene Filter: BlurFilter mit KernelSize 15; ColorBoostFilter mit Wert 0,5; und wieder BlurFilter mit KernelSize 21. Die beiden blur Filter machen die Vorder- und Hintergrundfarbe des Bildes aus der Fokus und die ColorBoostFilter hellt die Region, die ich tun, um die Miniatur-Effekt erstellen wollen. Der dazugehörige Code ist in Abbildung 12 dargestellt.

Abbildung 12 Filter für einen Effekt initialisieren

public partial class MainPage : PhoneApplicationPage {
  private Stream _img;
  private StreamImageSource imageSource;
  private ImageProviderInfo info;
  private FilterEffect _tiltshiftEffect = null;
  private WriteableBitmap _tiltshiftImageBitmap = null;
  // Konstruktor
  public MainPage()  {
    InitializeComponent();
    _tiltshiftImageBitmap =
    new WriteableBitmap((int)TiltShiftImage.Width,(int)TiltShiftImage.Height);
  }
...
private async void PickImageCallback(Object sender, PhotoResult e) {
  if (e.TaskResult != TaskResult.OK) {
    return;
  }
  _img = e.ChosenPhoto;
  imageSource = new StreamImageSource(_img);
  var bitmapImage = new BitmapImage();
  bitmapImage.SetSource(e.ChosenPhoto);
  OriginalImage.Source = bitmapImage;
  info = await imageSource.GetInfoAsync();
  TiltShift();         
...

Ich brauche um den Tilt-Shift Filter anwenden, drei Rechtecke: Das oberste Rechteck für Unschärfe; Das mittlere Rechteck für Color Boost; und das untere Rechteck für Unschärfe wieder (siehe Abbildung 13). In diesem Beispiel verwende ich einen rechteckigen Bereich, genannt TiltshiftRegion, die der Benutzer kann berühren und bewegen die Position anpassen, wo die Tilt-Shift stattfindet. Das transluzente Rechteck angezeigt, die Abbildung 13 Tilt verschoben wird und der Rest des Gebietes ist verschwommen.

Die drei Rechtecke verwendet für den Tilt-Shift-Effekt
Abbildung 13 der drei Rechtecke verwendet für den Tilt-Shift-Effekt

Die TiltShiftRegion-Position wird verwendet, um die drei Rechtecke berechnen wenn der Filter angewendet werden (siehe Abbildung 14).

Abbildung 14 kombinieren Filter für einen Effekt

private async void TiltShift() {
  if (info == null) return;
  try {
    var topLeft = new Windows.Foundation.Point(0, 0);
    var tiltShiftRegionTop = Canvas.GetTop(TiltshiftRegion);
    var delta = info.ImageSize.Height / TiltShiftImage.Height;
    tiltShiftRegionTop = (tiltShiftRegionTop + 10) * delta;
    var tiltShiftRegionBottom =
      (Canvas.GetTop(TiltshiftRegion) + 10) * delta + TiltshiftRegion.Height;
    var topRight =
      new Windows.Foundation.Point(info.ImageSize.Width, tiltShiftRegionTop);
    var bottomLeft = new Windows.Foundation.Point(0, tiltShiftRegionBottom);
    var bottomRight = new Windows.Foundation.Point(
      info.ImageSize.Width, info.ImageSize.Height);
    // Definieren die Effekte anwenden
    _tiltshiftEffect = new FilterEffect(imageSource);
    List<IFilter> filters = new List<IFilter>();
    filters.Add(new BlurFilter(15, (
      new Windows.Foundation.Rect(topLeft, topRight)),
      BlurRegionShape.Rectangular));
    filters.Add(new ColorBoostFilter(0.5));
    filters.Add(new BlurFilter(23, (new Windows.Foundation.Rect(bottomLeft,
      bottomRight)), BlurRegionShape.Rectangular));
    _tiltshiftEffect.Filters = filters;
    // Rendern das Bild mit WriteableBitmapRenderer
    WriteableBitmapRenderer renderer =
      new WriteableBitmapRenderer(_tiltshiftEffect,
      _tiltshiftImageBitmap, OutputOption.PreserveAspectRatio);
    _tiltshiftImageBitmap = await renderer.RenderAsync();
    TiltShiftImage.Source = _tiltshiftImageBitmap;
  }
  catch (Exception exception) {
    MessageBox.Show("Exception:" + exception.Message);
    return;
  }
  SaveButton.IsEnabled = true; 
}

Foto speichern schließlich das bearbeitete Bild zurück, wie in gezeigt gespeichert werden muss Abbildung 15.

Abbildung 15, speichern das bearbeitete Bild

private async void SaveImage_Click(object sender, RoutedEventArgs e) {
  SaveButton.IsEnabled = false;
  if (_tiltshiftEffect == null) {
    return;
  }
  var jpegRenderer = new JpegRenderer(_tiltshiftEffect);
  // JPEG renderer gives the raw buffer for the filtered image
  IBuffer jpegOutput = await jpegRenderer.RenderAsync();
  // Save the image as a JPEG to the saved pictures album
  MediaLibrary library = new MediaLibrary();
  string fileName = string.Format("TiltShiftImage_{0:G}", DateTime.Now);
  var picture = library.SavePicture(fileName, jpegOutput.AsStream());
  MessageBox.Show("Tilt Shift Image saved!");
  SaveButton.IsEnabled = true;
}

Und ich bin fertig. Sie ist inzwischen PureView erweiterte Kamera Aufnahme und Nachbearbeitung des Bildes mit dem Nokia Imaging SDK. Ich hoffe, Sie fanden diesen Artikel nützlich, und ich freuen uns auf Ihre Kommentare und Anregungen.

Rajesh Lal funktioniert bei Nokia und ist begeistert von Windows Phone und Web-Technologien. Sein neuestes Buch heißt "Digital Design Essentials: 100 Wege, um besser zu erstellen, Desktop, Web und Mobile Interfaces"(Rockport Publishers, 2013). Sie finden es unter bit.ly/dsgnbk. Informationen zum Autor finden Sie unter iRajLal.com.

Unser Dank gilt den folgenden technischen Experten für die Durchsicht dieses Artikels: Chevon Christie (Microsoft) und Abs. Wadehra (Nokia)