绘制边框图像列表视图 [英] Draw border for image in listview
本文介绍了绘制边框图像列表视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在选择事件发生后一个TreeView,我填充图像的列表视图。
我想自定义格式这些图像,并将黑色边框每个图像。
私人无效TreeView1_Select(对象发件人,EventArgs的){
如果(文件夹= NULL和放大器;!&安培; System.IO.Directory.Exists(文件夹)){
DirectoryInfo的DIR =新的DirectoryInfo(@folder);
的foreach(在dir.GetFiles的FileInfo文件()){
尝试 {
imageList.Images.Add(Image.FromFile(file.FullName));
} 抓住 {
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);
}
}
私人无效ListView1_DrawItem(对象发件人,DrawListViewItemEventArgs E)
{
}
解决方案
我会使用图形
对象立即从文件加载图像后添加边框:
修改:修改了code,这对我的作品......
私人无效TreeView1_Select(对象发件人,EventArgs的){
如果(文件夹= NULL和放大器;!&安培; System.IO.Directory.Exists(文件夹)){
DirectoryInfo的DIR =新的DirectoryInfo(@folder);
的foreach(在dir.GetFiles的FileInfo文件()){
图片IMG =新位图(Image.FromFile(file.FullName));
使用(图形G = Graphics.FromImage(IMG)){
g.DrawRectangle(Pens.Black,0,0,img.Width - 2,img.Height - 2);
}
imageList.Images.Add(IMG);
注意:图像复制的目的;如果我修改code到
图片IMG =(位图)Bitmap.FromFile(test.bmp);
作为评论的建议,我得到一个异常说图形对象不能从具有索引像素格式的图像创建。
On a treeview after the select event, I populate a listview with images.
I want to custom format these images and place a black color border around each image.
private void TreeView1_Select(object sender, EventArgs e) {
if (folder != null && System.IO.Directory.Exists(folder)) {
DirectoryInfo dir = new DirectoryInfo(@folder);
foreach (FileInfo file in dir.GetFiles()) {
try {
imageList.Images.Add(Image.FromFile(file.FullName));
} 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);
}
}
private void ListView1_DrawItem(object sender, DrawListViewItemEventArgs e)
{
}
解决方案
I would add a border using a Graphics
object immediately after loading the images from file:
EDIT: modified the code, this works for me...
private void TreeView1_Select(object sender, EventArgs e) {
if (folder != null && System.IO.Directory.Exists(folder)) {
DirectoryInfo dir = new DirectoryInfo(@folder);
foreach (FileInfo file in dir.GetFiles()) {
Image img = new Bitmap(Image.FromFile(file.FullName));
using (Graphics g = Graphics.FromImage(img)){
g.DrawRectangle(Pens.Black, 0, 0, img.Width - 2, img.Height - 2);
}
imageList.Images.Add(img);
NOTE: the image copying is intended; if I modify the code to
Image img = (Bitmap)Bitmap.FromFile("test.bmp");
as suggested in the comments, I get an exception saying "A Graphics object cannot be created from an image that has an indexed pixel format."
这篇关于绘制边框图像列表视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文