Наложение двух изображений разных типов - PullRequest
1 голос
/ 01 августа 2011

Мне нужно наложить следующие изображения:

  1. System.Windows.Controls.Image image1
  2. System.Drawing.Bitmap image2;

Мне нужен вывод типа System.Windows.Media.ImageSource.

Я подумал о следующем способе: преобразовать изображение2 в Bitmap и наложить два изображения, используя System.Drawing.Graphics, но я не знаю, как преобразовать изображение2.

1 Ответ

1 голос
/ 02 августа 2011

Один вариант - наложение двух элементов в сетке, как предложено выше, а затем использование этой техники для визуализации элемента управления в файл растрового изображения.

В качестве альтернативы, вы можете преобразовать оба файла врастровое изображение и зациклите их, используя следующий код (этот код объединяет изображения путем наложения растрового изображения2 на растровое изображение1, предполагая, что любые значения белого цвета в растровом изображении являются значениями прозрачности - вы можете изменить это условие смешивания, изменив одну строку):

Bitmap bitmap1;
Bitmap bitmap2;
Bitmap result;
for(int x = 0; x<bitmap1.Width;x++)
{
    for(int y=0; y<bitmap1.Height;y++)
    {
        //condition for choosing which pixel to pick - based on how you want to overlay them (this code assumes white is transparent)
        if(bitmap2.GetPixel(x,y) == Colors.White)
        {
            result.SetPixel(x,y) = bitmap.GetPixel(x,y);
        }
        else
        {
            result.SetPixel(x,y) = bitmap2.GetPixel(x,y);
        }
    }
}

Это даст вам растровый результат, который вы затем сможете делать с любым, что захотите.

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

Второй вариант дает вам гораздо больший контроль над тем, как комбинируются изображения, но потенциально медленнее.

...