Hello this is Ronald
I use Borland c++ 3.1
I would like to know how to display images in DOS
Hello this is Ronald
I use Borland c++ 3.1
I would like to know how to display images in DOS
True DOS: Use mode 13
Console DOS: Not possible
MagosX.com
Give a man a fish and you feed him for a day.
Teach a man to fish and you feed him for a lifetime.
Hello this is Jason
I use MSVC++ 6
Read this.
#include <dos.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
char far *Screen;
//Sets the display to VGA 320x200x256
void VGAScreen (){
union REGS r;
r.h.ah = 0;
r.h.al = 0x13;
int86(0x10, &r, &r);
return;
}
//Goes back to textmode
void TextScreen (){
union REGS r;
r.h.ah = 0;
r.h.al = 0x3;
int86(0x10, &r, &r);
return;
}
//This sets a DAC register to a specific Red Green Blue-value
int SetDAC (unsigned char DAC, unsigned char R, unsigned char G, unsigned char B)
{
outportb (0x3C8, DAC);
outportb (0x3C9, R);
outportb (0x3C9, G);
outportb (0x3C9, B);
return 0;
}
int LoadBMP (){
struct BMPHeader {
unsigned short bfType;
long bfSize,
bfReserved,
bfOffBits,
biSize,
biWidth,
biHeight;
unsigned short biPlanes,
biBitCount;
long biCompression,
biSizeImage,
biXPelsPerMeter,
biYPelsPerMeter,
biClrUsed,
biClrImportant;
} Header;
FILE *BMPFile;
unsigned char c, Palette[256][4];
char *filename = "test.bmp";
unsigned int offset, lines, paddedWidth;
//This checks for the file
BMPFile = fopen (filename, "rb");
if (BMPFile == NULL) {
printf ("Cant open file.");
return 1;
}
//Read the headerinformation
fread (&Header, 54, 1, BMPFile);
if (Header.bfType != 19778 || Header.bfReserved != 0 || Header.biPlanes !=1) {
//Not a valid bitmap file - don't display
printf ("Not a valid bitmap.");
fclose (BMPFile);
return 1;
}
if (Header.biCompression != 0) {
//Compressed file - don't display
printf ("Compressed file.");
fclose (BMPFile);
return 1;
}
if (Header.biBitCount != 8) {
//If the file is other than 8-bit dont read.
printf ("Not an 8-bit bitmap.");
fclose (BMPFile);
return 1;
}
if (Header.biWidth > 320 || Header.biHeight > 200) {
//If its larger than 320*200 dont load.
printf ("Size too large.");
fclose (BMPFile);
return 1;
}
//Load the palette info
fread (&Palette, 1024, 1, BMPFile);
for (c = 0; c < 255; c++)
SetDAC (c, Palette[c][2] >> 2, Palette[c][1] >> 2, Palette[c][0] >> 2);
offset = (100 + (Header.biHeight >> 1)) * 320 + 160 - (Header.biWidth >> 1);
lines = 0;
paddedWidth = Header.biWidth & 0xFFFC;
if (Header.biWidth != paddedWidth) paddedWidth += 4;
//Loop for reading lines
while (lines < Header.biHeight) {
fread (Screen + offset, paddedWidth, 1, BMPFile);
offset -= 320;
lines++;
}
fclose (BMPFile);
return 0;
}
int main (int argcount, char *argvalue[]){
//Set up a pointer in vga memory
Screen = (char far *)0xA0000000L;
VGAScreen ();
LoadBMP();
getch ();
TextScreen ();
return 0;
}
This code is all fine but I am acquainted with BGI graphics not the UNION and thise variables I even don't know they are.
What I want to do is to develop a GUI. Therefore I need to use text also along with the picture.
I would like to do it with outtextxy().
If there is some other way please tell. Please remember that I am just learning graphics and I got this project to make. That is why I am seeking help.
[/FONT][/FONT]