Como posso obter o valor hexadecimal de uma coluna de 8 linhas dependendo da cor do plano de fundo?

0

Eu tenho uma planilha que estou usando para ajudar a visualizar um mapa de bit de caractere para cada caractere ASCII. Para uma fonte de 5x7, eu uso 5 células de largura (colunas) e 7 células de altura (linhas). Em seguida, marquei o fundo preto para cada célula em uma coluna de 8 linhas, para representar os bits de um byte, onde cada bit é um pixel, e um fundo preto significa um pixel que é ON . Então, eu crio uma matriz de bytes que será minha representação de caractere. Eu tenho que fazer isso por 95 caracteres (valores ASCII), para cada tamanho de fonte que eu quero.

O problema é que eu tenho que olhar para cada coluna do caractere e determinar seu valor binário e, em seguida, descobrir o valor hexadecimal. Então, tentar descobrir 495 bytes para uma tabela de cinco caracteres torna-se um trabalho tedioso. Eu quero saber se existe uma função de planilha que eu poderia escrever que iria inspecionar a cor de fundo de uma célula, se preto seria definir o n th bit de uma variável e, em seguida, criar o valor hexadecimal de essa coluna abaixo.

TL; DR Não tenho experiência de escrita de função no Excel. Eu estou trabalhando com uma tela de LCD. Eu tenho uma planilha com todos os meus personagens - onde cada pixel que é ON teria a cor de fundo preta. 1 célula = 1 bit de um byte. Eu preciso de uma função que me dará um valor hexadecimal de uma coluna dependendo se a célula de plano de fundo é preta ou não. Prossiga para ilustrações.

Aqui está um exemplo de um caractere 'A' de 5x7 na minha planilha. Um *** representa que uma cor de fundo de células é preta, caso contrário, branco. (Não seria um problema adicionar algo como um valor de célula de 1 a cada célula que tenha uma cor de fundo preta, se necessário, para tornar isso uma função mais fácil):

   ____________________
B0|   |***|***|***|   | (row 0)
  |-------------------|
B1|***|   |   |   |***| (row 1)
  |-------------------|
B2|***|   |   |   |***| (row 2)
  |-------------------|
B3|***|***|***|***|***| (row 3)
  |-------------------|
B4|***|   |   |   |***| (row 4)
  |-------------------|
B5|***|   |   |   |***| (row 5)
  |-------------------|
B6|***|   |   |   |***| (row 6)
  |-------------------|
B7|___|___|___|___|___| (row 7)
   7E  09  09  09  7E   (row 8)

A matriz de bytes seria então:

byte A[] = { 0x7E, 0x09, 0x09, 0x09, 0x7E };

Versão de pseudo-código (para uma coluna):

char hex = 0x00;
for(int bI = 0; bI < 8; bI++)
{
    if(cell[bI].BackgroundColor == Black)
    {
        hex |= (0x01 << bI;
    }
}
row8.Text = hex.ToString("X2");
    
por Kcvin 22.03.2013 / 19:17

1 resposta

5

Você pode adicionar uma coluna para indicar as posições de bit & adicione o número de 1 s (bits). Para o meu exemplo abaixo, o que fiz foi:

  1. Crie um formato condicional para o meu intervalo 5x7, em que, se eu inserir 1 em uma célula, ele fica preto (usei laranja para poder ver os 1s).

  2. Adicioneumacolunaàesquerdadocaractereparamarcarasposiçõesdebitnodecimal1,2,4,8,16,32,64(vejaacolunaB).

  3. Paraobterosvaloreshexadecimais,useessafórmulanaparteinferior:

    =DEC2HEX(SUMPRODUCT($B$2:$B$8,D2:D8),2)

    Onde:

    • $ B $ 2: $ B $ 8 é o intervalo que contém as posições de bit em decimal
    • D2: D8 é a primeira coluna no intervalo 5x7
    • 2 é o número de dígitos que você deseja exibir

Se você não quiser criar uma coluna extra, incorpore as posições de bit na fórmula, assim:

=DEC2HEX(SUMPRODUCT({1;2;4;8;16;32;64},G1:G7),2)

Ex:

ref link

    
por 23.03.2013 / 07:30