Skip to content

Image quality droped on patterns #361

Open
@DmitrijOkeanij

Description

@DmitrijOkeanij

Big upper part is not pattern rendered good precision and quality, back little pattern part bad quality, less presision.

2018-04-07_21-06-16

Here is my SVG

<svg viewBox="0 0 400 400" xmlns="http://www.w3.org/2000/svg">
    <defs>
        <symbol id="el1" width="50" height="50">
            <rect x="-5" y="-5" width="60" height="60">
            </rect>
            <line class="block" x1="-5" y1="-5" x2="55" y2="55" stroke="blue"></line>
            <rect x="-18" y="-18" width="36" height="36" transform="rotate(45)" fill="green"></rect>
            <circle cx="50" cy="50" r="26" fill="orange">
             </circle>
             <circle cx="50" cy="50" r="16" fill="olive">
            </circle>
        </symbol>
        <symbol id="big1" width="100" height="100" viewBox="-50 -50 100 100">
            <use width="50" height="50"  href="#el1" transform=""/>
            <use width="50" height="50"  href="#el1" transform="scale(-1,-1)"/>
            <use width="50" height="50" href="#el1" transform="scale(-1,1)"/>
            <use width="50" height="50" href="#el1" transform="scale(1,-1)"/>
        </symbol>
        <pattern id="pat1" width="70" height="70" viewBox="0 0 200 200" patternUnits="userSpaceOnUse">
            <use x="0" y="0" width="100"  height="100" href="#big1" fill="pink" />
            <use width="100" transform="translate(100,0)" height="100" href="#big1" fill="blue" />
            <use x="0" y="100" width="100" height="100" href="#big1" fill="#ecffad" />
            <use x="100" y="100" width="100" height="100" href="#big1" fill="#bbffad" />
        </pattern>
    </defs>
    <rect class="block" x="0" y="0" width="400" height="400" fill="url(#pat1)"></rect>
    <use x="120" y="120" width="100"  height="100" href="#big1" fill="red" />
</svg>

And render code

SvgDocument svgDoc = SvgDocument.Open("1.svg");
System.Drawing.Bitmap bm = svgDoc.Draw();

ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg);
System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
            
EncoderParameters myEncoderParameters = new EncoderParameters(1);
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 100l);
myEncoderParameters.Param[0] = myEncoderParameter;
            
svgDoc.ShapeRendering = SvgShapeRendering.GeometricPrecision;
            
svgDoc.Height = new SvgUnit(SvgUnitType.Pixel, 1200);
svgDoc.Width = new SvgUnit(SvgUnitType.Pixel, 1200);
            
bm = svgDoc.Draw();
bm.Save("rez.jpg", jgpEncoder,myEncoderParameters);
            
ImageCodecInfo GetEncoder(ImageFormat format)
{
       ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
       foreach (ImageCodecInfo codec in codecs)
        {
             if (codec.FormatID == format.Guid)
             {
                        return codec;
             }
         }
       return null;
}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions