C # / VB.NET: как улучшить качество сглаживания - PullRequest
2 голосов
/ 16 августа 2011

Вопрос:В службе отчетов мне нужно иметь вертикальный текст, начинающийся снизу, снизу вверх, горизонтально выровненный по центру текст.

Единственный способ сделать это - создать изображение в коде и установить это изображение.в заголовок столбца.

См. код ниже.В принципе, все работает отлично, просто качество сглаживания довольно дрянное.Что я могу сделать, чтобы улучшить это?Смотрите скриншот ниже:

SSRS Problem

Вертикальный текст почему-то бледный, а не полный черный,а также там размазать весь текст, в цвет фона.Кроме того, он выглядит жирнее, чем текст слева, но оба имеют формат 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 ]

1 голос
/ 17 августа 2011

Единственный способ сделать это - создать изображение в коде и установить это изображение в столбце заголовка.

Если вы используете SQL Server Reporting Services 2008 R2, вы делаетене нужно создавать изображение: выделите текстовое поле и установите следующие свойства:

TextAlign: Left
VerticalAlign: Middle
WritingMode: Rotate 270

Четкий чистый текст, визуализированный со стилями.

1 голос
/ 16 августа 2011

У меня была эта проблема, но только в определенных браузерах.Я думаю, что это проблема браузера (IE).Firefox и Chrome вроде бы в порядке.

В конце концов я решил вручную строить свои отчеты в формате html и использовал HighCharts для графики.Затем я перевел все это в PDF, используя wkHTMLtoPDF

Все это довольно хорошо собралось, и проблемы с псевдонимами исчезли.Я думаю, что вы можете застрять с этими проблемами в службах отчетов SQL.

0 голосов
/ 17 августа 2011

Единственный способ сделать это - создать изображение в коде и установить это изображение в столбце заголовка.

Если вы отображаете это в браузере, это не так.правда, что изображение - единственный путь.Вы можете вращать текст с помощью CSS , и он хорошо смотрится в хороших браузерах и может быть пропущен в IE <9. </p>

Конечно, вы упомянули PDF, в этом случае CSS-трюки явно не будутт применяется.Просто неясно из вопроса, во что именно встроено изображение, которое вы генерируете.

...