[C++] Malicious Leet Library (Sua biblioteca de imagens)

Sub-fórum especial para usuários que querem discutir/aprender programação, como as linguagens C/C++/C#, Java, HTML, e por aí vai...
Rico
Mensagens: 2354
Registrado em: Dom Set 10, 2006 11:49 am
Answers: 0
17
Localização: Atrás do DU0
Contato:

[C++] Malicious Leet Library (Sua biblioteca de imagens)

Mensagem por Rico »

Nem sei como começar o tópico :P
Desculpem-me, mas se vocês esperam algo de mim para cena doom com um wad... esqueçam, no máximo um que está por vir com parceria com Zman.
BrDOOM Chat 2? -> Comingo Soon, resolvendo se faço C# ou C++ (mas enquanto isso eu pretendo entrar na faculdade, então, esperem).

Explicação

Nome do Grupo.

O nome veio de uma brincadeira na verdade, no técnico feliz da vida com meus 3 amigos jogando Worms 4 Mayhem, cada um criou um time, sempre tem um no grupo que não sabe o que escrever, Abóbora, colocou inocentemente Malicious L33T no nome de uma das minhocas. Assim ao ler, rimos, e assim nasceu o nome do grupo de programadores imaturos, irresponsáveis, e que fizeram um TCC com 2 pessoas a menos do limite mínimo e com apenas 1 computador de meia tijela que demorava 3 horas pra compilar um simples programa.

Nome da Biblioteca e por quê.

Tenho meus motivos:

: Por puro prazer de conhecimento.
: Existe bibliotecas de TGA antigas, :/, totalmente funcionais, mas teoricamente difíceis até de se usar... aí eu pensei, por quê não?!
: É uma DLL/SO (<- e?) Faça seu programa sem problemas!

A Biblioteca

A Malicious Leet tem um orgulho de apresentar uma biblioteca de imagens, de fácil uso!

Funções:
Ler TGA----------> 10% ):
Após criar a biblioteca usando as Especificações TGA 2.0, mesmo asism errei o código e lê apenas TGA 32 Bits lol (não menos)
Ler BMP----------> 0% (SUX, mas acho que não posso excluir)
Ler PNG----------> 0% (já existe uma boa lib, só implementar comandos)
Ler DDS----------> 0% (DirectDraw Surface, tem boa qualidade)
Ler PCX----------> 0% (Antigo, mas ainda é usado)
Ler JPEG---------> 0% (Bosta, mas blz)
Ler GIF----------> 0% (?)
Ler LUMP IMAGE---> 0% (Bem possível, tenho muitos códigos de Lump Images comigo)
Dicas de outras imagens existentes serão bem vindas, PSD POSSO pensar no caso.

Escrever? Bem possível ter funções, mas não vou criar um editor.
[xfire]p0br3[/xfire]
Futuro PC:

CPU: AMD Athlon x2 64Bits 7750 2.7GHz Black Edition
MoBo: Asus M2 ou M3.
VGA: XFX Geforce 9800 GTX 512MB ou 1GB/256Bits
HD: Seagate 1TB
PSU: ATX 600w REAIS
RAM: 4GB Ram DDR2 Kingstone @800MHz [2x2Gb]
Rico
Mensagens: 2354
Registrado em: Dom Set 10, 2006 11:49 am
Answers: 0
17
Localização: Atrás do DU0
Contato:

Re: [C++] Malicious Leet Library (Sua biblioteca de imagens)

Mensagem por Rico »

Toda a API vai ser reescrita.
Mas vou dar um exemplo do que ela já fazia.
Versão 0.0.1 Ou seja, BEM PRIMITIVO!

Código: Selecionar todos

#include "ml\mltga.h"

