1

Я пытаюсь сохранить страницы PdfDocument на диск в виде набора BitmapImage, для которого я использую расширения, предоставляемые WinRTXamlToolkit.Не удается сохранить PdfPage как BitmapImage на диск

PdfPage page = pdfd.GetPage(0); // pdfd is a loaded PdfDocument 
InMemoryRandomAccessStream str=new InMemoryRandomAccessStream(); 
await page.RenderToStreamAsync(str); 
BitmapImage bmp = new BitmapImage(); 
await bmp.SetSourceAsync(str); 

WriteableBitmap wb = await WriteableBitmapFromBitmapImageExtension.FromBitmapImage(bmp); 

StorageFolder sfo; 
sfo = await KnownFolders.DocumentsLibrary.CreateFolderAsync("PDFasBMP", CreationCollisionOption.OpenIfExists); 

await WriteableBitmapSaveExtensions.SaveToFile(wb,sfo,"Yahooo.bmp"); 

Выход «Yahooo.bmp» является нечитаемым 58-байтным файлом. Что мне не хватает? Проблема не имеет ничего общего с WinRTXamlToolkit, поскольку когда BitmapImage установлен на изображение в Интернете, оно сохраняется на диске должным образом, поэтому проблема заключается в том, как работает PdfPage.

ответ

2

Пропустить BitmapImage и загрузить PDF непосредственно в WriteableBitmap:

WriteableBitmap wb = new WriteableBitmap(1,1); 
await wb.SetSourceAsync(str); 

Это невозможно извлечь пиксели в BitmapImage, так WriteableBitmapFromBitmapImageExtension.FromBitmapImage имеет должен получить данные из других: он работает, когда BitmapImage загружается из Интернета, так как FromBitmapImage может получить UriSource BitmapImage и загрузить этот URI в WriteableBitmap.

+0

Компилятор говорит, что 'WriteableBitmap' не имеет конструктора, который принимает 0 аргументов. Похоже, что нужно, чтобы пиксель ширины и пиксельHeight указывались при создании, что неизвестно. –

+0

Вы можете создать его с любым размером. SetSourceAsync сбросит размер, соответствующий исходному потоку. –