powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Transparent backgrpound - BLACK?
21 сообщений из 21, страница 1 из 1
Transparent backgrpound - BLACK?
    #32280087
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Небольшая проблема с графикой на странице.
Есть SVG, на его основе создается битмап и пишется в поток страницы, задача - сделать фон этого битмапа прозрачным.
Пробовал

Код: plaintext
newbmp.MakeTransparent(newbmp.GetPixel( 1 , 1 ));


Не работает. Фон становится черным при любых установках цвета.

Если кто встречал подобное или знаете как обойти - подскажите плиз, горю.

Спасибо.
...
Рейтинг: 0 / 0
Transparent backgrpound - BLACK?
    #32281199
Фотография greenapple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там, по-моему, нужен еще слой между "подложкой" - это она черная и собственно картинкой, слой этот должен иметь цвет страницы, белый, например. Пример из MSDN у меня нифига не работал, там есть статья по этому поводу, может у тебя заработает.
...
Рейтинг: 0 / 0
Transparent backgrpound - BLACK?
    #32281246
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой пример? Я вот один сейчас колупаю, но пока что no luck.
...
Рейтинг: 0 / 0
Transparent backgrpound - BLACK?
    #32281303
Фотография greenapple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так а вариант с дополнительным слоем чем плох? Я колупался тоже долго, у меня было так: клиент аплодил файл в базу, то есть вообще неизвестно, что за файл, надо было отсекать лишнее по размерам в пикселах и килобайтах, типу, ну и среди прочего мог аплоадится прозрачный гиф. Поскольку они у меня тоже становились серыми, единственное, что я нашел нормальное, кроме варианта смены палитры, делать квадрат в размер картинки, и на него класть имидж. Получение углового пиксела нифига не работало в моем случае, потому что имидж из базы, он уже с этой "подложкой" у меня из BLOB вынимался. И потом, когда не знаешь, что за файл, не угадаешь, что в этом угловом пикселе.
Вот что-то
А вот пример, и по-моему был еще один, но я что-то не нашел статья
...
Рейтинг: 0 / 0
Transparent backgrpound - BLACK?
    #32281311
Магнус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как сделать этот слой? У меня опыта с GDI предельно мало, толком даже не знаю какие классы использовать. Профиль у меня не тот. А вот понадобилось.
Система у меня еще более мутная но похожа на твою:
Клиент аплоадит файл, но не гиф а SVG, в этом формате он и заливается в базу(ntext). На другой странице читается, парсится, пишется в стрим страницы, для каждого элемента создаются линки, но эт долгая история. С него и создается битмап, но этот жуткий белый фон...
Пример этот я уже смотрел, не совсем то, хотя пищу для размышления получил, а вот за статейку спасибо, очень интересно, попробую.
...
Рейтинг: 0 / 0
Transparent backgrpound - BLACK?
    #32281321
Фотография greenapple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Dim Sponsor As New Sponsor()
Dim SponsorLogo As System.Drawing.Image = Sponsor.GetLogo(SponsorID)

Dim NewWidth As Integer = width 
Dim NewHeigth As Integer = SponsorLogo.Height / (SponsorLogo.Width / width)

Dim Source As New Bitmap(SponsorLogo) // берем картинку
Dim Destination As New Bitmap(NewWidth, NewHeigth) // создаем  2 -ю картинку нужного размера 

Dim Grx As Graphics = Graphics.FromImage(Destination) //переводим Bitmap в Graphics 
Dim objBrush = New SolidBrush(Color.White) // создаем белую кисть
Grx.FillRectangle(objBrush,  0 ,  0 , NewWidth, NewHeigth) // заливаем белым область от угла до угла

Grx.DrawImage(Source, New Rectangle( 0 ,  0 , NewWidth, NewHeigth)) // сверху кладем картинку и дальше пишем в поток

Response.ContentType =  "image/gif" 
Destination.Save(System.Web.HttpContext.Current.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif)
Grx.Dispose()
Destination.Dispose()
Source.Dispose()
...
Рейтинг: 0 / 0
Transparent backgrpound - BLACK?
    #32281322
Фотография greenapple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
слой здесь как бы Rectangle, хотя это не слой, конечно, формально
...
Рейтинг: 0 / 0
Transparent backgrpound - BLACK?
    #32282083
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эх. попробовал. Не работает. Все равно фон остается белым. Если с MakeTransparent, как и было - черный. Нарыл тут кое что по прозрачности.
И тебя по ColorMatrix инфы нету? В смысле где там альфа где цвета? Не хочу наугад тыкать.
...
Рейтинг: 0 / 0
Transparent backgrpound - BLACK?
    #32282146
Фотография greenapple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот есть неплохая статья , правда в самом нужном месте автор обзывается и отсылает к MSDN.

Тем не менее, средствами GDI+ создать GIF с прозрачностью можно. Это потребует прямой работы с битами изображения, так как изображение должно будет содержать не более 256 цветов и оставаться в индексном формате. Только тогда кодек распознает первый цвет в таблице цветов, содержащий 0 в поле Alpha, как прозрачный, и правильно сохранит файл. Настоящих комсомольцев отсылаю к соответствующим статьям Knowledge Base с полным описанием технологии процесса:

INFO: GDI+ GIF Files Are Saved Using the 8-Bpp Format (Q318343)
HOW TO: Save a .gif File with a New Color Table By Using GDI+ (Q315780)
HOW TO: Save a .gif File with a New Color Table By Using Visual C# .NET (Q319061)
...
Рейтинг: 0 / 0
Transparent backgrpound - BLACK?
    #32282262
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, щас посмотрю.
Скажи мне толко одну вещь: У тебя это когда нить работало?
...
Рейтинг: 0 / 0
Transparent backgrpound - BLACK?
    #32282280
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучшим вариантом выходит, через атрибуты и матрицу цветов заменять белый на альфа. Надо порпобовать.
...
Рейтинг: 0 / 0
Transparent backgrpound - BLACK?
    #32282329
Фотография greenapple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ты заменишь белый на альфа, у тебя опять просветится черная подложка :) В том варианте, который я дал, работало, то есть неизвестный прозрачный имидж нужно было просто вывести корректно другого размера, на нужном и заранее известном фоне, белого цвета. Копать дальше в моем случае смысла не имело, потому что, фон однозначно белый. И потом ресур публичный, затратные операции с GDI не очень-то нужны, там и так без кэширования хватает. То есть это скорее из разряда "знаете как обойти", чем прямое решение проблемы.Я вчера даже где-то читал, что это баг такой.
У тебя задача посложнее...
...
Рейтинг: 0 / 0
Transparent backgrpound - BLACK?
    #32282616
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все еще интереснее. Страница то не просто синяя, а с обоями. Т.е. просто прицепить фон нужного цвета не катит. Пока, для нового заказа потребовалось менять весь лейаут, страницы захотели тупо черными, фон я черный прилепил. Но это только для данного конкретного клиента, а далее надо решать.
Я щас пробую сделать прозрачный фон в процессе парсения SVG а не после него. Если сростется опубликую .
С этой подложкой не совсем понятно. Где в таком случае, в этой иерархии находятся обои? Они подложкой не являются? И почему она черная?
...
Рейтинг: 0 / 0
Transparent backgrpound - BLACK?
    #32282650
Фотография greenapple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут тема интересная, толку правда от маловато
Is someone From MS GDI+ team reading this ? (transparent Gifs)
...
Рейтинг: 0 / 0
Transparent backgrpound - BLACK?
    #32283286
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, но у меня как раз наоборот :).
Сделать прозрачный гиф уменя получилось, но саму картинку, не фон. Полупрозрачная картинка на белом фоне - без проблем, а вот прозрачный фон... Пока мучаюсь.
Так все-таки, что с подложкой? Это что то вроде Z-Ordera? Почему при подключении альфа, она копает аж до черного? Ведь цвета должны смешиваться.
...
Рейтинг: 0 / 0
Transparent backgrpound - BLACK?
    #32283504
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Черт. Все перекопал. Немного переделал парсер. Теперь вместо конвертирования "потом" пытаюсь добавить прозрачность сразу в парсере. Путь описанный в статье(равно как и некоторые другие) работает для картинки. Но если пытаюсь применить ту же технологию к фону(перед конструированием элемнтов создаю начальный слой с прозрачностью), он тупо перекрашивается в черный.
Кстати, в последней статье, похоже, определились что это действительно баг, хотя .NET команда этого не признает, но и подходящего способа выдать неможет. Сьезжают. :)
...
Рейтинг: 0 / 0
Transparent backgrpound - BLACK?
    #32283573
Фотография greenapple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну так я ж писал тебе, что если ты заменишь белый на альфа, у тебя опять просветится черная подложка. В такой ситуации лучше сосредоточиться, напрячься и захотеть сделать как-нибудь по другому :)
...
Рейтинг: 0 / 0
Transparent backgrpound - BLACK?
    #32283766
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, да. Но раньше я его конвертировал и от белого фона оставались уродливые пикселы по краям. Сейчас он черный изначально. Хоть что то.
Основная проблема в том что для страницы изначально не существует обьекта GRaphics, на котором можно было бы все это малевать. А все примеры для WinForms :(. В том то и заковыка. Уже и незнаю куда копать.
На "по-другому" сейчас к сожалению нет времени, это потребыет значительной переработки и других страниц а во вторник должно быть готово. Осталась только одна эта хрень.
А если как нибудь взять исходный rect со страницы? Т.е. с того места где должен быть пикчер. Создать на его основе Gr, и на нем уже рисовать.
Что думаешь? Возможно ли такое?
...
Рейтинг: 0 / 0
Transparent backgrpound - BLACK?
    #32283786
Фотография greenapple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, так кстати, тоже можно. Надо кроме Source и Destination сделать еще один Bitmap Middle
и перед Grx.DrawImage(Source, New Rectangle(0, 0, NewWidth, NewHeigth))
сделать Grx.DrawImage(Middle, New Rectangle(0, 0, NewWidth, NewHeigth)), я попробовал, сквозь верхний слой текстура просвечивает
...
Рейтинг: 0 / 0
Transparent backgrpound - BLACK?
    #32283787
Фотография greenapple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim Middle As New Bitmap("path"), то есть можно взять именно нужную текстуру. Хорошо, если за 2 строки кода можно это решить :)
...
Рейтинг: 0 / 0
Transparent backgrpound - BLACK?
    #32283854
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит нужно маленько посчитать. Там текстура неоднородная. Перливается
сверху-вниз темно-синий->синий. T.e. надо еще нужный кусок вычислить.
А как быть тогда с разными разрешениями? Тейбл на странице расползется, участок будет уже другой. Блин. Под разрешение тоже придется пересчитывать.
Вот кстати, только что нарыл преинтереснейший материалец! ОНО! В самую точку:
ASP.NET & GDI+
Но с меня на сегодня зватит. В понедельник разберусь.
Еще раз спасибо за участие! До понедельника!
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Transparent backgrpound - BLACK?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]