C# 用C显示缩略图
我正在使用C处理相册查看器。作为应用程序的一部分,我需要将所选文件夹的所有图像显示为缩略图。我不知道如何创建缩略图C# 用C显示缩略图,c#,image,thumbnails,C#,Image,Thumbnails,我正在使用C处理相册查看器。作为应用程序的一部分,我需要将所选文件夹的所有图像显示为缩略图。我不知道如何创建缩略图 任何代码、链接或建议都会非常有帮助。谢谢。检查一下。它可能会帮助你。。。代码根据文本框中提供的图像创建图像对象。使用Image.GetThumbnailImage,代码然后创建一个大小为100*100的缩略图。检查。它可能会帮助你。。。代码根据文本框中提供的图像创建图像对象。使用Image.GetThumbnailImage,代码然后创建一个大小为100*100的缩略图。我向您推荐
任何代码、链接或建议都会非常有帮助。谢谢。检查一下。它可能会帮助你。。。代码根据文本框中提供的图像创建图像对象。使用Image.GetThumbnailImage,代码然后创建一个大小为100*100的缩略图。检查。它可能会帮助你。。。代码根据文本框中提供的图像创建图像对象。使用Image.GetThumbnailImage,代码然后创建一个大小为100*100的缩略图。我向您推荐我过去使用的一种方法:使用ListView并在关联的ImageList中动态加载图像。您可以使用rdkleine提出的策略以缩略图形式加载图像。您必须遵循的重要原则是,如果用户无法真正看到图像,则不要加载所有图像。使用listview可以通过设置VirtualMode=true来实现这一点,并且仅当图像实际显示时才提供图像。我建议您使用我过去使用的一种方法:使用listview并在关联的ImageList中动态加载图像。您可以使用rdkleine提出的策略以缩略图形式加载图像。您必须遵循的重要原则是,如果用户无法真正看到图像,则不要加载所有图像。使用listview,您可以通过设置VirtualMode=true来实现这一点,并仅在实际显示图像时才提供图像
public System.Drawing.Image GetThumbnailImage(int thumbWidth, int thumbHeight, System.Drawing.Image.GetThumbnailImageAbort callback, System.IntPtr callbackData)
Member of System.Drawing.Image
Summary:
Returns a thumbnail for this System.Drawing.Image.
Parameters:
thumbWidth: The width, in pixels, of the requested thumbnail image.
thumbHeight: The height, in pixels, of the requested thumbnail image.
callback: A System.Drawing.Image.GetThumbnailImageAbort delegate. In GDI+ version 1.0, the delegate is not used. Even so, you must create a delegate and pass a reference to that delegate in this parameter.
callbackData: Must be System.IntPtr.Zero.
Returns:
An System.Drawing.Image that represents the thumbnail.
[HttpPost]
public PartialViewResult DisplayGalleryThumbs(string galleryId)
{
int pageNumber = Convert.ToInt32(galleryId.Split('_')[2]);
Guid feedId = new Guid(galleryId.Split('_')[1]);
var images = _feedDomain.ShowPostById(feedId.ToString()).Images;
int totalNumberOfPages = CountNumberOfPages(images);
string action = galleryId.Split('_')[3];
var dict = new Dictionary<int, List<FeedImage>>();
var pagedImages = new List<FeedImage>();
int i = 1;
int a = 1;
foreach (FeedImage image in images)
{
pagedImages.Add(image);
if (i % NumberOfImagesPerPage == 0)
{
dict.Add(a, pagedImages);
a++;
pagedImages=new List<FeedImage>();
}
if (i >= images.Count()) dict.Add(a, pagedImages);
i++;
}
if (action=="next")
{
pageNumber += 1;
}
else
{
pageNumber -= 1;
}
var galleryModel = new FeedThumbGalleryModel
{
Images = dict.FirstOrDefault(c => c.Key == pageNumber).Value,
FeedId = feedId,
PageNumber = pageNumber,
NumberOfPages = totalNumberOfPages,
NumberOfImagesPerPage = NumberOfImagesPerPage,
TotalNumberOfImages = images.Count()
};
return PartialView("~/Views/Feed/_DisplayGalleryThumbs.cshtml", galleryModel);
}
@helper Render(FeedThumbGalleryModel model)
{
}
这是一个使用MVC3的用于缩略图分页预览的ajax解决方案。我用这个作为我的新闻提要,通过图像库列出。不要介意在视图中大量使用表,我的UI有点有限
{
}
这是一个使用MVC3的用于缩略图分页预览的ajax解决方案。我用这个作为我的新闻提要,通过图像库列出。不要介意在视图中大量使用表格,我的用户界面有点有限。你被卡在哪里了?获取文件夹的文件列表、从文件中读取图像、创建图像的缩略图版本、显示缩略图,等等?@hans:创建图像的缩略图版本您在哪里?获取文件夹的文件列表,从文件中读取图像,创建该图像的缩略图版本,显示该缩略图,还有什么?@hans:创建一个缩略版本的图像你能告诉我们zip包含什么吗?这样人们就不必盲目地下载它了?我已经将链接改为包含zip文件的实际文章。看起来更合适。@Yoko:没问题。对zip文件的盲目链接似乎会让一些人感到不安。通过这种方式,如果他们感兴趣,他们可以签出文章,然后抓取包含完整源代码的zip文件。你能告诉我zip文件包含哪些内容,这样人们就不必盲目下载它吗?我已将链接更改为包含zip文件的实际文章。看起来更合适。@Yoko:没问题。对zip文件的盲目链接似乎会让一些人感到不安。通过这种方式,如果他们感兴趣,他们可以查看文章,然后获取包含完整源代码的zip文件。
if (model.Images != null)
{
string linkNext = "linkNext_" + model.FeedId + "_" + model.PageNumber + "_next";
string linkPrev = "linkPrev_" + model.FeedId + "_" + model.PageNumber + "_prev";
string thumbFeedId = "feedThumbDiv_" + model.FeedId;
<div id="@thumbFeedId">
<table>
<tr>
<td style="width: 30px;vertical-align: top;">
@if (model.NumberOfPages > 1)
{
if (model.PageNumber <= model.NumberOfPages && model.PageNumber > 1 || model.PageNumber == model.NumberOfPages)
{
<a class="page-action" href="#" id="@linkPrev">Prev</a>
}
}
</td>
<td style="width: 120px;vertical-align: top">
@if (model.NumberOfPages>1)
{
for (int a = 1; a <= model.NumberOfPages; a++)
{
int currentPage = a - 1;
string pageLink = "linkNext_" + model.FeedId + "_" + currentPage + "_next";
string classname = a==model.PageNumber ? "page-number-list" : "page-number-list1";
<a href="#" id="@pageLink" class="@classname">@a</a>
}
}
</td>
<td style="width: 220px;vertical-align: top;">
@if (model.PageNumber < model.NumberOfPages)
{
<a class="page-action" href="#" id="@linkNext">Next</a>
}
</td>
<td style="width: 150px;vertical-align: top;">
@{var thisId = "SeeAll_" + model.FeedId;}
@if (model.TotalNumberOfImages > 12)
{
<a id="@thisId" class="view-all">View All</a>
}
</td>
<td style="vertical-align: top">
<div class="number-of-images">
@model.TotalNumberOfImages images
</div>
</td>
</tr>
<tr>
<td colspan="5">
<div style="width: 660px;padding-top: 10px">
@{int i = 1;}
@foreach (FeedImage m in model.Images)
{
string thumbThumb = ConfigurationManager.AppSettings["DisplayThumbPath"] + m.ImageId;
string imageUrl = "/feed/DisplayImage/" + model.FeedId + "_" + m.ImageId;
<div class="thumbnail image">
<a class='show-image' href="@imageUrl">
<img border="0" class="image" src="@thumbThumb" width="125" height="125" alt="" />
</a>
</div>
if (i % model.NumberOfImagesPerPage == 0)
{
break;
}
i++;
}
<br/>
</div>
</td>
</tr>
</table>
</div>
}
public class FeedImage
{
public Guid ImageId { get; set; }
public string ImageUrl { get; set; }
public string ImageName { get; set; }
public double ImageSize { get; set; }
public string FileExtension { get; set; }
public string ImageType { get; set; }
public FeedPost Post { get; set; }
public List<FeedLike> Likes { get; set; }
public List<FeedComment> Comments { get; set; }
public DateTime DateCreated { get; set; }
public string DateCreatedIso8601 { get; set; }
}
private int CountNumberOfPages(List<FeedImage> images)
{
if (images == null) return 0;
return (images.Count() + NumberOfImagesPerPage - 1) / NumberOfImagesPerPage;
}
$("[class='page-action']").live('click', function () {
var feedArr = $(this).attr('id').split('_');
var thisDivId = '#feedThumbDiv_' + feedArr[1];
$.post('/Feed/DisplayGalleryThumbs', { galleryId: $(this).attr('id') },
function (html) {
$(thisDivId).replaceWith(html);
});
return false;
});