C#/VB.NET: как улучшить качество сглаживания
Вопрос:
В Reporting Service мне нужно иметь вертикальный текст, начиная снизу, снизу вверх, горизонтально выровненный текст.
Единственный способ сделать это - создать изображение в коде и установить это изображение в столбце заголовка.
Смотрите код ниже.
В принципе, все работает отлично, просто качество сглаживания довольно дрянное.
Что я могу сделать, чтобы улучшить это?
Смотрите скриншот ниже:
Вертикальный текст почему-то бледный, а не полный черный,
а также там размазать весь текст, в цвет фона. Кроме того, он выглядит жирнее, чем текст слева, но оба имеют формат arial, размер 8, жирный
Я перепробовал все другие значения
System.Drawing.Text.TextRenderingHint. *, А также отсутствие сглаживания вообще.
но текущий кажется наименее дерьмовым. Я также попытался изменить формат изображения, но безрезультатно:
Function LoadImage2(ByVal sImageText As String, ByVal sImageTextMax As String) As System.Drawing.Image
sImageTextMax = sImageTextMax.PadRight(15)
Dim iFontSize As Integer = 8 '//Change this as needed
Dim bmpImage As New System.Drawing.Bitmap(1, 1)
Dim iWidth As Integer = 0
Dim iHeight As Integer = 0
Dim bgColor As System.Drawing.Color = System.Drawing.Color.LemonChiffon ' LightGray
Dim TextColor As System.Drawing.Color = System.Drawing.Color.Black
Dim fsFontStyle As System.Drawing.FontStyle = System.Drawing.FontStyle.Bold
'// Create the Font object for the image text drawing.
Dim MyFont As New System.Drawing.Font("Arial", iFontSize, fsFontStyle, System.Drawing.GraphicsUnit.Point)
'// Create a graphics object to measure the text's width and height.
'Graphics(MyGraphics = Graphics.FromImage(bmpImage))
Dim MyGraphics As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(bmpImage)
'// This is where the bitmap size is determined.
iWidth = MyGraphics.MeasureString(sImageTextMax, MyFont).Width
iHeight = MyGraphics.MeasureString(sImageTextMax, MyFont).Height
'// Create the bmpImage again with the correct size for the text and font.
'bmpImage = New Drawing.Bitmap(bmpImage, New Drawing.Size(iWidth, iHeight))
'inches = pixels / dpi
'pixel = inches * dpi
'1 centimeter = 0.393700787 inch
'pixel = cm * 0.393700787 * dpi
' vice-versa, because 270° turn
iHeight = 1 * 0.393700787 * bmpImage.HorizontalResolution 'x DPI
iWidth = 2.25 * 0.393700787 * bmpImage.VerticalResolution 'y DPI
bmpImage = New System.Drawing.Bitmap(bmpImage, New System.Drawing.Size(iHeight, iWidth))
'// Add the colors to the new bitmap.
MyGraphics = System.Drawing.Graphics.FromImage(bmpImage)
MyGraphics.Clear(bgColor)
MyGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias
MyGraphics.TranslateTransform(0, iWidth)
MyGraphics.RotateTransform(270)
Dim iTextStartX As Single = 2
Dim iTextStartY As Single = CSng(iHeight) / CSng(2.0) - CSng(iFontSize) / CSng(2.0)
iTextStartY -= 2
MyGraphics.DrawString(sImageText, MyFont, New System.Drawing.SolidBrush(TextColor), iTextStartX, iTextStartY)
MyGraphics.Flush()
Return bmpImage
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.PictureBox1.Image = LoadImage2("test", "")
End Sub
' This piece is only needed in reporting service itselfs
Function LoadImage(ByVal strText As String) As Byte()
Dim ThisImageFormat As System.Drawing.Imaging.ImageFormat = System.Drawing.Imaging.ImageFormat.Jpeg
Dim stream As System.IO.MemoryStream = New System.IO.MemoryStream
Dim bitmapBytes As Byte()
Dim bmpImage As System.Drawing.Image = LoadImage2(strText, "")
bmpImage.Save(stream, ThisImageFormat)
bitmapBytes = stream.ToArray
stream.Close()
bmpImage.Dispose()
Return bitmapBytes
End Function
3 ответа
У меня была эта проблема, но только в определенных браузерах. Я думаю, что это проблема браузера (IE). Firefox и Chrome вроде бы в порядке.
В конце концов я решил вручную строить свои отчеты в формате html и использовал HighCharts для графики. Затем я перевел все это в PDF, используя wkHTMLtoPDF
Его объединяются довольно хорошо, и проблемы с псевдонимами ушли. Я думаю, что вы можете застрять с этими проблемами в службах отчетов SQL.
Единственный способ сделать это - создать изображение в коде и установить это изображение в столбце заголовка.
Если вы используете SQL Server Reporting Services 2008 R2, вам не нужно создавать изображение: выделите текстовое поле и установите следующие свойства:
TextAlign: Left
VerticalAlign: Middle
WritingMode: Rotate 270
Четкий чистый текст, визуализированный со стилями.
Единственный способ сделать это - создать изображение в коде и установить это изображение в столбце заголовка.
Если вы визуализируете это в браузере, это не правда, что изображение - единственный путь. Вы можете вращать текст с помощью CSS, и он отлично смотрится в хороших браузерах и может быть пропущен в IE < 9.
Конечно, вы упомянули PDF, и в этом случае CSS-трюки явно не будут применяться. Просто не ясно из вопроса, во что именно встроено изображение, которое вы генерируете.