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

に変換する必要はありませんInteropBitmap....BitmapImageですので、コントロールImageSourceの として設定できます。SourceImage

itemtemplateListBoxでは、" " を使用するだけです{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> 

ただし、上記がまだ適切でない場合...たとえば、より低い解像度 (つまり、サムネイル サイズ) に変換して「ビットマップ」のメモリ フットプリントを削減しようとしている場合は、"データをストリーミング」して、WPF ベースの BitmapImage で「読み取る」ことができるようにします。

基になる Hbitmap にアクセスできる場合は、使用できる可能性がありますCreateBitmapSourceFromHBitmap(たとえば、WPF/.Net 呼び出しの代わりに WIN32 呼び出しを使用してクリップボードにアクセスすることにより)。

于 2012-10-17T12:38:51.543 に答える