Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод BMP файла 
V
    Опции темы
Vityaz
Дата 8.12.2012, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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;
}


PM MAIL   Вверх
volatile
Дата 9.12.2012, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Нужно исправить 3 строчки
1.
Цитата(Vityaz @  8.12.2012,  22:05 Найти цитируемый пост)
void drawbmp(char *argv[])

2.
Цитата(Vityaz @  8.12.2012,  22:05 Найти цитируемый пост)
   char i;
    cin>>i;
    drawbmp(i);

3.
Цитата(Vityaz @  8.12.2012,  22:05 Найти цитируемый пост)
    hIn = CreateFile ("*argv[].bmp", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);



Ваш ход.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0426 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.