在ListView控件动态创建固定大小的缩略图 [英] create fixed size thumbnail dynamically on listview control

查看:313
本文介绍了在ListView控件动态创建固定大小的缩略图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何动态创建固定大小的缩略图和列表视图中调整最适合的图像缩略图的大小。

 私人无效Treeview1_AfterSelect(System.Object的发件人,System.Windows.Forms.TreeViewEventArgs E)
{
    如果(文件夹= NULL&放大器;!&安培; System.IO.Directory.Exists(文件夹))
                {
                    尝试
                    {                        DirectoryInfo的DIR =新DirectoryInfo的(@folder);
                        的foreach(在dir.GetFiles FileInfo的文件())
                        {
                            尝试
                            {
                                imageList.ImageSize =新的大小(136,136);
                                imageList.ColorDepth = ColorDepth.Depth32Bit;
                                图片IMG =新位图(Image.FromFile(file.FullName));
                                图形G = Graphics.FromImage(IMG);                                g.DrawRectangle(Pens.Red,0,0,img.Width - 21 img.Height - 21);
                                //g.DrawRectangle(Pens.Red,0,0,img.Width,img.Height);
                                imageList.Images.Add(IMG);
                            }
                            抓住
                            {
                                Console.WriteLine(这不是一个图像文件);
                            }
                        }
                        对于(INT J = 0; J< imageList.Images.Count; J ++)
                        {
                            this.ListView1.Items.Add(项目+ J);
                            this.ListView1.Items [J] .ImageIndex = j的;
                        }                        this.ListView1.View = View.LargeIcon;
                        this.ListView1.LargeImageList =图像列表;
                        //this.ListView1.DrawItem + =新DrawListViewItemEventHandler(ListView1_DrawItem);                        //导入(文件夹);
                    }
                    赶上(异常前)
                    {
                    }
}


解决方案

我在<一个code href=\"http://stackoverflow.com/questions/1528525/alternatives-to-system-drawing-for-use-with-asp-net/1528908#1528908\">this回答专门为解决一起调整图像大小:

 公共无效GenerateThumbNail(HttpPostedFile FIL,串sPhysicalPath,
                              串sOrgFileName,串sThumbNailFileName,
                              的imageformat oFormat,INT REZ)
{    尝试
    {        为System.Drawing.Image oImg = System.Drawing.Image.FromStream(fil.InputStream);        小数pixtosubstract = 0;
        小数的百分比;        //默认
        大小ThumbNailSizeToUse =新的大小();
        如果(ThumbNailSize.Width&LT; oImg.Size.Width || ThumbNailSize.Height&LT; oImg.Size.Height)
        {
            如果(oImg.Size.Width&GT; oImg.Size.Height)
            {
                百分比=(((十进制)oImg.Size.Width - (十进制)ThumbNailSize.Width)/(十进制)oImg.Size.Width);
                pixtosubstract =百分比* oImg.Size.Height;
                ThumbNailSizeToUse.Width = ThumbNailSize.Width;
                ThumbNailSizeToUse.Height = oImg.Size.Height - (INT)pixtosubstract;
            }
            其他
            {
                百分比=(((十进制)oImg.Size.Height - (十进制)ThumbNailSize.Height)/(十进制)oImg.Size.Height);
                pixtosubstract =百分比*(十进制)oImg.Size.Width;
                ThumbNailSizeToUse.Height = ThumbNailSize.Height;
                ThumbNailSizeToUse.Width = oImg.Size.Width - (INT)pixtosubstract;
            }        }
        其他
        {
            ThumbNailSizeToUse.Width = oImg.Size.Width;
            ThumbNailSizeToUse.Height = oImg.Size.Height;
        }        BMP位图=新位图(ThumbNailSizeToUse.Width,ThumbNailSizeToUse.Height);
        bmp.SetResolution(苏亚雷斯,苏亚雷斯);
        为System.Drawing.Image oThumbNail = BMP;        BMP = NULL;        图形oGraphic = Graphics.FromImage(oThumbNail);        oGraphic.CompositingQuality = CompositingQuality.HighQuality;        oGraphic.Smoothi​​ngMode = Smoothi​​ngMode.HighQuality;        oGraphic.InterpolationMode = InterpolationMode.HighQualityBicubic;        矩形oRectangle =新的Rectangle(0,0,ThumbNailSizeToUse.Width,ThumbNailSizeToUse.Height);        oGraphic.DrawImage(oImg,oRectangle);        oThumbNail.Save(sPhysicalPath + sThumbNailFileName,oFormat);        oImg.Dispose();    }
    赶上(异常前)
    {
        的Response.Write(ex.Message);
    }}

how to create fixed size thumbnail dynamically and resize image in listview best fit the size of the thumbnail.

private void Treeview1_AfterSelect(System.Object sender, System.Windows.Forms.TreeViewEventArgs e)
{
    if (folder != null && System.IO.Directory.Exists(folder))
                {
                    try
                    {

                        DirectoryInfo dir = new DirectoryInfo(@folder);
                        foreach (FileInfo file in dir.GetFiles())
                        {
                            try
                            {
                                imageList.ImageSize = new Size(136, 136);
                                imageList.ColorDepth = ColorDepth.Depth32Bit;
                                Image img = new Bitmap(Image.FromFile(file.FullName));                                    
                                Graphics g = Graphics.FromImage(img);

                                g.DrawRectangle(Pens.Red, 0, 0, img.Width - 21, img.Height - 21);
                                //g.DrawRectangle(Pens.Red, 0, 0, img.Width, img.Height);                                                                                                                                                
                                imageList.Images.Add(img);
                            }
                            catch
                            {
                                Console.WriteLine("This is not an image file");
                            }     
                        }


                        for (int j = 0; j < imageList.Images.Count; j++)
                        {
                            this.ListView1.Items.Add("Item" + j);
                            this.ListView1.Items[j].ImageIndex = j;
                        }

                        this.ListView1.View = View.LargeIcon;
                        this.ListView1.LargeImageList = imageList;
                        //this.ListView1.DrawItem += new DrawListViewItemEventHandler(ListView1_DrawItem);                                                       

                        //import(folder);
                    }
                    catch (Exception ex)
                    {
                    }
}

解决方案

I have code in this answer specifically for resizing images along with resolution:

public void GenerateThumbNail(HttpPostedFile fil, string sPhysicalPath, 
                              string sOrgFileName,string sThumbNailFileName,
                              ImageFormat oFormat, int rez)
{

    try
    {

        System.Drawing.Image oImg = System.Drawing.Image.FromStream(fil.InputStream);

        decimal pixtosubstract = 0;
        decimal percentage;

        //default
        Size ThumbNailSizeToUse = new Size();
        if (ThumbNailSize.Width < oImg.Size.Width || ThumbNailSize.Height < oImg.Size.Height)
        {
            if (oImg.Size.Width > oImg.Size.Height)
            {
                percentage = (((decimal)oImg.Size.Width - (decimal)ThumbNailSize.Width) / (decimal)oImg.Size.Width);
                pixtosubstract = percentage * oImg.Size.Height;
                ThumbNailSizeToUse.Width = ThumbNailSize.Width;
                ThumbNailSizeToUse.Height = oImg.Size.Height - (int)pixtosubstract;
            }
            else
            {
                percentage = (((decimal)oImg.Size.Height - (decimal)ThumbNailSize.Height) / (decimal)oImg.Size.Height);
                pixtosubstract = percentage * (decimal)oImg.Size.Width;
                ThumbNailSizeToUse.Height = ThumbNailSize.Height;
                ThumbNailSizeToUse.Width = oImg.Size.Width - (int)pixtosubstract;
            }

        }
        else
        {
            ThumbNailSizeToUse.Width = oImg.Size.Width;
            ThumbNailSizeToUse.Height = oImg.Size.Height;
        }

        Bitmap bmp = new Bitmap(ThumbNailSizeToUse.Width, ThumbNailSizeToUse.Height);
        bmp.SetResolution(rez, rez);
        System.Drawing.Image oThumbNail = bmp;

        bmp = null;

        Graphics oGraphic = Graphics.FromImage(oThumbNail);

        oGraphic.CompositingQuality = CompositingQuality.HighQuality;

        oGraphic.SmoothingMode = SmoothingMode.HighQuality;

        oGraphic.InterpolationMode = InterpolationMode.HighQualityBicubic;

        Rectangle oRectangle = new Rectangle(0, 0, ThumbNailSizeToUse.Width, ThumbNailSizeToUse.Height);

        oGraphic.DrawImage(oImg, oRectangle);

        oThumbNail.Save(sPhysicalPath  + sThumbNailFileName, oFormat);

        oImg.Dispose();

    }
    catch (Exception ex)
    {
        Response.Write(ex.Message);
    }

}

这篇关于在ListView控件动态创建固定大小的缩略图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