int main(int argc, char *argv[]) {
    TGA tga;

    if(tga.LoadTGA(argv[1]) != TGA_OK) { // Carrega TGA
        return(0);
    }
    printf("%d BPP\n",tga.GetBPP()); // Pega Bits Per Pixel
    printf("%d Width, %d Height \n",tga.GetWidth(),tga.GetHeight()); // Pega tamanho da imagem
    printf("%X",tga.GetImg()); // Pega a IMAGEM, como não mexemos ainda com gráfico neste exemplo... só vai ver Unsigned Char
    printf("%X",tga.GetPalette()); // Pega Paleta de cores, também Unsigned Char.
    return(0);
}
Hmm, mas queremos ver imagens!!
Tá bom! Tomem!
Imagem

Segue o Código do demo acima:

Código: Selecionar todos

/// Mostrando como funciona MLTGA. Usando OpenGL

#if defined(_WIN32)
#include <windows.h>
#endif
#include <GL\glut.h>
#include "ml\mltga.h"

GLuint texID;

/// Vou criar um Loader para textura, afinal o MLTGA carrega a imagem

GLuint LoadTexture(char *nome) {
    TGA tga;
    GLuint tex;

    if(tga.LoadTGA(nome) != TGA_OK)
        return(-1);

    glGenTextures(1,&tex);
    glBindTexture(GL_TEXTURE_2D,tex);

    if(tga.GetBPP() == 24)
        glTexImage2D(GL_TEXTURE_2D,0,3,tga.GetWidth(),tga.GetHeight(),0,GL_RGBA,GL_UNSIGNED_BYTE,tga.GetImg());
    if(tga.GetBPP() == 32)
        glTexImage2D(GL_TEXTURE_2D,0,4,tga.GetWidth(),tga.GetHeight(),0,GL_RGBA,GL_UNSIGNED_BYTE,tga.GetImg());
    else
        return -1;

    /// Setup de renderizaçao
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);

    return tex;
}

static void displayTGA() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();

    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D,texID);

    /// Vamos desenhar o quadrado... O:
    glTranslatef(0.0,0.0,-5.0);

    glBegin(GL_QUADS); // Quadrado com resoluçoes FLOAT (sim EXISTE imgs de loucos com numeros quebrados)
        glTexCoord2f(0.0f,0.0f);
        glVertex2f(-1.0f,-1.0f);

        glTexCoord2f(1.0f,0.0f);
        glVertex2f(1.0f,-1.0f);

        glTexCoord2f(1.0f,1.0f);
        glVertex2f(1.0f,1.0f);

        glTexCoord2f(0.0f,1.0f);
        glVertex2f(-1.0f,1.0f);
    glEnd();

    glDisable(GL_TEXTURE_2D);
    glutSwapBuffers();
}

static void reshape(int w,int h) {
    if(h == 0)
        h = 1;

    glViewport(0,0,(GLsizei)w,(GLsizei)h);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0,w/(GLdouble)h,0.1,1000.0);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glutPostRedisplay();
}

GLuint init(char *filename) {
    glClearColor(0.5f,0.5f,0.5f,1.0f); // RGBA
    glShadeModel(GL_SMOOTH);

    glEnable(GL_DEPTH_TEST);

    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

    texID = LoadTexture(filename);
    if(!texID)
        exit(EXIT_FAILURE);
}

void cleanup() {
    glDeleteTextures(1,&texID);
}

GLint main(int argc, char *argv[]) {
    if(argc < 2) {
        fprintf(stderr,"Sintax: %s <filename.tga>\n",argv[0]);
        return(-1);
    }

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowSize(640,480);
    glutCreateWindow("Malicious Leet TGA Texture Demo");

    atexit(cleanup);
    init(argv[1]);

    glutReshapeFunc(reshape);
    glutDisplayFunc(displayTGA);

    glutMainLoop();

    return(0);
}
[xfire]p0br3[/xfire]
Futuro PC:

CPU: AMD Athlon x2 64Bits 7750 2.7GHz Black Edition
MoBo: Asus M2 ou M3.
VGA: XFX Geforce 9800 GTX 512MB ou 1GB/256Bits
HD: Seagate 1TB
PSU: ATX 600w REAIS
RAM: 4GB Ram DDR2 Kingstone @800MHz [2x2Gb]

Voltar para “Programação”