• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Bmp в Bc 3.1 For Dos

  • Автор темы LeRoN
  • Дата начала
Статус
Закрыто для дальнейших ответов.
L

LeRoN

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

Код:
#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);
}
 
F

Froex

Вы не пробовали пользоваться DirectDraw?
 
6

62316e

Попробуй тут:
 
O

orcommander

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!