Новичок
Профиль
Группа: Участник
Сообщений: 1
Регистрация: 8.12.2012
Репутация: нет Всего: нет
|
Необходимо вывести на экран BMP файл (именно через функцию); Первый код рабочий: | Код | #include <stdio.h> #include <windows.h> #include <graphics.h>
int main() { initwindow(1200, 800); BITMAPFILEHEADER bfh; BITMAPINFOHEADER bih; int Width, Height; RGBQUAD Palette[256]; BYTE *inBuf; RGBTRIPLE *outBuf; HANDLE hIn; DWORD RW; int i, j; hIn = CreateFile ("man3.bmp", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); ReadFile (hIn, &bfh, sizeof(bfh), &RW, NULL); ReadFile (hIn, &bih, sizeof(bih), &RW, NULL); ReadFile (hIn, Palette, 256 * sizeof(RGBQUAD), &RW, NULL);
// Установим указатель на начало растра SetFilePointer (hIn, bfh.bfOffBits, NULL, FILE_BEGIN);
Width = bih.biWidth; Height = bih.biHeight;
// Выделим память inBuf = new BYTE [Width]; outBuf = new RGBTRIPLE [Width];
// Заполним заголовки bfh.bfOffBits = sizeof (bfh) + sizeof (bih); // Не будем писать палитру bih.biBitCount = 24; bfh.bfSize = bfh.bfOffBits + 4 * Width * Height + Height * (Width % 4); // Размер файла for (i = 0; i < Height; i++) { ReadFile (hIn, inBuf, Width, &RW, NULL); for (j = 0; j < Width; j++) { BYTE red, green, blue; red = Palette[inBuf[j]].rgbRed; green = Palette[inBuf[j]].rgbGreen; blue = Palette[inBuf[j]].rgbBlue;
if (red == 255 && green == 255 && blue == 255) putpixel(j,39-i,WHITE); else if (red == 0 && green == 0 && blue == 0) putpixel(j,39-i,BLACK); else if ((red >150) && green < 100 && blue < 100) putpixel(j,39-i,RED); else if (red< 100 && (green >150) && blue < 100) putpixel(j,39-i,GREEN); else putpixel(j,39-i,DARKGRAY); } SetFilePointer (hIn, (3 * Width) % 4, NULL, FILE_CURRENT); } getchar(); return 0; }
|
А этот не компилиться( Code::Blocks): | Код | #include <stdio.h> #include <windows.h> #include <graphics.h> #include <iostream> using namespace std; void drawbmp(char *argv[]) { initwindow(1200, 800); BITMAPFILEHEADER bfh; BITMAPINFOHEADER bih; int Width=40, Height=40; RGBQUAD Palette[256]; BYTE *inBuf; RGBTRIPLE *outBuf; HANDLE hIn; DWORD RW; int i, j; hIn = CreateFile ("*argv[].bmp", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); ReadFile (hIn, &bfh, sizeof(bfh), &RW, NULL); ReadFile (hIn, &bih, sizeof(bih), &RW, NULL); ReadFile (hIn, Palette, 256 * sizeof(RGBQUAD), &RW, NULL);
// Установим указатель на начало растра SetFilePointer (hIn, bfh.bfOffBits, NULL, FILE_BEGIN);
Width = bih.biWidth; Height = bih.biHeight;
// Выделим память inBuf = new BYTE [Width]; outBuf = new RGBTRIPLE [Width];
// Заполним заголовки bfh.bfOffBits = sizeof (bfh) + sizeof (bih); // Не будем писать палитру bih.biBitCount = 24; bfh.bfSize = bfh.bfOffBits + 4 * Width * Height + Height * (Width % 4); // Размер файла for (i = 0; i < Height; i++) { ReadFile (hIn, inBuf, Width, &RW, NULL); for (j = 0; j < Width; j++) { BYTE red, green, blue; red = Palette[inBuf[j]].rgbRed; green = Palette[inBuf[j]].rgbGreen; blue = Palette[inBuf[j]].rgbBlue;
if (red == 255 && green == 255 && blue == 255) putpixel(j,39-i,WHITE); else if (red == 0 && green == 0 && blue == 0) putpixel(j,39-i,BLACK); else if ((red >150) && green < 100 && blue < 100) putpixel(j,39-i,RED); else if (red< 100 && (green >150) && blue < 100) putpixel(j,39-i,GREEN); else putpixel(j,39-i,DARKGRAY); } SetFilePointer (hIn, (3 * Width) % 4, NULL, FILE_CURRENT); } getchar(); } int main() { char i; cin>>i; [color=red] drawbmp(i);[/color] return 0; }
|
|