2016-07-20 12 views
0

ピクセルサイズ1024(幅)×1024(高さ)ピクセルのイメージがあります。ユーザーがその画像を2回繰り返して別の画像を作成したいとします。したがって、ピクセルは2048 x 2048になります。コードでピクセルを取得することはできますが、イメージは完全に表示されません。既存のイメージを繰り返してイメージを作成する

WPFとC#を使用してこれを行うにはどうすればよいですか?

詳細シナリオ1上記 に)ユーザは、幅のみを3回繰り返したい場合、画像は×1024 3072

であろう)、次いで画像は×2048 1024 2なり、ない幅、高さのみを繰り返したいです
+0

※画像は表示されません。*それはどういう意味ですか?また、いくつかのコードを表示してください。 – lokusking

+0

@lokuskingは、1024 * 2048イメージを表示するのではなく、1024 * 1024イメージのみを表示しています。確かに、コードを投稿します。しばらくお待ちください。 – Chatra

+0

「繰り返し」画像のみを表示したいのですか、保存しますか?表示は、ImageBrushで簡単に実現できます。 – Clemens

答えて

1

希望のサイズのプレースホルダ画像を作成するのが簡単な方法です。例えば、画像(幅、高さ)がある場合は、(n *幅、m *高さ)を作成してから、 。

必要な場合は、私はいくつかのコードを提供します。

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とSetPixelは途中で遅いです。だから、恐らく安全でないコードを採用し、ループを書き直すことができます。例:MSDN

+0

これはまさに私が考えていることです。私にいくつかのコードを教えてください。 – Chatra

+0

また、ブラシ(http://stackoverflow.com/questions/2675246/repeat-image-in-c-sharp)を使用することもできますが、問題のために手書きのコードとブラシが同じように動作します。 –

+0

Yeap、1,2分待つ) –

関連する問題