相关疑难解决方法(0)

在ListView中的网格中显示128x128像素或更大的缩略图图标

原始问题(见下面的更新)

我有一个WinForms程序需要一个体面的可滚动图标控件与大图标(真的是128x128或更大的缩略图),可以点击到hilight或双击以执行某些操作.最好是浪费的空间最小(每个图标下方可能需要短文件名标题;如果文件名太长,我可以添加省略号).

具有适当颜色,间距等的listview的完成版本http://www.updike.org/images/listview-great.png

我尝试使用带有LargeIcon的ListView(默认.View),结果令人失望:

截图显示LargeIcon视图中的小图标http://www.updike.org/images/listview-poor.png

也许我错误填充控件?码:

        ImageList ilist = new ImageList();
        this.listView.LargeImageList = ilist;
        int i = 0;
        foreach (GradorCacheFile gcf in gc.files)
        {
            Bitmap b = gcf.image128;
            ilist.Images.Add(b);
            ListViewItem lvi = new ListViewItem("text");
            lvi.ImageIndex = i;
            this.listView.Items.Add(lvi);
            i++;
        }
Run Code Online (Sandbox Code Playgroud)

我需要带有小空间的大图标,而不是带有令人尴尬的小图标的大空间.

  1. 是否有.NET控件可以满足我的需求?
    • 有没有最喜欢的第三方控件呢?
    • 如果没有,哪个控件最好继承和调整以使其工作?
    • 我应该分解并制作一个自定义控件(我有很多经验...只是不想去那个极端,因为这有点涉及).

我找到了关于OwnerDraw的这个教程,但是从那里开始的工作基本上达到了上面的数字3或4,因为该演示只是展示了如何在细节视图中对行进行调整.

更新

添加线

ilist.ImageSize = new Size(128, 128);
Run Code Online (Sandbox Code Playgroud)

在for循环之前修复了大小问题,但现在图像被调色为8位(看起来像系统颜色?),即使调试器显示图像作为24bpp System.Drawing.Bitmap插入到ImageList中:

大图标,最后是http://www.updike.org/images/listview-poor2.png

  1. 我如何(可以吗?)使图像以完整的24位颜色显示?
    • 图标周围的间距仍然相当浪费......我该如何解决?我可以吗?

更新2

随着添加线

ilist.ColorDepth = ColorDepth.Depth24Bit;
Run Code Online (Sandbox Code Playgroud)

设置ilist.ImageSize之后,我按照仲裁者的建议改变了间距:

[DllImport("user32.dll")]
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

public …
Run Code Online (Sandbox Code Playgroud)

c# listview thumbnails .net-2.0 winforms

45
推荐指数
3
解决办法
4万
查看次数

如何将Bitmap转换为Base64字符串?

我正在尝试捕获屏幕,然后将其转换为Base64字符串.这是我的代码:

Rectangle bounds = Screen.GetBounds(Point.Empty);
Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height);

using (Graphics g = Graphics.FromImage(bitmap))
{
   g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
}

// Convert the image to byte[]
System.IO.MemoryStream stream = new System.IO.MemoryStream();
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] imageBytes = stream.ToArray();

// Write the bytes (as a string) to the textbox
richTextBox1.Text = System.Text.Encoding.UTF8.GetString(imageBytes);

// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
Run Code Online (Sandbox Code Playgroud)

使用richTextBox进行调试,它显示:

BM6〜

因此,由于某种原因,字节不正确会导致base64String变为null.知道我做错了什么吗?谢谢.

c# base64 image

33
推荐指数
3
解决办法
6万
查看次数

标签 统计

c# ×2

.net-2.0 ×1

base64 ×1

image ×1

listview ×1

thumbnails ×1

winforms ×1