Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#OpenXML插入图像质量差,图像模糊_C#_.net_Excel_Openxml_Xlsx - Fatal编程技术网

C#OpenXML插入图像质量差,图像模糊

C#OpenXML插入图像质量差,图像模糊,c#,.net,excel,openxml,xlsx,C#,.net,Excel,Openxml,Xlsx,它可以工作并以适当的大小插入图像,但图像质量比资源差(图像有点模糊,颜色差别也很小)。 我曾尝试从eXcel单元格复制/粘贴图像,它的大小与手动放置的大小相同 我已尝试将其转换为不同的值,但没有任何帮助: A.BlipCompressionValues.None 方法调用 MemoryStream imageLogoStream = new MemoryStream(); Properties.Resources.logo.Save(imageLogoStream, ImageFormat.J

它可以工作并以适当的大小插入图像,但图像质量比资源差(图像有点模糊,颜色差别也很小)。 我曾尝试从eXcel单元格复制/粘贴图像,它的大小与手动放置的大小相同

我已尝试将其转换为不同的值,但没有任何帮助:

A.BlipCompressionValues.None
方法调用

MemoryStream imageLogoStream = new MemoryStream();
Properties.Resources.logo.Save(imageLogoStream, ImageFormat.Jpeg);
AddImage(ws.WorksheetPart, "H27", imageMemoryStream, description);
下面是插入图像的代码

