C#:尝试向图像添加缩略图符号时,结果不同

C#:尝试向图像添加缩略图符号时,结果不同,c#,asp.net,image-processing,image-resizing,C#,Asp.net,Image Processing,Image Resizing,我正在自动调整ASP.NET应用程序中的图像大小,以便创建该图像的低分辨率缩略图。此代码运行良好。调整大小后,我尝试向该图像添加一个“缩略图”,例如一个小放大镜或加号,但结果会因图像大小而异 请注意:原始图像的大小仅调整到一定的宽度,因此图像的高度不同 我的代码如下所示: private static byte[] InsertThumbnailSign(byte[] imageBuffer, string signPath) { byte[] output = null; Me

我正在自动调整ASP.NET应用程序中的图像大小,以便创建该图像的低分辨率缩略图。此代码运行良好。调整大小后,我尝试向该图像添加一个“缩略图”,例如一个小放大镜或加号,但结果会因图像大小而异

请注意:原始图像的大小仅调整到一定的宽度,因此图像的高度不同

我的代码如下所示:

private static byte[] InsertThumbnailSign(byte[] imageBuffer, string signPath)
{
    byte[] output = null;
    MemoryStream stream = new MemoryStream(imageBuffer);
    Image image = Image.FromStream(stream);

    // Add the thumbnail-sign
    Image thumbNailSign = Image.FromFile(signPath);
    Graphics graphic = Graphics.FromImage(image);
    graphic.DrawImageUnscaled(thumbNailSign, image.Width - thumbNailSign.Width - 4, image.Height - thumbNailSign.Height - 4);
    graphic.Flush();

    MemoryStream memoryStream = new MemoryStream();
    image.Save(memoryStream, ImageFormat.Jpeg);
    output = new byte[memoryStream.Length];
    memoryStream.Position = 0;
    memoryStream.Read(output, 0, (int)memoryStream.Length);
    memoryStream.Close();

    stream.Dispose();
    graphic.Dispose();
    memoryStream.Dispose();

    return output;
}
在我看来,缩略图应该有一个恒定的大小,但事实并非如此。你对如何实现这一目标有什么想法吗

编辑:只是编辑代码以了解不同的分辨率。但它仍然不起作用:

private static byte[] InsertThumbnailSign(byte[] imageBuffer, string signPath)
{
    byte[] output = null;
    MemoryStream stream = new MemoryStream(imageBuffer);
    Image image = Image.FromStream(stream);

    // Add the thumbnail sign with resolution of the containing image
    Bitmap t = (Bitmap)Bitmap.FromFile(signPath);
    t.SetResolution(image.HorizontalResolution, image.VerticalResolution);
    Image thumbNailSign = t;

    Graphics graphic = Graphics.FromImage(image);
    graphic.DrawImageUnscaled(thumbNailSign, image.Width - thumbNailSign.Width - 4, image.Height - thumbNailSign.Height - 4);
    graphic.Flush();

    MemoryStream memoryStream = new MemoryStream();
    image.Save(memoryStream, ImageFormat.Png);
    output = new byte[memoryStream.Length];
    memoryStream.Position = 0;
    memoryStream.Read(output, 0, (int)memoryStream.Length);
    memoryStream.Close();

    stream.Dispose();
    graphic.Dispose();
    memoryStream.Dispose();

    return output;
}

在调整大小和/或在创建要覆盖的“签名”图像时使用该DPI之前,请确保将所有图像规格化为一致的DPI/PPI

300 DPI 2“宽的图像是600像素宽的,如果DPI设置为72 DPI,您还可以拥有600像素宽的图像,并使其宽度超过8”


查看其中的示例代码,以获得有关图形对象的更多详细信息。

TombMedia是正确的。决议一直是重点

我在我的调整大小算法中发现了一个错误,导致firefox调整图像大小,并导致插入图像的大小不同


修正错误并调整分辨率后,效果良好。谢谢你的提示

我只是确保包含缩略图的大图像具有96.0f的垂直分辨率和水平分辨率。这与我的10px*10px缩略图的分辨率完全相同。不幸的是,结果仍然是一样的…:-(调试器确保两幅图像具有相同的分辨率…还有其他想法吗?或者我是否遗漏了一点?没有,如果你已经走了这条路,那么你做的事情是正确的。