C# 图形对象生成空白图像

C# 图形对象生成空白图像,c#,asp.net,web-services,image-processing,gdi+,C#,Asp.net,Web Services,Image Processing,Gdi+,我正试图通过.NET4.5中的web服务绘制图像,以作为base64字符串返回。我可以加载自定义背景,但我需要在该背景上绘制文本。问题是,一旦我从图像->图形对象->图像开始,我就会得到一个空白的png。如果我通过服务返回原始srcImage(空白模板),一切都正常,但我的标签是空白的,因此我知道我的图形对象在某个地方一定有问题 我的代码是: var labelSize = new Size(400, 459); using (var srcImage = Image.FromF

我正试图通过.NET4.5中的web服务绘制图像,以作为base64字符串返回。我可以加载自定义背景,但我需要在该背景上绘制文本。问题是,一旦我从图像->图形对象->图像开始,我就会得到一个空白的png。如果我通过服务返回原始srcImage(空白模板),一切都正常,但我的标签是空白的,因此我知道我的图形对象在某个地方一定有问题

我的代码是:

    var labelSize = new Size(400, 459);
    using (var srcImage = Image.FromFile(HostingEnvironment.MapPath("~/images/labels/" + labelImageFilename))) {
        PixelFormat format = srcImage.PixelFormat;
        using (Bitmap newImage = new Bitmap(labelSize.Width, labelSize.Height, format))
        using (Graphics g = Graphics.FromImage(newImage)) {
            g.SmoothingMode = SmoothingMode.AntiAlias;
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            g.PixelOffsetMode = PixelOffsetMode.HighQuality;
            Rectangle srcRect = new Rectangle(0, 0, srcImage.Width, srcImage.Height);
            Rectangle destRect = new Rectangle(0,0, labelSize.Width, labelSize.Height);
            g.DrawImage(srcImage, destRect, srcRect, GraphicsUnit.Pixel);
            // draw other shapes etc

            g.FillRegion(Brushes.Blue,new Region(new Rectangle(0,0,200,200)));
            g.Clear(Color.Red);
            g.Flush();
            return new Bitmap(srcImage, labelSize.Width, labelSize.Height); // this works fine, but my image is just the standard background I'm using
            return new Bitmap(labelSize.Width, labelSize.Height, g); //  returns a blank image
        }
    }

没有绘制任何内容,模板背景(srcImage)和红色或蓝色矩形都没有绘制。

我认为您的图形对象似乎正在newImage上绘制,但您正在返回srcImage。如果要返回绘图结果,我认为需要返回newImage

尝试以下方法:

return new Bitmap(newImage, labelSize.Width, labelSize.Height);

我认为您的图形对象看起来是在newImage上绘制的,但您返回的是srcImage。如果您想返回绘图结果,我想您需要返回newImage?我不是100%确定,所以希望这是有帮助的。在左上方的一行中,显示对web服务的调用正在工作,这是第二行,也是最后一行,实际返回。尝试类似的操作:返回新位图(newImage,labelSize.Width,labelSize.Height);先生,你是一位学者和绅士。返回新位图(labelSize.Width,labelSize.Height,g)不起作用。根据MSDN,此构造函数将仅使用图形分辨率初始化位图,但不会将其内容保存到位图。您应该按照其他人的建议返回newImage对象。