/// <summary> /// サムネイルイメージを作成します。 /// </summary> /// <param name="thumbItem">ListViewに追加するThumbNailItem。</param> /// <returns>作成したサムネイルイメージを表すImage。</returns> private Image createThumbNailImage(ThumbNailItem thumbItem) { Image img = null; try { img = Image.FromFile(thumbItem.ImageFilePath); } catch (OutOfMemoryException) { // 画像読込での例外は握りつぶす return(null); } thumbItem.ImagePattern = this.getImagePattern(img); Size thumbImgSize = this.getThumbImageSize(img); Bitmap canvas = new Bitmap(this.imgList.ImageSize.Width, this.imgList.ImageSize.Height); using (Graphics graph = Graphics.FromImage(canvas)) { // 背景色をコントロールの背景色で塗りつぶす graph.FillRectangle(new SolidBrush(this.BackColor), 0, 0, this.imgList.ImageSize.Width, this.imgList.ImageSize.Height); var imgX = (this.imgList.ImageSize.Width - thumbImgSize.Width) / 2; var imgY = (this.imgList.ImageSize.Height - thumbImgSize.Height) / 2; // ファイルの属性を取得 var attr = File.GetAttributes(thumbItem.ImageFilePath); if (attr.HasFlag(FileAttributes.Hidden)) { // 隠しファイルを半透明で描画 graph.DrawImage(img, new Rectangle(0, 0, thumbImgSize.Width, thumbImgSize.Height), imgX, imgY, img.Width, img.Height, GraphicsUnit.Pixel, this.getHalfTransAttributes()); } else { // 通常描画 graph.DrawImage(img, imgX, imgY, thumbImgSize.Width, thumbImgSize.Height); } if (attr.HasFlag(FileAttributes.System)) { // システム属性 this.drawSysFileTypeImage(graph); } } return(canvas); }
/// <summary> /// RetrieveVirtualItemイベントを発生させます。 /// </summary> /// <param name="e">イベントデータを格納しているRetrieveVirtualItemEventArgs。</param> protected override void OnRetrieveVirtualItem(RetrieveVirtualItemEventArgs e) { if (this.itemList.Count <= e.ItemIndex) { return; } ThumbNailItem targetItem = this.itemList[e.ItemIndex]; if (!this.imgList.Images.ContainsKey(targetItem.ImageFilePath)) { // サムネイルイメージがImageListに存在しない場合のみ作成して追加 this.imgList.Images.Add(targetItem.ImageFilePath, this.createThumbNailImage(targetItem)); } targetItem.ImageIndex = this.imgList.Images.IndexOfKey(targetItem.ImageFilePath); e.Item = targetItem; base.OnRetrieveVirtualItem(e); }
/// <summary> /// イメージフォルダ内のファイルをサムネイル表示します。 /// </summary> private void showThumbNailImages() { // サムネイルビューを初期化 this.initThumbNailView(); var i = 0; // ファイル名の昇順で表示 foreach (var filePath in System.IO.Directory.GetFiles(this.imgFolderPath).OrderBy(p => p)) { if (!this.isTargetImage(filePath)) { // 対象外ファイルの場合はスキップ continue; } ThumbNailItem thumbItem = new ThumbNailItem { ImageFilePath = filePath }; if (!this.VirtualMode) { // サムネイルイメージを作成 ※ 通常モードのみ this.imgList.Images.Add(filePath, this.createThumbNailImage(thumbItem)); // 仮想モードの場合はImageKeyがクリアされるので通常モードのみセットする thumbItem.ImageKey = filePath; // Viewに追加 base.Items.Add(thumbItem); } thumbItem.ItemListIndex = i; this.itemList.Add(thumbItem); i++; } if (this.VirtualMode) { // 仮想モードの場合は個数をセット base.VirtualListSize = this.itemList.Count; } }
/// <summary> /// すべてのサムネイルの情報を取得します。 /// </summary> /// <returns>すべてのサムネイル情報を表すList<ThumbNailItem>。</returns> public List <ThumbNailItem> GetAllThumbNails() { var retList = new List <ThumbNailItem>(); int i = 0; foreach (var item in this.itemList) { var tmpItem = new ThumbNailItem { ImageFilePath = item.ImageFilePath, Name = item.Name }; // 選択状態を取得してセット bool isSelect = false; if (this.VirtualMode) { if (i < this.SelectedIndices.Count) { if (item.Index == this.SelectedIndices[i]) { isSelect = true; i++; } } } else { isSelect = item.Selected; } tmpItem.Selected = isSelect; retList.Add(tmpItem); } return(retList); }