1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Bmp в Bc 3.1 For Dos

Тема в разделе "С и С++", создана пользователем LeRoN, 2 апр 2006.

Статус темы:
Закрыта.
  1. LeRoN

    LeRoN Гость

    Репутация:
    0
    Уважаемые знатоки помогите справится с такой проблемой:
    У меня возникла проблема с выводом бмп-картинки на экран...
    а точнее - у меня выводится картинка другими цветами(палитру считываю из файла, может это я и не правильно делаю).

    Код:
    #include <conio.h>
    #include <stdio.h>
    #include <alloc.h>
    
    #define PALETTE_MASK 0x3C6
    #define PALETTE_REGISTER_RD	0x3C7
    #define PALETTE_REGISTER_WR	0x3C8
    #define PALETTE_DATA 0x3C9
    
    unsigned char far *video_buffer = (char far*)0xA0000000L;
    
    typedef struct RGB_color_typ
    {
    unsigned char red;
    unsigned char green;
    unsigned char blue;
    unsigned char x;
    } RGB_color, *RGB_color_ptr;
    
    void set_mode(int mode)
    {
    _asm	{
    mov ah,0
    mov al, BYTE PTR mode
    int 10h
    }
    }
    
    void setpixel(int x, int y, int color)
    {
    video_buffer[((y<<8)+(y<<6))+x]=color;
    }
    
    void Set_Palette_Register (int index, RGB_color_ptr color)
    {
    outp(PALETTE_MASK, 0xFF);
    outp(PALETTE_REGISTER_WR, index);
    outp(PALETTE_DATA, color->blue);
    outp(PALETTE_DATA, color->green);
    outp(PALETTE_DATA, color->red);
    }
    
    void main()
    {
    FILE *f;
    char *ms;
    long int count;
    int num=0;
    int data=0;
    int i, j;
    RGB_color pal[256];
    clrscr();
    printf ("Memory available: %ld bytes\n",farcoreleft());
    unsigned char far* temp_buffer = (unsigned char far *)farcalloc(64000,sizeof(unsigned char));
    if (!(f = fopen ("XZC.bmp","rb")))
    printf("Error");
    fseek(f,54,SEEK_SET);
    for (num = 0; num <256; num++)
    {
    pal[num].red=(getc(f) >>2);
    pal[num].green=(getc(f) >>2);
    pal[num].blue=(getc(f) >>2);
    pal[num].x=(getc(f) >>2);
    Set_Palette_Register(num, (RGB_color_ptr)&pal[num]);
    }
    
    fseek(f,1078,SEEK_SET);
    getch();
    count = 64000;
    while (count >0)
    {
    data =getc(f);
    temp_buffer[--count]=data;
    }
    
    fclose(f);
    set_mode (0x13);
    for (i = 0; i < 200; i++)
    for (j = 0; j < 320; j++)
    setpixel(320-j,i,temp_buffer[((i<<8)+(i<<6))+j]);
    getch();
    set_mode(0x03);
    farfree(temp_buffer);
    }
     
  2. Froex

    Froex Гость

    Репутация:
    0
    Вы не пробовали пользоваться DirectDraw?
     
  3. 62316e

    62316e Гость

    Репутация:
    0
  4. orcommander

    orcommander Гость

    Репутация:
    0
    Бегло глянул на твой код, и вот у тебя смещение в файле на 54 стоит - это для bmp-шки с 24 глубиной, ты в курсе? И... "320-j" я так понимаю ты имеешь в виду обратный порядок строк, но это ведь получится обратный порядок столбцов...
    Попробуй наоборот
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей