Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        /// <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;
            }
        }
Ejemplo n.º 4
0
        /// <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);
        }