public bool AddImage(WorksheetPart worksheetPart, string addressName,
                    Stream imageStream, string imgDesc)
{
    UInt32 rowNumber = GetRowIndex(addressName);

    UInt32 colNumber = GetColumnIndex(addressName);

    // We need the image stream more than once, thus we create a memory copy
    MemoryStream imageMemStream = new MemoryStream();
    imageStream.Position = 0;
    imageStream.CopyTo(imageMemStream);
    imageStream.Position = 0;
    imageMemStream.Position = 0;

    var drawingsPart = worksheetPart.DrawingsPart;
    if (drawingsPart == null)
        drawingsPart = worksheetPart.AddNewPart<DrawingsPart>();

    if (!worksheetPart.Worksheet.ChildElements.OfType<Drawing>().Any())
    {
        worksheetPart.Worksheet.Append(new Drawing { Id = worksheetPart.GetIdOfPart(drawingsPart) });
    }

    if (drawingsPart.WorksheetDrawing == null)
    {
        drawingsPart.WorksheetDrawing = new Xdr.WorksheetDrawing();
    }

    var worksheetDrawing = drawingsPart.WorksheetDrawing;

    try
    {
        Bitmap bm = new Bitmap(imageMemStream);
        var imagePart = drawingsPart.AddImagePart(GetImagePartTypeByBitmap(bm));
        imageStream.Position = 0;
        imagePart.FeedData(imageStream);

        A.Extents extents = new A.Extents();
        var extentsCx = bm.Width * (long)(914400 / bm.HorizontalResolution);
        var extentsCy = bm.Height * (long)(914400 / bm.VerticalResolution);
        bm.Dispose();

        var colOffset = 0;
        var rowOffset = 0;

        var nvps = worksheetDrawing.Descendants<Xdr.NonVisualDrawingProperties>();
        var nvpId = nvps.Count() > 0
            ? (UInt32Value)worksheetDrawing.Descendants<Xdr.NonVisualDrawingProperties>().Max(p => p.Id.Value) + 1
            : 1U;

        var oneCellAnchor = new Xdr.OneCellAnchor(
            new Xdr.FromMarker
            {
                ColumnId = new Xdr.ColumnId((colNumber - 1).ToString()),
                RowId = new Xdr.RowId((rowNumber - 1).ToString()),
                ColumnOffset = new Xdr.ColumnOffset(colOffset.ToString()),
                RowOffset = new Xdr.RowOffset(rowOffset.ToString())
            },
            new Xdr.Extent { Cx = extentsCx, Cy = extentsCy },
            new Xdr.Picture(
                new Xdr.NonVisualPictureProperties(
                    new Xdr.NonVisualDrawingProperties { Id = nvpId, Name = "Picture " + nvpId, Description = imgDesc },
                    new Xdr.NonVisualPictureDrawingProperties(new A.PictureLocks { NoChangeAspect = true })
                ),
                new Xdr.BlipFill(
                    new A.Blip { Embed = drawingsPart.GetIdOfPart(imagePart), CompressionState = A.BlipCompressionValues.None },
                    new A.Stretch(new A.FillRectangle())
                ),
                new Xdr.ShapeProperties(
                    new A.Transform2D(
                        new A.Offset { X = 0, Y = -1 },
                        new A.Extents { Cx = extentsCx, Cy = extentsCy }
                    ),
                    new A.PresetGeometry { Preset = A.ShapeTypeValues.Rectangle }
                )
            ),
            new Xdr.ClientData()
        );

        worksheetDrawing.Append(oneCellAnchor);
        return true;
    }
    catch (Exception ex)
    {
        return false;
    }
}
public bool AddImage(工作表部分工作表部分,字符串地址名称,
流imageStream,字符串imgDesc)
{
UInt32 rowNumber=GetRowIndex(addressName);
UInt32 colNumber=GetColumnIndex(addressName);
//我们需要图像流不止一次,因此我们创建了一个内存拷贝
MemoryStream imageMemStream=新的MemoryStream();
imageStream.Position=0;
CopyTo(imageMemStream);
imageStream.Position=0;
imageMemStream.Position=0;
var drawingsPart=工作表部分drawingsPart;
如果(drawingsPart==null)
drawingsPart=工作表部件.AddNewPart();
如果(!worksheetPart.Worksheet.ChildElements.OfType().Any())
{
worksheetPart.Worksheet.Append(新图形{Id=worksheetPart.GetIdOfPart(drawingsPart)});
}
如果(drawingsPart.WorksheetDrawing==null)
{
drawingsPart.WorksheetDrawing=新建Xdr.WorksheetDrawing();
}
var worksheetDrawing=drawingsPart.worksheetDrawing;
尝试
{
位图bm=新位图(imageMemStream);
var imagePart=drawingsPart.AddImagePart(GetImagePartTypeByBitmap(bm));
imageStream.Position=0;
imagePart.FeedData(imageStream);
A.范围=新的A.范围();
var extentsCx=bm.宽度*(长)(914400/bm.水平分辨率);
var extentsCy=bm.高度*(长)(914400/bm.垂直分辨率);
bm.Dispose();
var-colOffset=0;
var-rowOffset=0;
var nvps=worksheetDrawing.subjects();
var nvpId=nvps.Count()>0
?(uint32值)工作表drawing.substands().Max(p=>p.Id.Value)+1
:1U;
var oneCellAnchor=new Xdr.oneCellAnchor(
新Xdr.FromMarker
{
ColumnId=新的Xdr.ColumnId((colNumber-1.ToString()),
RowId=new Xdr.RowId((rowNumber-1.ToString()),
ColumnOffset=新的Xdr.ColumnOffset(colOffset.ToString()),
RowOffset=新的Xdr.RowOffset(RowOffset.ToString())
},
新的Xdr.Extent{Cx=extentsCx,Cy=extentsCy},
新Xdr.Picture(
新Xdr.NonVisualPictureProperties(
新的Xdr.NonVisualDrawingProperties{Id=nvpId,Name=“Picture”+nvpId,Description=imgDesc},
新的Xdr.NonVisualPictureDrawingProperties(新的A.PictureLocks{NoChangeAspect=true})
),
新Xdr.BlipFill(
新的A.Blip{Embed=drawingsPart.GetIdOfPart(imagePart),CompressionState=A.BlipCompressionValues.None},
新建A.Stretch(新建A.FillRectangle())
),
新Xdr.ShapeProperties(
新A.2D(
新的A.偏移量{X=0,Y=-1},
新的A.extensts{Cx=extentsCx,Cy=extentsCy}
),
新建A.PresetGeometry{Preset=A.ShapeTypeValues.Rectangle}
)
),
新的Xdr.ClientData()
);
工作表Drawing.Append(oneCellAnchor);
返回true;
}
捕获(例外情况除外)
{
返回false;
}
}