Pull to refresh

Comments 30

UFO just landed and posted this here
Ссылка на pastebin или аналогичный сервис? Можно даже через API подвязать чтобы автогенерировалось.
А было бы не плохо, если бы пастебин мог давать код, как например ютуб дает, чтобы втроить на свой сайт.
Например <script type=«text/javascript» src=«pastebin.com/code.js?id=xxx»></sript>
И кто же вам даст внешний скрипт встроить в свою страницу… Вдруг вы им потом куки будете тырить
UFO just landed and posted this here
Отчасти может это потому, что использовался не Consolas а другой шрифт, у которого нет хинтинга.
У вас на третьем code snippet`e подсветка после символьного литерала поехала в отпуск.
UFO just landed and posted this here
Конечно, сам пишу на Consolas. Зато для печати он не подходит :)
1) Опечатка в ссылке
2) Странная формулировка заголовка. Я не понял, о чём статья, пока не дочитал до второго абзаца :(
UFO just landed and posted this here
Кстати да… что-то я как-то об этом толком не подумал. Надо будет сделать!
А если читатель захочет увеличить масштаб страницы, то пускай смотрит на размытые шрифты, сам виноват, да?
Что-то вроде того. Есть правда вариант делать все это в SVG или там Flash, но это не к селу не к городу, и на Хабр такое не запостить.
А почему бы не использовать RenderTargetBitmap, для растеризации контролов WPF? Для большей гибкости можно работать с объектами DrawingVisual и отрисовывать текст через DrawingContext.DrawText().
Я этим раньше баловался, но качество отрисовки текста у WPF просто убого было. Как сейчас – не знаю, да и не волнует особо – доверие уже потеряно. Вот, нашел кусочек кода который делал заголовки через WPF – их приходилось потом постпроцессировать чтобы они нормально выглядели

internal static Bitmap CreateHeading(string text, ConversionOptions options)
{
  if (string.IsNullOrEmpty(text))
    text = "Test string";
  Run run2 = new Run
   {
     FontFamily = new FontFamily(options.ImageHeadingFontFamily),
     FontSize = options.ImageHeadingFontSizePrimary,
     FontStyle = FontStyles.Normal,
     Text = text,
     Foreground = new SolidColorBrush(options.ImageHeadingForegroundColor),
   };
  if (options.ImageHeadingItalic) run2.FontStyle = FontStyles.Italic;
  Run item = run2;
  Paragraph paragraph2 = new Paragraph {TextAlignment = TextAlignment.Left};
  Paragraph paragraph = paragraph2;
  paragraph.Inlines.Add(item);
  var document = new FlowDocument();
  document.Blocks.Add(paragraph);
  document.SetValue(RenderOptions.EdgeModeProperty, EdgeMode.Aliased);
  document.PageHeight = 100.0;
  document.PageWidth = document.ColumnWidth = 2400.0;
  DocumentPaginator documentPaginator = ((IDocumentPaginatorSource)document).DocumentPaginator;
  documentPaginator.PageSize = new Size(documentPaginator.PageSize.Width * 3.0, 100.0);
  var visual = new ContainerVisual {Transform = new ScaleTransform(3.0, 1.0)};
  visual.Children.Add(documentPaginator.GetPage(0).Visual);
  var source = new RenderTargetBitmap(0x960, 100, 72.0, 72.0, PixelFormats.Pbgra32);
  source.Render(visual);
  var encoder = new PngBitmapEncoder();
  encoder.Frames.Add(BitmapFrame.Create(source));
  Bitmap bitmap2;
  using (var stream = new MemoryStream())
  {
    encoder.Save(stream);
    bitmap2 = new Bitmap(stream);
  }
  using (var bitmap3 = FastCoalesce(bitmap2))
  using (var bitmap4 = new Bitmap(bitmap3.Width / 3, bitmap3.Height))
  {
    FastFold(bitmap3, bitmap4);
    bitmap2.Dispose();
    return Crop(bitmap4);
  }
}
у меня тоже первой идеей было предложить WPF, с ним будет проще, да и в WPF 4 уже все пофикшено с текстом. Сэкономило бы много времени такое решение.

А в целом — текст в картинках — бэээ…
Вот так выглядит лучше чем у вас в топике :) Ей богу!
В WPF отрисовка текста на экране заметно улучшилась. Но это на экране. Я тут поэкспериментировал и вот, что получилось. Consolas, 12pt.

WPF 3.5, 96dpi:

WPF 4, 96dpi:

WPF 3.5, 72dpi:

WPF 4, 72dpi:
Эх, первые две местами перепутал. Та, что пожирнее — WPF 4.
Спасибо за ссылку. У меня все стояло по умолчанию. Следовательно TextFormatitingMode=Ideal, ClearTypeHint=Auto.

По умолчанию:

TextFormattingMode=Display:

TextFormattingMode=Display, ClearTypeHint=Enabled:

Получается, что можно добиться практически идеального результата.
я про это и говорю, с WPF вроде как решить данную задачу проще, но об этом Дмитрию судить.
не, на dwrite/c++ все очено просто. в wpf намного больше проблем и очень нестабильные результаты.
Все некачественно, увы. Хотя… интересно, как мой растеризатор это делает?

Черт, второй на самом деле Inconsolata :)
Вот лучший результат, которого я смог добиться:

Sign up to leave a comment.

Articles