gerador de BMPs
Publicado por Rafael 17/10/2008
[ Hits: 6.546 ]
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();
   }
};
MakeInt - gerador de wordlist numérica
FileCopy - Copiador de Arquivo de Texto
Faça um programa em c++ gere um arquivo e depois leia usando um gerador de numeros do tipo s
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?
Instalação dualboot Windows 11 e Debian 13 (0)
Programa fora de escala na tela do pc (33)
Eu queria adicionar a incon do wifi e deixa transparente no fluxbox no... (0)









