Bagikan melalui


RenderTargetBitmap Kelas

Definisi

Mewakili sumber gambar yang dapat diisi dengan konten gabungan pohon visual XAML. Lihat untuk beberapa batasan penting di mana visual XAML dapat diambil dalam RenderTargetBitmap.

public ref class RenderTargetBitmap sealed : ImageSource
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class RenderTargetBitmap final : ImageSource
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class RenderTargetBitmap final : ImageSource
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class RenderTargetBitmap : ImageSource
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class RenderTargetBitmap : ImageSource
Public NotInheritable Class RenderTargetBitmap
Inherits ImageSource
Warisan
Object Platform::Object IInspectable DependencyObject ImageSource RenderTargetBitmap
Atribut

Persyaratan Windows

Rangkaian perangkat
Windows 10 (diperkenalkan dalam 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (diperkenalkan dalam v1.0)

Contoh

Kerangka kode dasar ini disesuaikan dari skenario pertama XAML dan kode render XAML ke sampel bitmap. Perhatikan bagaimana semua kode, bahkan konstruktor, berada dalam metode asinkron . Di sini ada penanganan aktivitas untuk tombol yang diklik pengguna untuk memulai permintaan penyajian.

<StackPanel> 
  <Button Content="Save as image source" Click="SaveImageSource_Click"/> 
...
  <Grid x:Name="RenderedGrid" Height="500"/>
  <!--user adds child-item content to this Grid using other code, not shown-->
...
  <Image x:Name="RenderedImage" Stretch="None"/>
  <!-- this Image has no Source yet, will be set by a RenderTargetBitmap.RenderAsync call --> 
</StackPanel> 
private async void SaveImageSource_Click(object sender, RoutedEventArgs e) 
{                        
...
    RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap(); 
    await renderTargetBitmap.RenderAsync(RenderedGrid, width, height); 
    RenderedImage.Source = renderTargetBitmap; 
}

Keterangan

Dengan menggunakan RenderTargetBitmap, Anda dapat menyelesaikan skenario seperti menerapkan efek gambar ke visual yang awalnya berasal dari komposisi UI XAML, menghasilkan gambar mini halaman anak untuk sistem navigasi, atau memungkinkan pengguna menyimpan bagian UI sebagai sumber gambar lalu berbagi gambar tersebut dengan aplikasi lain.

Karena RenderTargetBitmap adalah subkelas ImageSource, renderTargetBitmap dapat digunakan sebagai sumber gambar untuk elemen Gambar atau kuas ImageBrush .

Memanggil RenderAsync menyediakan sumber gambar yang berguna tetapi representasi buffer penuh dari konten penyajian tidak disalin dari memori video sampai aplikasi memanggil GetPixelsAsync. Lebih cepat untuk memanggil RenderAsync saja (tanpa memanggil GetPixelsAsync) dan menggunakan RenderTargetBitmap sebagai sumber Gambar atau ImageBrush jika aplikasi hanya berniat untuk menampilkan konten yang dirender dan tidak memerlukan data piksel. Anda mungkin memerlukan data piksel jika Ingin mengambil gambar untuk operasi DataTransferManager seperti pertukaran kontrak Berbagi, atau jika Anda ingin menerapkan efek pada gambar atau mentranskodekannya menggunakan API Windows.Graphics.Imaging.

API RenderTargetBitmap yang paling sering Anda gunakan adalah RenderAsync. Ada dua kelebihan beban dari metode ini: RenderAsync(UIElement) dan kelebihan beban lain di mana Anda dapat menentukan dimensi sumber gambar yang diinginkan agar berbeda dari ukuran alami pohon visual sumber. RenderAsync adalah metode asinkron berdasarkan desain, jadi tidak ada jaminan sinkronisasi bingkai yang tepat dengan sumber UI, tetapi cukup tepat waktu untuk sebagian besar skenario.

Objek RenderTargetBitmap biasanya tidak dideklarasikan dalam UI XAML, karena Anda perlu memanggil RenderAsync dalam kode sebelum Anda memiliki instans RenderTargetBitmap yang berguna dan diisi gambar untuk tujuan tampilan UI.

Untuk contoh kode lainnya menggunakan RenderTargetBitmap, lihat Render XAML ke sampel bitmap.

Konten RenderTargetBitmap dapat hilang dalam kasus yang jarang terjadi karena interaksi dengan sistem tingkat bawah lainnya, misalnya jika driver video diatur ulang sebagai bagian dari pemulihan (lihat Deteksi dan Pemulihan Batas Waktu (TDR)). Jika itu terjadi, peristiwa CompositionTarget.SurfaceContentsLost akan diaktifkan. Untuk mempertanggungjawabkan kasus ini dan kasus kehilangan info serupa, aplikasi harus mendengarkan peristiwa CompositionTarget.SurfaceContentsLost dan merender ulang konten RenderTargetBitmap dengan memanggil RenderAsync lagi.

Konten bitmap yang dirender dari RenderTargetBitmap tidak secara otomatis menskalakan ketika pengaturan DPI saat ini berubah. Aplikasi harus merender ulang konten RenderTargetBitmap saat pengaturan DPI tampilan saat ini berubah untuk memastikan bahwa konten vektor yang dirender tetap tawar. Misalnya, pengubahan ukuran dapat terjadi jika pengguna memindahkan aplikasi di antara dua monitor yang berjalan pada pengaturan DPI yang berbeda. Pertimbangkan untuk mendengarkan peristiwa DisplayInformation.DpiChanged untuk mendeteksi kasus ini.

Ukuran maksimum yang dirender dari pohon visual XAML dibatasi oleh dimensi maksimum tekstur Microsoft DirectX; untuk informasi selengkapnya lihat Batas Sumber Daya (Direct3D 11). Batas ini dapat bervariasi tergantung pada perangkat keras tempat aplikasi berjalan. Konten yang sangat besar yang melebihi batas ini mungkin diskalakan agar pas. Jika batas penskalan diterapkan dengan cara ini, ukuran yang dirender setelah penskalakan dapat dikueri menggunakan properti PixelWidth dan PixelHeight . Misalnya, pohon visual XAML 10000 kali 10000 piksel mungkin diskalakan ke 4096 sebesar 4096 piksel, contoh batas tertentu sebagaimana dipaksa oleh perangkat keras tempat aplikasi berjalan.

Visual XAML dan kemampuan pengambilan RenderTargetBitmap

Ada beberapa skenario untuk konten visual yang disusun XAML yang tidak dapat Anda ambil ke RenderTargetBitmap:

  • Konten yang ada di pohon tetapi dengan Visibilitas diatur ke Diciutkan tidak akan diambil.
  • Konten yang tidak terhubung langsung ke pohon visual XAML dan konten jendela utama tidak akan diambil. Ini termasuk konten Popup , yang dianggap seperti sub-jendela.
  • Konten yang tidak dapat diambil akan muncul sebagai kosong dalam gambar yang diambil, tetapi konten lain di pohon visual yang sama masih dapat ditangkap dan akan dirender (keberadaan konten yang tidak dapat diambil tidak akan membatalkan seluruh pengambilan komposisi XAML tersebut).
  • Konten yang ada di pohon visual XAML tetapi di luar layar dapat diambil, selama konten tersebut tidakDiciutkanVisibilitas = .

Konstruktor

RenderTargetBitmap()

Menginisialisasi instans baru kelas RenderTargetBitmap .

Properti

Dispatcher

Mendapatkan CoreDispatcher yang dikaitkan dengan objek ini. CoreDispatcher mewakili fasilitas yang dapat mengakses DependencyObject pada utas UI bahkan jika kode dimulai oleh utas non-UI.

(Diperoleh dari DependencyObject)
PixelHeight

Mendapatkan tinggi bitmap yang dirender dalam piksel.

PixelHeightProperty

Mengidentifikasi properti dependensi PixelHeight .

PixelWidth

Mendapatkan lebar bitmap yang dirender dalam piksel.

PixelWidthProperty

Mengidentifikasi properti dependensi PixelWidth .

Metode

ClearValue(DependencyProperty)

Menghapus nilai lokal properti dependensi.

(Diperoleh dari DependencyObject)
GetAnimationBaseValue(DependencyProperty)

Mengembalikan nilai dasar apa pun yang ditetapkan untuk properti dependensi, yang akan berlaku dalam kasus di mana animasi tidak aktif.

(Diperoleh dari DependencyObject)
GetPixelsAsync()

Mengambil gambar RenderTargetBitmap yang dirender sebelumnya sebagai aliran byte yang di-buffer di BGRA8, format alfa yang telah di-premultip .

GetValue(DependencyProperty)

Mengembalikan nilai efektif properti dependensi saat ini dari DependencyObject.

(Diperoleh dari DependencyObject)
ReadLocalValue(DependencyProperty)

Mengembalikan nilai lokal properti dependensi, jika nilai lokal ditetapkan.

(Diperoleh dari DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

Mendaftarkan fungsi pemberitahuan untuk mendengarkan perubahan pada DependencyProperty tertentu pada instans DependencyObject ini.

(Diperoleh dari DependencyObject)
RenderAsync(UIElement)

Merender rekam jepret pohon visual UIElement ke sumber gambar.

RenderAsync(UIElement, Int32, Int32)

Merender rekam jepret pohon visual UIElement ke sumber gambar. Tentukan nilai untuk scaledWidth dan scaledHeight untuk mengubah dimensi penyajian sumber asli.

SetValue(DependencyProperty, Object)

Mengatur nilai lokal properti dependensi pada DependencyObject.

(Diperoleh dari DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

Membatalkan pemberitahuan perubahan yang sebelumnya terdaftar dengan memanggil RegisterPropertyChangedCallback.

(Diperoleh dari DependencyObject)

Berlaku untuk

Lihat juga