Форум программистов, компьютерный форум, киберфорум
XNA/MonoGame
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
13 / 13 / 9
Регистрация: 21.08.2014
Сообщений: 44
1

Прозрачность картинок, спрайтов

27.01.2015, 13:01. Показов 3020. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет, у меня есть вопрос...

...в картинках будет проще объяснить:

Прозрачность картинок, спрайтов
Прозрачность картинок, спрайтов


Не понимаю, почему в первом случае фон картинки сохраняется!?

Текстуру для спрайтов подгружаю в первом случае из
Прозрачность картинок, спрайтов


Во втором из
Прозрачность картинок, спрайтов


Их разница лишь в том, что №1 я сохранил из фотошопа напрямую, а №2 сохраненный в фотошопе png ковертировал в данном сервисе

Изначально нарезал png (теперь jpg в приложениях) спрайт-лист, убрал в нем фон в фотошопе и сохранил в другой спрайт-лист...

Пытался использовать что-то другое, кроме фотошопа, в итоге фон был светло-зеленым или на изображении были дефекты

Ссылка на оригинальный спрайт-лист



Работаю не с XNA, а с SharpDX, написал сюда, т.к. по тому, что я видел пока не вижу особой разницы между 2D XNA - 2D SharpDX.

P.S. Немного кода
Класс спрайта
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using SharpDX;
using SharpDX.Toolkit;
using SharpDX.Toolkit.Graphics;
using System;
 
namespace xGame
{
    class Sprite
    {
        public string fileName;
        public Texture2D Texture;
        public Vector2 Position;
        public Color color;
        public float Rotation;
        public Vector2 Origin;
        public Vector2 Scale;
        public SpriteEffects effect;
        public float Depth;
 
        public Rectangle Sector;
 
        public Sprite(string FileName)
        {
            fileName = FileName;
            Position = Vector2.Zero;
            color = Color.White;
            Rotation = 0;
            Scale = Vector2.One;
            Origin = Vector2.Zero;
            effect = SpriteEffects.None;
            Depth = 1.0f;
            Sector = Rectangle.Empty;
        }
 
        public void LoadContent(SharpDX.Toolkit.Content.ContentManager content)
        {
            Texture = content.Load<Texture2D>(fileName);
        }
 
        public virtual void Draw(SpriteBatch spriteBatch)
        {
            spriteBatch.Draw(Texture, Position, Sector, color, Rotation, Origin, Scale, effect, Depth);
        }
    }
}
Миниатюры
Прозрачность картинок, спрайтов  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.01.2015, 13:01
Ответы с готовыми решениями:

Прозрачность у спрайтов, pygame
Здравствуйте. Помогите, кто может. Вкратце дело обстоит так: начал писать игру на pygame, пытаюсь...

Прозрачность 2D спрайтов в unity 5
Помогите написать программный код на с# в unuty 5 Даны четыре спрайта кубы красный желтый синий...

Рисование спрайтов, прозрачность (TCanvas, CopyRect)
Вообщем решил попробовать написать небольшую игрушку, но столкнулся с проблемой: написал класс...

Настоящая прозрачность картинок
есть ли способ избежать такой накладки?...

13
58 / 58 / 9
Регистрация: 09.01.2013
Сообщений: 247
31.01.2015, 20:38 2
Прозрачность пикселя задается A-составляющей. Обычно цвет состоит из чертырех компонентов: RGB и A.
Чтобы картинка была прозрачной, удали фон в редакторе (чтобы он стал прозрачным)
0
13 / 13 / 9
Регистрация: 21.08.2014
Сообщений: 44
02.02.2015, 09:19  [ТС] 3
CSharpCraft, в этом том то и дело, что фон у обоих картинок удален, но только одна отображается в игре нормально, в любом редакторе фона не видно...
0
58 / 58 / 9
Регистрация: 09.01.2013
Сообщений: 247
02.02.2015, 10:10 4
Значит во время сохранения проблемы. Некоторые редакторы не могут сохранить прозрачность, либо, если речь идет о фотошопе, вы могли сохранить картинку в формате, который не поддерживает прозрачность. Попробуйте .png

