gerador de BMPs
Publicado por Rafael 17/10/2008
[ Hits: 6.545 ]
Homepage: nenhum
Espero que o seu uso seja simples: forneça
--> um nome para o arquivo BMP,
--> largura e altura da imagem
--> um vetor [][][3] de float com as cores para o construtor
/*
* Copyright (C) 2008, 2008 Rafael Siqueira Telles Vieira
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* License: http://www.lia.ufc.br/~rafaelstv/licenca_GPL_pt.txt
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*
*/
/*
Exemplo de uso: Gera um quadrado verde
#include <stdio.h>
#include "bitmap.hpp"
int main(int argc, char**argv)
{
float ***imagem;
int i,j;
imagem = new float**[100];
for (i=0;i<100;i++)
{
imagem[i] = new float*[100];
for (j=0;j<100;j++)
{
imagem[i][j] = new float[3];
imagem[i][j][0]=0.0f;
imagem[i][j][1]=1.0f;
imagem[i][j][2]=0.0f;
}
}
Bitmap *bmp;
bmp = new Bitmap(argv[1], 100, 100, imagem);
}
*/
#include <iostream>
#include <fstream>
using namespace std;
class Bitmap
{
private:
char* nome;
int largura;
int altura;
float ***imagem;
ofstream *arquivo;
public:
Bitmap(char* nome, int largura, int altura, float ***imagem)
{
this->nome = nome;
this->largura = largura;
this->altura = altura;
this->imagem = imagem;
arquivo = new ofstream(nome, ios::app);
criaBMP();
}
void escreveByte(char c)
{
(*arquivo) << c;
}
char converteCor(float espectro)
{
return ((char)((int) (255.0*espectro)));
}
void escreveCor(float *cor)
{
escreveByte(converteCor(cor[2]));
escreveByte(converteCor(cor[1]));
escreveByte(converteCor(cor[0]));
}
void escreveCabecalho()
{
(*arquivo) << 'B';
(*arquivo) << 'M';
int tamanho = (largura * altura * 3) + 54; // 54 bytes para o cabecalho do BMP
escreveInt(tamanho);
escreveInt(0);
escreveInt(54);
escreveInt(40);
escreveInt(largura);
escreveInt(altura);
escreveShort(1);
escreveShort(24);
escreveInt(0);
escreveInt(0);
escreveInt(0);
escreveInt(0);
escreveInt(0);
escreveInt(0);
}
void escreveShort(short numero)
{
char* t = (char*) №
(*arquivo) << t[0];
(*arquivo) << t[1];
}
void escreveInt(int numero)
{
char* t = (char*) №
(*arquivo) << t[0];
(*arquivo) << t[1];
(*arquivo) << t[2];
(*arquivo) << t[3];
}
void criaBMP()
{
int i,j;
escreveCabecalho();
for (i=altura-1;i>=0;i--)
for(j=0;j<largura;j++)
escreveCor(imagem[j][i]);
(*arquivo).close();
}
};
Agenda eletrônica completa em C
Listar arquivos e diretórios com suas propriedades
Leitura de arquivo texto separando as colunas
Função readConf. Ler arquivos de configuração.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?









