Eu adoro programar... ¬¬

Okay, exemplo real do caos que é programar...

Contexto: Quero fazer um botão com imagem usando o novo esquema de interface da Microsoft, o XAML...

Problema:
Quero que a imagem fique preto e branco quando o botão estiver desativado (quando não pode ser clicado, similar a quando ele fica com o texto em cinza)... Só que o fundo tem que ser transparente...

Solução: Sabe Deus... Ainda não a achei...

Caos: Para explicar, um trecho tirado de uma conversa de MSN com a Simone (conteúdo não modificado, só com modificação de formatação):
hj implementei as duas ações que faltavam... mas ainda não descobri como colocar a porcaria da imagem transparente e em preto e branco... ainda esbarrei numa situação q achei triste

lembra q te falei que tinha duas linhas de codigo mas q soh uma funcionava e a comentada, obviamente, era a que falava em transparencia??? só para ter idéia:
// _bwImage.DestinationPalette = BitmapPalettes.Gray16Transparent
_bwImage.DestinationFormat = PixelFormats.Gray8

beleza, fiquei encucado e fui pesquisar... Achei tutoriais aplicando em Bitmap, mas não em BitmapImage, nova classe otimizada para XAML...

Encafifei e catei sobre o que estava usando... Descobri que a Palette só funciona se vc usar o format indexado... Aí q vem a maravilha: A Gray256Transparent permite 256 tons de cinza + cor transparente... Total 257 cores (está documentado, inclusive aparecendo quando vc coloca o mouse por cima no VisualStudio...)... Animado, lá fui para o Indexed... O Indexed8 permite 256 cores... Pronto... Não existe a opção com 257 cores... Descontando o fato da numeração esdrúxula (potência de 2 para um, o número para outro), cadê a consistência???? O melhor... Abaixo do Gray256 é o Gray16... E mesmo assim continua o branco lá...

Aí vi que tinha outro atributo que poderia tentar... AlphaThreshold... Tão místico quanto os outros, inclusive na documentação:
The AlphaThreshold value is used to determine what level of opacity will be mapped to the fully transparent color in the converted format. A value of 9.8 implies that any pixel with an alpha value of less than 25 will be mapped to the transparent color. A value of 100 maps all pixels which are not fully opaque to the transparent color.

Não consegui entender o valor místico do 9.8 e sua relação com o 25... Independente disso, mesmo tendo 17 cores (gray16transparent) e 256 indices (indexed8), o raio do botão continua com o fundo branco, ou preto, dependendo do alphaThreshold.... /doh

eu já tô pensando em apelar, abrir o arquivo como bitmap, fazer a matriz de cores que vi em um tutorial e, de alguma forma (que espero ser menos mística que essas) transformar em um BitmapImage...

E aí, eu mereço????

Adoro a Simone... Falando com ela que ia tirar o visto, ela escreveu uma carta para eu apresentar lá no consulado...

Yo Gabba Gabba!
Pior q me falaram que esses vídeos são a minha cara... Aparentemente desperta lembrança de eu fazendo mímicas... Affe, pareço um monstro desengonçado de braços longos??? Correção: Pareço o Elijah, só que fico mais engraçado por causa do meu cabelo... "¬¬ affe Ninguém merece parecer com o moonwalk retardado...

4 comentários:

  1. Você não tinha dito que esse XAML era tudo de bom? Que coisa enrolada essa de 257 cores, 9.8 (gravidade?) e 25!

    Não é por nada não, mas até em OpenGL eu consegui fazer transparências simplesmente carregando arquivos ".png" e ativando o alfa.

    Mas eu acredito que você vai encontrar uma luz algum dia. Não pode ser tão difícil assim, não?

    OBS: cuidado para não deixar o blog "computacional" demais. Esse tópico foi altamente nerd.

    ResponderExcluir
  2. Eu tô gostando do XAML... Mas, de vez em quando, sempre esbarra em uma confusão dessas.... Veja que ele aceita o .png com transparência (o botão colorido): o problema é gerar uma versão dele em preto e branco... Se começar a ficar muito complicado, apelo para 2 imagens png mesmo...

    Obs.: foi tão nerd assim??? achei que dava para acompanhar... rs

    ResponderExcluir
  3. eu achei chato esse...........
    nao chegou a atingir meu nivel de nerdice
    :-P

    ResponderExcluir
  4. Okay okay... Admito que foi nerd então... Mas ainda acho que dá para entender... rs

    ResponderExcluir