tool__ Ответов: 1

Перекрывающиеся прозрачные GIF-файлы ошибка в C# windows forms


Я использую C# Windows Forms, и у меня есть следующая проблема:
У меня есть программа с фоновым изображением в форме (не в picturebox), и над ней есть 2 графических поля, с 2 прозрачными GIF-файлами, и они перекрываются, но gif спереди открывает отверстие со своей прозрачной областью к gif ниже, и в этой области появляется фоновое изображение формы, есть ли способ отображения этих 2 GIF-файлов, перекрывающихся без открытия отверстия один к другому? или это слабость C#?

Спасибо

Что я уже пробовал:

У меня нет кода для публикации, потому что я все делал с помощью перетаскивания мыши.

1 Ответов

Рейтинг:
8

Dave Kreskowiak

Тебе это не понравится. Это не ошибка, по крайней мере, не в Windows Forms или элементах управления.

Это ошибка в вашем понимании того, как элементы управления работают в Windows Forms.

Во-первых, контроль не является прозрачным. Но я слышу, как вы говорите: "Я установил фон PictureBox прозрачным!" Да, но "прозрачный" не означает того, что ты думаешь.

Установка фона элемента управления в прозрачный просто говорит элементу управления принять фоновые свойства контейнера, в котором находится элемент управления, а именно вашей формы. Таким образом, прозрачный дает иллюзию прозрачности, если фон элемента управления совпадает с фоном его контейнера, но только при определенных условиях.

В одном из этих условий иллюзия прозрачности нарушается, когда ваша вершина (в терминах Z-порядка) Элемент управления PictureBox перекрывает нижний уровень управления PictureBox. Пиксели, занятые нижним уровнем PictureBox, перерисовываются более высоким уровнем. Поскольку фон верхнего уровня PictureBox совпадает с фоном формы, это создает иллюзию, что ваш нижний уровень picturebox исчезает или имеет отверстие в нем.

Так как же вы обходите это? Для этого есть множество трюков. То, что применимо, зависит от того, что вы делаете со своими изображениями.

Один из способов-вообще не использовать PictureBoxes. Вместо этого вы сами рисуете изображения на поверхности формы с помощью своего собственного кода рисования. Однако то, насколько это будет сложно, зависит от вашего приложения.


tool__

Спасибо за ваш ответ, вы спасли меня от большой работы ни за что, рисуя картинки в windows forms, я не думаю, что это возможно, так как картинки очень сложны и они должны быть сделаны в программе рисования. Можете ли вы предложить мне какой-либо язык программирования, на котором я могу работать с несколькими перекрывающимися прозрачными изображениями? чтобы изобразить их так, как это делает, например, photoshop...

Ralf Meier

Вы должны создать свой собственный настроенный PictureBox, который имеет "реальное" поведение прозрачности.
CodeProject имеет несколько примеров, которые показывают, как сделать элемент управления реальным прозрачным.
Это может быть способ для вас ... но вы должны решить, хотите ли вы идти этим путем ...

Dave Kreskowiak

"Сложный" не имеет ничего общего с этим, если вы показываете их в PictureBox. Это означает, что у вас есть файл, который вы можете загрузить с растровым объектом и нарисовать изображение на поверхности формы самостоятельно, используя обычные графические методы.

tool__

Я искал в WPF в течение получаса и выяснил, как легко и идеально отображать несколько перекрывающихся прозрачных GIF-файлов... Я не уверен, с каким приложением идти, WPF выглядит лучше, у него также есть это окно кода в нижней части, что имеет гораздо больше смысла, вы ставите курсор на строку и автоматически выбираете объект, на который он ссылается в окне дизайна...

Но я не знаю, какие проблемы возникнут в будущем с WPF, моя цель - сделать автономный exe-файл для windows,

Каково Ваше мнение о WPF в целом?

Dave Kreskowiak

WPF превосходит Windows Forms, IMHO.

Проблема с ним заключается в действительно крутой кривой обучения.

tool__

Что значит крутая кривая обучения? не могли бы вы объяснить еще несколько слов, пожалуйста?

Dave Kreskowiak

Это нелегко понять. В одной книге, которая у меня есть, более 1100 страниц.