WPF BitmapSource 创建指定uri路径
时间: 2023-12-03 13:42:56 浏览: 156
你可以使用以下代码来创建指定 URI 路径的 `BitmapSource`:
```csharp
Uri uri = new Uri("your image uri here");
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.UriSource = uri;
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.EndInit();
BitmapSource bitmapSource = bitmap as BitmapSource;
```
在这个代码中,我们首先创建一个 `Uri` 对象,该对象指定了图像文件的路径。然后,我们使用 `BitmapImage` 类加载图像文件,并将 `Uri` 路径指定为 `UriSource` 属性的值。我们还将 `CacheOption` 属性设置为 `BitmapCacheOption.OnLoad`,以确保图像在加载时立即缓存。
最后,我们将 `BitmapImage` 对象转换为 `BitmapSource` 对象,以便在 WPF 应用程序中使用。
相关问题
WPF 两个BitmapSource合成
可以使用DrawingVisual和RenderTargetBitmap类来合成两个BitmapSource。
首先,创建两个BitmapSource对象,分别表示要合成的两张图片。然后,创建一个DrawingVisual对象,并在其中绘制这两张图片。最后,使用RenderTargetBitmap类将DrawingVisual对象渲染成一个新的BitmapSource对象,该对象即为合成后的图片。
以下是示例代码:
``` csharp
// 创建两个BitmapSource对象
BitmapImage image1 = new BitmapImage(new Uri("path/to/image1.png"));
BitmapImage image2 = new BitmapImage(new Uri("path/to/image2.png"));
// 创建DrawingVisual对象并绘制图片
DrawingVisual visual = new DrawingVisual();
using (DrawingContext context = visual.RenderOpen())
{
context.DrawImage(image1, new Rect(0, 0, image1.PixelWidth, image1.PixelHeight));
context.DrawImage(image2, new Rect(0, image1.PixelHeight, image2.PixelWidth, image2.PixelHeight));
}
// 使用RenderTargetBitmap类将DrawingVisual对象渲染成新的BitmapSource对象
RenderTargetBitmap renderBitmap = new RenderTargetBitmap(image1.PixelWidth, image1.PixelHeight + image2.PixelHeight, image1.DpiX, image1.DpiY, PixelFormats.Default);
renderBitmap.Render(visual);
// 合成后的图片即为renderBitmap对象
```
注意,上述代码中合成后的图片大小为第一张图片的宽度和高度加上第二张图片的高度。如果第二张图片的宽度大于第一张图片的宽度,需要将RenderTargetBitmap对象的宽度设置为第二张图片的宽度。
BitmapSource.Create
BitmapSource.Create 是Windows Presentation Foundation (WPF) 中的一个静态方法,用于从各种源创建位图图像数据。这个方法允许开发者动态生成或转换图像内容,而不必预先加载整个图片到内存中。它接受几个关键参数,如宽度、高度、颜色格式以及来自源的数据,例如Uri、Stream、ImageSource等。
举个例子,你可以这样做:
```csharp
using System.IO;
using System.Windows.Media;
// 创建一个位图源,从本地文件系统读取图片
var bitmapSource = BitmapSource.Create(
width, // 图像宽度
height, // 图像高度
96, // 分辨率,通常设置为DPI
96, // 分辨率,通常与分辨率一致
PixelFormats.Bgra32, // 颜色格式
null, // 如果是从流获取数据,这里可以传递一个IMemoryStream
File.OpenRead("path_to_your_image.jpg") // 从文件路径获取字节流
);
```
阅读全文