И еще попробуйте GraphicsDevice.BlendState = BlendState.AlphaBlend;
0
13 / 13 / 9
Регистрация: 21.08.2014
Сообщений: 44
02.02.2015, 11:07  [ТС] 5
CSharpCraft, я картинку в фотошопе сохранял в png и gif, и как я уже написал, прозрачность работает с картинкой #2, которую я конвертировал из png в gif онлайн. Тут вопрос в самой картинке, мне интересно почему спрайт-листы (не только этот) так отображаются в игре. Вроде alpha blend идет по умолчанию, после его установки ничего не изменилось.
0
58 / 58 / 9
Регистрация: 09.01.2013
Сообщений: 247
02.02.2015, 11:19 6
Изображение 32 бита на пиксель?
0
Эксперт .NETАвтор FAQ
10410 / 5140 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
02.02.2015, 11:20 7
adfas, http://www.myjanee.com/tuts/save/savexgifs.htm
0
13 / 13 / 9
Регистрация: 21.08.2014
Сообщений: 44
02.02.2015, 12:35  [ТС] 8
CSharpCraft, нет, 8 бит
0
58 / 58 / 9
Регистрация: 09.01.2013
Сообщений: 247
02.02.2015, 15:29 9
Цитата Сообщение от adfas Посмотреть сообщение
CSharpCraft, нет, 8 бит
попробуйте сохранить в 32
0
13 / 13 / 9
Регистрация: 21.08.2014
Сообщений: 44
02.02.2015, 15:51  [ТС] 10
CSharpCraft,

теперь это выглядит так Название: 1.jpg
Просмотров: 66

Размер: 15.2 Кб
0
13 / 13 / 9
Регистрация: 21.08.2014
Сообщений: 44
02.02.2015, 18:00  [ТС] 11
Есть ли у кого-нибудь еще идеи? Хотел реализовать спрайт-эффекты в игре, взял готовый спрайт-лист


1-ый Вариант. PNG превращается вот в это...
Прозрачность картинок, спрайтов


2-ой Вариант. Конвертирую в Gif, получаю нормальный альфа-канал, но цвета и гладкость изображения теряются((
Прозрачность картинок, спрайтов
0
58 / 58 / 9
Регистрация: 09.01.2013
Сообщений: 247
02.02.2015, 18:11 12
Цитата Сообщение от adfas Посмотреть сообщение
теперь это выглядит так
Значит, вы что-то на каком то этапе делаете не так. Попробуйте создать отдельный тестовый проект, и просто загрузить / отрисовать текстуру.
0
13 / 13 / 9
Регистрация: 21.08.2014
Сообщений: 44
03.02.2015, 10:42  [ТС] 13
CSharpCraft,
Вот, чистый проект создал, создал класс TestGame.cs, по сути весь код:
TestGame.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using SharpDX;
using SharpDX.Toolkit;
using SharpDX.Toolkit.Graphics;
 
namespace Test
{
    class TestGame:Game
    {
        GraphicsDeviceManager gdManager;
        SpriteBatch spriteBatch;
 
        public TestGame()
        {
            gdManager = new GraphicsDeviceManager(this);
            gdManager.PreferredBackBufferHeight = 1000;
            gdManager.PreferredBackBufferWidth = 1200;
        }
 
        protected override void LoadContent()
        {
            spriteBatch = new SpriteBatch(GraphicsDevice);
            base.LoadContent();
        }
 
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.Black);
            spriteBatch.Begin();
            spriteBatch.Draw(Texture2D.Load(GraphicsDevice,"wind.png"), new Vector2(0, 0), null, Color.White, 0, new Vector2(0, 0),1f, SpriteEffects.None, 0);
            spriteBatch.End();
            base.Draw(gameTime);
        }
    }
}


Результат + сравнение


Прозрачность картинок, спрайтов
Прозрачность картинок, спрайтов


Прозрачность картинок, спрайтов
Прозрачность картинок, спрайтов


Прозрачность картинок, спрайтов
Прозрачность картинок, спрайтов


Прозрачность картинок, спрайтов
Прозрачность картинок, спрайтов


Прозрачность картинок, спрайтов
Прозрачность картинок, спрайтов


Справа расположены оригинальные спрайт-листы в формате PNG, взятые из гугла, последний спрайт вообще с желтым фоном...
0
13 / 13 / 9
Регистрация: 21.08.2014
Сообщений: 44
03.02.2015, 17:20  [ТС] 14
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

CSharpCraft, спасибо за ответы, решение нашел здесь

C#
1
spriteBatch.Begin();
Добавил BlendStates.NonPremultiplied

C#
1
spriteBatch.Begin(SpriteSortMode.Deferred,GraphicsDevice.BlendStates.NonPremultiplied );
PNG спрайт-лист
Прозрачность картинок, спрайтов
0
03.02.2015, 17:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.02.2015, 17:20
Помогаю со студенческими работами здесь

Прозрачность картинок - слайд шоу
Возникла проблема. Пишу программу. Программа запускается не делает то, что мне требуется. ...

Прозрачность картинок при печати: прозрачные области заливаются белым цветом
Есть 2 gif-картинки, обе с прозрачными областями. Необходимо распечатать их на бумаге с...

Задать прозрачность GameObject, чтобы у дочерних также изменилась прозрачность
Привет. Подскажите, как задать прозрачность GameObject'у, чтобы у дочерних также изменилась...

Создание массива картинок, добавление их во фрейм!(с возможностью переключения картинок кнопкой)
Всем привет, как создать массив картинок? Имею в виду как добавить картинки в массив а потом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru