1

我在剪贴板(位图)中有一个图像,我从剪贴板中提取如下

     datObj = Clipboard.GetDataObject();  
     InteropBitmap pdfBitmap = datObj.GetData(DataFormats.Bitmap) as InteropBitmap;    

如何让这个 pdfBitmap 显示在 WPF 列表框中。THw WpfListBox 看起来如此..

 <ListBox ItemsSource="{Binding Path=Pages}">
   <ListBox.ItemTemplate>
        <DataTemplate>
            <Image Margin="10" Source="{Binding Path=UriSource}"></Image>               
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>     

并且绑定是

private ObservableCollection<BitmapImage> pages = new ObservableCollection<BitmapImage>();

我想首先缩放 interopbitmap (类似于 getthumbnailimage() 的东西),然后我需要以某种方式将 interopbitmap 变成 BitmapImage 。
谢谢

4

1 回答 1

0

无需转换InteropBitmapBitmapImage....it 是ImageSource,因此可以设置为Source控件的Image

在您的ListBox项目模板中,您只需使用“ {Binding}”。

然后,您可以通过在图像上定义宽度和高度来“缩放”位图。

(我假设您有一个Pages用于访问该pages字段的属性)

private ObservableCollection<ImageSource> pages = new ObservableCollection<ImageSource>();

 <ListBox ItemsSource="{Binding Path=Pages}">
   <ListBox.ItemTemplate>
        <DataTemplate>
            <Image Margin="10" Source="{Binding}"></Image>               
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox> 

但是,如果上述方法仍然不合适...例如,如果您试图通过转换为较低的分辨率(即缩略图大小)来减少“位图”的内存占用,那么您可以通过“从 InteropBitmap 转换为 BitmapImage”流式传输”数据,因此它可以被基于 WPF 的 BitmapImage “读取”。

如果您可以访问底层 Hbitmap,那么您也许可以使用CreateBitmapSourceFromHBitmap(例如,通过使用 WIN32 调用而不是 WPF/.Net 调用访问剪贴板)。

于 2012-10-17T12:38:51.543 回答