2015-10-26 4 views
2

Это мое исходное изображение, enter image description hereКак Зеркальное изображение

Я хочу, чтобы отразить его и он появится, как это, enter image description here

Я хочу, чтобы отразить мое изображение так, чтобы оригинал и зеркальное изображение появляется бок о бок. Единственное, что я не знаю, как расширить диапазон исходного изображения, чтобы добавить его зеркальное изображение прямо рядом с ним.

Использование моего кода (см. Ниже) Мне удалось создать зеркальное изображение, но я не могу сделать одновременно и оригинальные, и зеркальные отображения.

Мой код,

 int Height = TransformedPic.GetLength(0); 
     int Width = TransformedPic.GetLength(1); 

     for (int i = 0; i < Height/2; i++) 
     { 
      for (int j = 0; j < Width; j++) 
      { 
       var Temporary = TransformedPic[i, j]; 
       TransformedPic[i, j] = TransformedPic[Height - 1 - i, j]; 
       TransformedPic[Height - 1 - i, j] = Temporary; 
      } 
     } 

TransformedPic является переменной, в которой исходное изображение сохраняется под

ответ

2

Шаг 1: Зеркало изображения. Для этого примените отрицательную салотрансформацию. Как

new ScaleTransform() { ScaleX = -1 };

Затем объединить две стороны изображения бок. вы можете увидеть его здесь, как вы можете объединить Two images.

Вот еще один способ:

 //Get Your Image from Picturebox 
     Bitmap image1 = new Bitmap(pictureBox1.Image); 
     //Clone it to another bitmap 
     Bitmap image2 = (Bitmap)image1.Clone(); 
     //Mirroring 
     image2.RotateFlip(RotateFlipType.RotateNoneFlipX); 

     //Merge two images in bitmap image, 
     Bitmap bitmap = new Bitmap(image1.Width + image2.Width, Math.Max(image1.Height, image2.Height)); 
     using (Graphics g = Graphics.FromImage(bitmap)) 
     { 
      g.DrawImage(image1, 0, 0); 
      g.DrawImage(image2, image1.Width, 0); 
     } 
     //Show them in a picturebox 
     pictureBox2.Image = bitmap; 
1

Это, как это делается с BitMap, вы можете нарисовать изображение с графикой и перерисовки графического объекта с измененным.

public Bitmap MirrorImage(Bitmap source) 
    { 
     Bitmap mirrored = new Bitmap(source.Width, source.Height); 
     for(int i = 0; i < source.Height; i++) 
      for(int j = 0; j < source.Width; j++) 
       mirrored.SetPixel(i, j, source.GetPixel(source.Width - j - 1, i); 
     return mirrored; 
    } 
+1

Это выглядит очень медленно. –

+1

Если вам что-то нужно делать с прямыми манипуляциями с помощью 'LockBits()' – ja72

Смежные вопросы