Скопируйте растровое изображение в другое растровое изображение с помощью WPF - PullRequest
3 голосов
/ 07 ноября 2010

Мне нужно поместить растровое изображение в центр другого растрового изображения с WPF.

Мне удалось создать пустую картинку с нужными размерами, но я не понимаю, как скопировать в нее еще одну BitmapFrame.

BitmapSource bs = BitmapSource.Create(
    width, height,
    dpi, dpi,
    PixelFormats.Rgb24,
    null,
    bits,
    stride);

1 Ответ

7 голосов
/ 07 ноября 2010

Вы должны использовать WriteableBitmap для записи в буфер пикселей.Копирование из BitmapSource в массив с использованием BitmapSource.CopyPixels, затем копирование массива в WriteableBitmap с использованием WriteableBitmap.WritePixels.

Вот реализация с комментариями

XAML

<Image Name="sourceImage" Height="50"
       Source="/WpfApplication1;component/Images/Gravitar.bmp" />
<Image Name="targetImage" Height="50"/>

Код

// Quick and dirty, get the BitmapSource from an existing <Image> element
// in the XAML
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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...