2012-04-09 3 views
0

Я пытаюсь отобразить текст и изображение для записываемого растрового изображения, чтобы сделать 1 более крупное изображение, и этот метод работал в других местах для создания или обработки изображений, но для по какой-то причине этот экземпляр создает только черное изображение. Если я просто установил источник изображения в оригинальный WriteableBitmap, он будет отображаться просто отлично, но когда я вызываю SaveJpeg, а затем LoadJpeg, он отображается как черное изображение (и да, мне нужно вызвать SaveJpeg, так как это фактически передается до сервер). Ниже показано, как я пытаюсь сделать элементы:WriteableBitmap.SaveJpeg отображает черное изображение (WP7)

NoteViewModel note = Instance.Note; 
var grid = new Grid() 
{ 
    Height = 929, 
    Width = 929 
}; 
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(679) }); 
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Star) }); 
var noteText = new TextBlock() 
{ 
    Text = note.Text, 
    FontFamily = note.FontFamily, 
    Foreground = note.FontColor, 
    TextWrapping = System.Windows.TextWrapping.Wrap, 
    Width = 929, 
    Height = 679 
}; 
Grid.SetRow(noteText, 0); 
grid.Children.Add(noteText); 

WriteableBitmap sigImage = Instance.Signature.SignatureImage; 
var sig = new Image() 
{ 
    Source = sigImage, 
    Height = 250, 
    Width = (sigImage.PixelWidth/sigImage.PixelHeight) * 250, 
    Margin = new Thickness(929 - ((sigImage.PixelWidth/sigImage.PixelHeight) * 250), 0, 0, 0) 
}; 
Grid.SetRow(sig, 1); 
grid.Children.Add(sig); 

var messagePicture = new WriteableBitmap(grid, null); 

var stream = new MemoryStream(); 

messagePicture.SaveJpeg(stream, messagePicture.PixelWidth, messagePicture.PixelHeight, 0, 100); //Save to a temp stream 

stream.Position = 0; 

var test = new WriteableBitmap(929,929); //Load the picture back up to see it 
test.LoadJpeg(stream); 

img.Source = test; //Show the image on screen (img is an Image element) 
+0

Насколько велика (мудрость) - ваш jpg? Можете ли вы изменить качество от 100 до 95 и рассказать, все ли это происходит (только спрашивая, потому что я никогда не использую 100, всегда использую 95, и у меня есть аналогичный код во многих местах, работающий) –

+0

Это 929 x 929, и изменение качества не позволяет, Кажется, что-то исправить. – Daniel

ответ

1

Таким образом, очевидно WriteableBitmap будет оказывать прозрачный фон, как черные при вызове SaveJpeg, так что я решил это делает белый холст, а также, например, так:

var background = new Canvas() 
{ 
    Width = 929, 
    Height = 929, 
    Background = new SolidColorBrush(Colors.White) 
}; 

messagePicture.Render(background, new TranslateTransform()); 
+0

любая идея, как я могу добиться этого в WPF. –

Смежные вопросы