none
Problem mit WriteableBitmap.WritePixels RRS feed

  • Frage

  • Hallo,

    ich möchte mithilfe von WriteableBitmap.WritePixels ein BitmapImage in eine WriteableBitmap zeichnen, die dann in einem Image-Steuerelement angezeigt wird. Dazu verwende ich folgenden Code:

    Int32Rect rect = new Int32Rect(100, 100, 32, 32);
                    int stride = bitmapImage.PixelWidth * 4;
                    int size = bitmapImage.PixelHeight * stride;
                    byte[] pixels = new byte[size];
                    bitmapImage.CopyPixels(pixels, stride, 0);
                    writeableBitmap.WritePixels(rect, pixels, stride, 0); 

    Das BitmapImage hat ebenfalls eine PixelWidth und PixelHeight von 32 und 96dpi. Trotzdem ist das in der WriteableBitmap gezeichnete Bild nicht 32x32 Pixel groß, sondern um die 50x50 Pixel. 

    Woran kann diese falsche Größe liegen?

    Danke für jede Hilfe.

    Dienstag, 9. Juli 2013 08:59

Alle Antworten

  • Hallo Moduel,

    Vesuch diese Beispiel

    BitmapSource source = sourceImage.Source as BitmapSource;
    
        // Calculate stride of source
        int stride = source.PixelWidth * (source.Format.BitsPerPixel / 8);
    
        // Create data array to hold source pixel data
        byte[] data = new byte[stride * source.PixelHeight];
    
        // Copy source image pixels to the data array
        source.CopyPixels(data, stride, 0);
    
        // Create WriteableBitmap to copy the pixel data to.      
        WriteableBitmap target = new WriteableBitmap(
          source.PixelWidth, 
          source.PixelHeight, 
          source.DpiX, source.DpiY, 
          source.Format, null);
    
        // Write the pixel data to the WriteableBitmap.
        target.WritePixels(
          new Int32Rect(0, 0, source.PixelWidth, source.PixelHeight), 
          data, stride, 0);
    
        // Set the WriteableBitmap as the source for the <Image> element 
        // in XAML so you can see the result of the copy
        targetImage.Source = target;

    Gruss,

    Ionut

    Mittwoch, 10. Juli 2013 11:59
    Moderator
  • Hallo Ionut,

    die WriteableBitmap soll eine Art Leinwand darstellen und das BitmapImage soll später aus einem beliebigen Bild geladen werden können, daher also möglichst unabhängig von der DPI-Zahl sein. Gibt es eine Möglichkeit, dies umzusetzen?

    PS: Ich habe testweise das BitmapImage direkt im Image-Steuerelement angezeigt und den TileMode auf "Tile" gesetzt, sowie den Viewport auf 32x32 Pixel festgelegt. Hier wird die Kachel mit der richtigen Größe angezeigt.

    Mittwoch, 10. Juli 2013 22:34