Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Вставка изображений в Word из буфера


Автор: Frankyfrankly 7.6.2013, 21:59
С помощью нижеприведенного кода, я достаю изображение хранящееся в базе данных в поток, затем из потока я передаю в буфер обмена, и делаю вставку изображения в открытом Word документе:
Код

MemoryStream mss = new MemoryStream(pic.Where(p => p.idPicture == id).Select(p => p.picture).FirstOrDefault().ToArray());
Clipboard.SetImage(Image.FromStream(mss));
objWord.Selection.Paste();
mss.Dispose();

Но вот возникла небольшая проблемка, почему-то при вставке из буфера изображение стает сероватым:
user posted image
Оно должно быть на белом фоне.
Подскажите как решить эту проблему. Кому же нужны серые изображения в ворд-документе, жалко ведь краски в принтере. 

Автор: gambit 7.6.2013, 23:10
Сначала стоит сузить круг подозреваемых. Скопируйте в буфер картинку и кодом вставьте ее. Это поможет определить, косячит ли ворд.
В самом ворде смотрели? может он какой эффект накладывает

Автор: Frankyfrankly 8.6.2013, 01:17
gambit, та я уже так тоже пробовал. После програмы в ворде просто жму Ctrl+V, и вставляется серое изображение. Почему-то так только если с потока читать, если напрямую с ПикчаБоксо то норм.
Ну проблему я решил, может не самым лучшим способом но все же:
Можно так:
Код

MemoryStream mss = new MemoryStream(pic.Where(p => p.idPicture == id).Select(p => p.picture).FirstOrDefault().ToArray());
Clipboard.SetImage(Image.FromStream(mss));
objWord.Selection.Paste();
objWord.Selection.MoveLeft(Word.WdUnits.wdCharacter,1,Word.WdMovementType.wdExtend);                            
objWord.Selection.InlineShapes[1].PictureFormat.Contrast = 0.8f;                            
objWord.Selection.MoveRight(Word.WdUnits.wdCharacter, 1);
mss.Dispose();


То есть с помощью макроса выделяем влево один елемент, меняем контраст рисунка, и переводим курсор на однупозицию вправо.
А можно и так еще:
Код

MemoryStream mss = new MemoryStream(pic.Where(p => p.idPicture == id).Select(p => p.picture).FirstOrDefault().ToArray());
Clipboard.SetImage(Image.FromStream(mss));
objWord.Selection.Paste();
objWord.Selection.MoveLeft(Word.WdUnits.wdCharacter,1,Word.WdMovementType.wdExtend);                            
objWord.Selection.InlineShapes[1].PictureFormat.ColorType = Microsoft.Office.Core.MsoPictureColorType.msoPictureBlackAndWhite;
objWord.Selection.MoveRight(Word.WdUnits.wdCharacter, 1);
mss.Dispose();


Все почти тоже самое, но мы не изменяем контраст, а делаем рисунок ч/б. Ноправда для этого нужно подгрузить Reference "Microsoft Office 14.0 Object Library". как тут http://stackoverflow.com/questions/5932794/microsoft-office-core-reference-missing

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)