2016-07-20 9 views
0

Ich habe ein Bild mit Pixelgröße 1024 (Breite) x 1024 (Höhe) Pixel. Nehmen wir an, der Benutzer möchte das Bild 2 Mal wiederholen, um ein anderes zu erstellen. Also, jetzt wären die Pixel 2048 x 2048. Ich bin in der Lage, die Pixel im Code zu bekommen, aber das Bild wird nicht voll angezeigt.Bild mit sich wiederholenden bestehenden Bild erstellen

Wie kann ich dies mit WPF und C# tun?

Weitere Szenarien auf die oben 1) Benutzer wollen nur Höhe wiederholen, nicht die Breite, dann würde Bild seines 1024 x 2048 2) Benutzer nur wiederholen wollen Breite 3-mal, dann würde Bild seines 3072 x 1024

+0

* aber das Bild wird nicht vollständig angezeigt. * Was meinst du damit? Auch, bitte zeigen Sie einige Code, wie es getan – lokusking

+0

@lokusking bedeutet, anstatt 1024 * 2048 Bild anzuzeigen, es zeigt nur 1024 * 1024 Bild nur. Klar, ich werde den Code posten. Bitte gib mir etwas Zeit. – Chatra

+0

Möchten Sie nur das "wiederholte" Bild anzeigen oder möchten Sie es auch speichern? Die Anzeige würde nur mit einem ImageBrush leicht erreicht werden. – Clemens

Antwort

1

Die einfache Art zu tun, was Sie wollen, ist ein Platzhalterbild mit der gewünschten Größe zu erstellen: zum Beispiel, wenn Sie ein Bild (Breite, Höhe) haben, können Sie erstellen (n * Breite, m * Höhe) und kopieren Sie dann die Pixel .

Wenn Sie es brauchen, sagen Sie mir, ich werde Ihnen mit etwas Code zur Verfügung stellen.

private static Bitmap ResizeBitmap(Bitmap sourceBMP, Int32 widthMultiplier, 
Int32 heightMultiplier) 
    { 
     var newWidth = sourceBMP.Width * widthMultiplier; 
     var newHeight = sourceBMP.Height * heightMultiplier; 
     var result = new Bitmap(newWidth, newHeight); 
     using (Graphics g = Graphics.FromImage(result)) 
      g.DrawImage(sourceBMP, 0, 0, newWidth, newHeight); 
     return result; 
    } 

    static void Main(string[] args) 
    { 
     var widthM = 2; 
     var heightM = 2; 

     var image = (Bitmap)Image.FromFile(@"E:\YOUR_IMAGE_HERE.png", true); 

     var newImage = ResizeBitmap(image, widthM, heightM); 
     for(var i=0; i<image.Width;++i) 
      for(var j=0; j<image.Height;++j) 
      { 
       var pixelToCopy = image.GetPixel(i, j); 
       for (var k = 0; k < widthM; ++k) 
        for (var l = 0; l < heightM; ++l) 
         newImage.SetPixel(k * image.Width + i, 
          l * image.Height + j, 
          pixelToCopy); 
      } 
     newImage.Save(@"E:\NEW_BIG_IMAGE_HERE.png", ImageFormat.Png); 
    } 
} 

GetPixel und SetPixel sind übrigens langsam. Sie können also wahrscheinlich unsicheren Code übernehmen und Loops damit neu schreiben. Siehe Beispiel unter MSDN

+0

Das ist genau, was ich denke. Können Sie mir bitte einen Code zur Verfügung stellen? – Chatra

+0

Sie können auch Pinsel verwenden (http://stackoverflow.com/questions/2675246/repeat-image-in-c-sharp), aber für Ihr Problem, handgeschriebenen Code und Pinsel werden auf die gleiche Weise handeln. –

+0

Yeap, warte eine Minute oder zwei) –

Verwandte Themen