dotnet / dotnet/winforms

(Perf) avoid saving ListView BackgroundImage to disk

Open
#5,755 1 comment 1 reaction 1 assignee Claimed by @lonitra View on GitHub
api-suggestion area-controls-ListView enhancement tenet-performance
Dominant language
C#
Stars
4.9k
Forks
1.1k
Avg merge
1d 13m
Merged PRs (30d)
85

Description

**Is your feature request related to a problem? Please describe.**

`ListView.BackgroundImage` is stored into a temporary file when transferred to the native control. This puts pressure on the temp file namespace and produces additional IO, as well as requiring complex code to manage lifetime of the file and delete it when no longer needed.

Noted in PR #5744 while simplifying the temp file generation.

**Describe the solution you'd like and alternatives you've considered**

`ListView` supports selecting a `HBITMAP` as background image, so it would make sense to make use of that functionality.

While the `BackgroundImage` is an arbitrary `Image` the old code (before PR #5744) always constructed a `Bitmap` from it in order to generate a temp file seed. This means if we'll create a Bitmap from the Image to form a HBITMAP we do not introduce additional restrictions that didn't exist before.

Also the `BackgroundImage` always was saved in `BMP` format, meaning transparency probably never worked (transparent pixels turned out black in my tests). Note that generating a `HBITMAP` naively in .NET fills transparent pixels with a background color. We should investigate whether `ListView` is capable of rendering transparent backgrounds properly (there exist flags which seam to indiciate support).

**Will this feature affect UI controls?**

Yes, `ListView` will change how it implements `BackgroundImage` and needs attention to not introduce regressions.

No designer or API changes are required.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.