DicasBCB
Bem-vindo: Seg Set 06, 2010 1:18 pm

Todos os horários são GMT - 3 horas




Criar novo tópico Responder  [ 9 mensagens ] 
Autor Mensagem
 Título: Converter arquivo bmp em string
MensagemEnviado: Ter Jun 05, 2007 11:30 pm 
Offline

Registrado em: Ter Mai 02, 2006 1:33 pm
Mensagens: 32
Olá pessoal, gostaria de saber como faço, em win api, para transformar arquivos bmp (HBITMAP...) em string.
Desde já agradeço.


Voltar ao topo
 Perfil  
 
 Título:
MensagemEnviado: Qua Jun 06, 2007 5:55 pm 
Offline
Hitokiri Battousai
Avatar do usuário

Registrado em: Ter Ago 30, 2005 10:05 am
Mensagens: 1070
vc qr transformar uma handle de imagem HBITMAP em texto binário certo? pq um arquivo já está em texto binário...
bom, pra isso vamos usar basicamente a função GetDIBits pra pegar os bits e dps criar uma trexo da memória com tds estruturas necessárias pra armazenar um arquivo bitmap, isso é o ideal se vc quiser salvar um arquivo, mas se vc precisar apenas dos dados (caso queira transferí-lo via sockets por exemplo) vc vai precisar só dos bits e da resolução msm...
vc tbm vai precisar dum HDC associado com o HBITMAP, se ñ tiver vc pode criar um assim:
Código:
HDC hDCS,hDCImg;
hDCS = GetDC(0);
hDCImg = CreateCompatibleDC(hDCS);
SelectObject(hDCImg, hBmpImp); //o hBmpImp é o HBITMAP necessário
ReleaseDC(0, hDCS);
d qlqr jeito vamos precisar da resolução tbm, caso ñ a tenha vc pode obtê-la com a função GetObject assim:
Código:
DWORD dwImgX,dwImgY;
BITMAP bmp;
GetObject(hBmpImg, sizeof(bmp), &bmp);
dwImgX = bmp.bmWidth;
dwImgY = bmp.bmHeight;
Agora sim vamos pegar o mapa de bits, supondo q seja 32bits e tenha apenas um plano:
Código:
BYTE*bits;
BITMAPINFO bi;
ZeroMemory(&bi, sizeof(bi));
bi.bmiHeader.biSize = sizeof(bi.bmiHeader);
bi.bmiHeader.biWidth = dwImgX;
bi.bmiHeader.biHeight = dwImgY;
bi.bmiHeader.biPlanes = 1;
bi.bmiHeader.biBitCount = 32;
bi.bmiHeader.biCompression = BI_RGB;
bi.bmiHeader.biSizeImage = dwImgX * dwImgY * 4; //o 4 representa 32 bits em bytes
bi.bmiHeader.biXPelsPerMeter = 2835; //isso representa 72 dpi horizontal
bi.bmiHeader.biYPelsPerMeter = 2835; //isso representa 72 dpi vertical
bits = (BYTE*)GlobalAlloc(GMEM_FIXED, bi.bmiHeader.biSizeImage);
GetDIBits(hDCImg, hBmpImg, 0, dwImgY, bits, &bi, DIB_RGB_COLORS);
agora temos os bits, se ñ for preciso manter uma estrutura de arquivo isso já basta, mas se vc for escrever num arquivo vc precisa da estrutura BITMAPFILEHEADER:
Código:
BITMAPFILEHEADER bfh;
ZeroMemory(&bfh, sizeof(bfh));
bfh.bfType = 'MB'; //isso é BM ao contrário, já q os x86 trabalham com little endian (invertem os números)
bfh.bfOffBits = (sizeof(bfh)) + bi.bmiHeader.biSize;
bfh.bfSize = bfh.bfOffBits + bi.bmiHeader.biSizeImage;
agora se vc quiser salvar no arquivo basta salvar respectivamente o conteúdo das variáveis bfh, bi.bmiHeader e dps bits, se for realmente necessário um únicro trexo consecutivo de dados, basta concatenar esses dados assim:
Código:
char*txt;
txt = (BYTE*)GlobalAlloc(GMEM_FIXED, bfh.bfSize);
CopyMemory(txt, &bfh, sizeof(bfh));
CopyMemory(txt + sizeof(bfh), &bi.bmiHeader, bi.bmiHeader.biSize);
CopyMemory(txt + bfh.bfOffBits, bits, bi.bmiHeader.biSizeImage);
eu ainda ñ testei o código xD~ fiz conforme fui lembrando, talvez dê algum erro d conversão d valor ou falte alguma coisa, se vc ñ conseguir se virar volte a postar os problemas...

o/
Tiago

_________________
B) Pod Crê 8)
Imagem


Voltar ao topo
 Perfil  
 
 Título:
MensagemEnviado: Qua Jun 06, 2007 11:29 pm 
Offline

Registrado em: Ter Mai 02, 2006 1:33 pm
Mensagens: 32
Obrigado Tiago, já deu uma luz, antes de iniciar os testes, deixe eu explicar minha pretensão:
Estou querendo mandar um imagem no formato bitmap atravéz da porta serial pela função WriteFile().
Como eu sei que essa função envia uma string pela porta serial, acredito que basta converter bmp em string para funcionar.
Se eu tiver falando alguma besteira me corija por favor.


Voltar ao topo
 Perfil  
 
 Título:
MensagemEnviado: Qui Jun 07, 2007 8:28 am 
Offline
Hitokiri Battousai
Avatar do usuário

Registrado em: Ter Ago 30, 2005 10:05 am
Mensagens: 1070
infelizmente esses dados são binários, vc deve saber q a porta serial termina com '\n' certo? então, há a possibilidade d várias incidências desse caractere num texto binário, isso vai estragar seu protocolo d comunicação, então vc ñ deve só convertê-lo pra string, mas tbm fazer uma criptografação d tal modo q omita esse tp d caractere, posso citar base64, urlencode, ou simplesmente addslashes...

_________________
B) Pod Crê 8)
Imagem


Voltar ao topo
 Perfil  
 
 Título: Re: Converter arquivo bmp em string
MensagemEnviado: Qui Ago 07, 2008 10:32 pm 
Offline
Hitokiri Battousai
Avatar do usuário

Registrado em: Ter Ago 30, 2005 10:05 am
Mensagens: 1070
Errata: leia-se hBmpImg onde estiver escrito hBmpImp

_________________
B) Pod Crê 8)
Imagem


Voltar ao topo
 Perfil  
 
 Título: Re: Converter arquivo bmp em string
MensagemEnviado: Qui Fev 04, 2010 6:40 pm 
Offline

Registrado em: Qui Fev 04, 2010 6:36 pm
Mensagens: 2
Ola, amigos preciso de o contrario do nosso colega, ou seja de txt para bm/jpg/etc..

Eu gerei um relatorio em um arquivo txt e gostaria de pegar este arquivo e gerar uma imagem em bmp/jpg/etc.. podendo salvar em qualquer lugar. tipo assim:

arquivo relatorio.txt:
-------------------
CONTRAFILE 25,00
FILE 30,00
PICANHA 30,00
COSTELA 15,00

então o programa ficaria +- assim :

imagem=: geraimagem("relatorio.txt","JPG")
save(imagem,"c:\imagens\")

Desde já agradeço a atenção.


Voltar ao topo
 Perfil E-mail  
 
 Título: Re: Converter arquivo bmp em string
MensagemEnviado: Sex Fev 05, 2010 5:55 am 
Offline
Hitokiri Battousai
Avatar do usuário

Registrado em: Ter Ago 30, 2005 10:05 am
Mensagens: 1070
Se o conteúdo do arquivo é literalmente texto, você deve escrevê-lo na imagem, pode fazer isto usando TextOut() ou DrawText(), depois o processo para salvar este arquivo em bmp é o mesmo acima.

_________________
B) Pod Crê 8)
Imagem


Voltar ao topo
 Perfil  
 
 Título: Re: Converter arquivo bmp em string
MensagemEnviado: Sex Fev 05, 2010 3:33 pm 
Offline

Registrado em: Qui Fev 04, 2010 6:36 pm
Mensagens: 2
Entendo, amigo, mas como criar o arquivo de imagem com quais dados, cor, fundo, etc..
Voce nao teria alguma rotina como exemplo e no caso com quais libs.
eu Uso o xharbour com bcc.
obrigado.


Voltar ao topo
 Perfil E-mail  
 
 Título: Re: Converter arquivo bmp em string
MensagemEnviado: Sáb Fev 06, 2010 11:45 am 
Offline
Hitokiri Battousai
Avatar do usuário

Registrado em: Ter Ago 30, 2005 10:05 am
Mensagens: 1070
Criando um Canvas conforme métodos tradicionais, clique na pesquisa search.php para ver diversos tópicos relacionados ao assunto

_________________
B) Pod Crê 8)
Imagem


Voltar ao topo
 Perfil  
 
Exibir mensagens anteriores:  Ordenar por  
Criar novo tópico Responder  [ 9 mensagens ] 

Todos os horários são GMT - 3 horas


Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante


Enviar Mensagens: Proibido
Responder Mensagens: Proibido
Editar Mensagens: Proibido
Excluir Mensagens: Proibido
Enviar Anexos: Proibido

Procurar por:
Ir para:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduzido por: Suporte phpBB