我需要使用WPF将位图放入另一个位图的中心。
我设法创建了一张包含我想要的尺寸的空白图片,但我不明白如何将另一个BitmapFrame
复制到其中。
BitmapSource bs = BitmapSource.Create(
width, height,
dpi, dpi,
PixelFormats.Rgb24,
null,
bits,
stride);
答案 0 :(得分:7)
您应该使用WriteableBitmap来写入Pixel缓冲区。使用BitmapSource.CopyPixels从BitmapSource复制到数组,然后使用WriteableBitmap.WritePixels将数组复制到WriteableBitmap。
这是一个评论的实现
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;