Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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#.NET:调整容器div元素内图像的大小_C#_.net - Fatal编程技术网

C#.NET:调整容器div元素内图像的大小

C#.NET:调整容器div元素内图像的大小,c#,.net,C#,.net,我有以下标记代码,其中包含container div元素和嵌套在div中的img标记。container div具有width、height、top和left CSS样式属性 最初上传的图像具有任意宽度和高度,可能大于或小于容器分区。因此,必须调整最初上传的图像的大小并进行良好缩放,并将其保存为缩略图,以位于容器分区的边界内。调整大小的缩略图将显示为源(src)在以下标记中: <div id="divContainer" style="width: 600px; height: 450px

我有以下标记代码,其中包含container div元素和嵌套在div中的img标记。container div具有width、height、top和left CSS样式属性

最初上传的图像具有任意宽度和高度,可能大于或小于容器分区。因此,必须调整最初上传的图像的大小并进行良好缩放,并将其保存为缩略图,以位于容器分区的边界内。调整大小的缩略图将显示为源(src)在以下标记中:

<div id="divContainer" style="width: 600px; height: 450px; top: 50px; left: 20px;">
   <img src="[my resized and well scaled thumbnail source]..." id="imgResizedThumnail" />
</div>
这就是我使用的:

    public static Image Resize(
        Image srcImage, 
        int newWidth, 
        int maxHeight,
        int dpi = 72)
    {
        if(srcImage.Width<=newWidth)
        {
            newWidth = srcImage.Width;
        }

        var newHeight = srcImage.Height * newWidth / srcImage.Width;
        if (newHeight > maxHeight)
        {
            newWidth = srcImage.Width * maxHeight / srcImage.Height;
            newHeight = maxHeight;
        }

        var newImage = new Bitmap(newWidth, newHeight);
        newImage.SetResolution(dpi, dpi);

        using (var gr = Graphics.FromImage(newImage))
        {
            gr.SmoothingMode = SmoothingMode.AntiAlias;
            gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
            gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
            gr.DrawImage(srcImage, new Rectangle(0, 0, newWidth, newHeight));
        }
        return newImage;
    }
公共静态图像大小调整(
图像,图像,
int newWidth,
int最大高度,
int dpi=72)
{
if(srcImage.Width maxHeight)
{
newWidth=srcImage.Width*maxHeight/srcImage.Height;
newHeight=maxHeight;
}
var newImage=新位图(新宽度、新高度);
设置分辨率(dpi,dpi);
使用(var gr=Graphics.FromImage(newImage))
{
gr.SmoothingMode=SmoothingMode.AntiAlias;
gr.InterpolationMode=InterpolationMode.HighQualityBicubic;
gr.PixelOffsetMode=PixelOffsetMode.HighQuality;
gr.DrawImage(srcImage,新矩形(0,0,newWidth,newHeight));
}
返回新图像;
}

我会这样做:

public void SaveThumbnailImageWithbestScaling(Image originalImage, int containerDivWidth, int containerDivHeight)
{
    string thumbnailFilename = "myThumnailFileName";
    int thumbnailWidth = 0;
    int thumbnailHeight = 0;

    float imgWidth = (float)originalImage.Width;
    float imgHeight = (float)originalImage.Height;

    float scale_w = imgWidth / (float)containerDivWidth;
    float scale_h = imgHeight / (float)containerDivHeight;

    // Compute how much each scale diverge from 1 (1 means no scaling, which is desirable)
    float variance_w = Math.Abs(1.0 - scale_w);
    float variance_h = Math.Abs(1.0 - scale_h);

    if (variance_w > variance_h)
    {
        // Height ratio is closer to 1
        float aspect_ratio = imgWidth / imgHeight;
        thumbnailHeight = containerDivHeight;
        thumbnailWidth = (int)Math.Floor(aspect_ratio * imgWidth);
    }
    else
    {
        // Width ratio is closer to 1
        float aspect_ratio = imgHeight / imgWidth;
        thumbnailHeight = (int)Math.Floor(aspect_ratio * imgHeight);
        thumbnailWidth = containerDivWidth;
    }

    Bitmap thumnailImage = CreateThumbnail(thumbnailFilename,int thumnailWidth, int thumnailHeight);

    // 3. save thumbnail
    SaveThumnail(thumnailImage);   
}
该算法计算每个维度的比率,然后找出哪个维度与div标记的维度差异最大。然后,它继续捕捉与div标记大小差异最小的维度,并缩放另一个维度以考虑图像的纵横比

当然还有其他方法,例如,您可以不关心纵横比,只将两个维度捕捉到div标记的维度

public void SaveThumbnailImageWithbestScaling(Image originalImage, int containerDivWidth, int containerDivHeight)
{
    string thumbnailFilename = "myThumnailFileName";
    int thumbnailWidth = 0;
    int thumbnailHeight = 0;

    float imgWidth = (float)originalImage.Width;
    float imgHeight = (float)originalImage.Height;

    float scale_w = imgWidth / (float)containerDivWidth;
    float scale_h = imgHeight / (float)containerDivHeight;

    // Compute how much each scale diverge from 1 (1 means no scaling, which is desirable)
    float variance_w = Math.Abs(1.0 - scale_w);
    float variance_h = Math.Abs(1.0 - scale_h);

    if (variance_w > variance_h)
    {
        // Height ratio is closer to 1
        float aspect_ratio = imgWidth / imgHeight;
        thumbnailHeight = containerDivHeight;
        thumbnailWidth = (int)Math.Floor(aspect_ratio * imgWidth);
    }
    else
    {
        // Width ratio is closer to 1
        float aspect_ratio = imgHeight / imgWidth;
        thumbnailHeight = (int)Math.Floor(aspect_ratio * imgHeight);
        thumbnailWidth = containerDivWidth;
    }

    Bitmap thumnailImage = CreateThumbnail(thumbnailFilename,int thumnailWidth, int thumnailHeight);

    // 3. save thumbnail
    SaveThumnail(thumnailImage);   
}