Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание bmp файлов 
V
    Опции темы
Светлана
Дата 7.9.2006, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.9.2006

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



Подскажите, пожалуйста кто-нибудь! как в Visual С работать с bmp файлами? Мне надо создать картинку и порисовать там.
PM MAIL   Вверх
cardinal
Дата 7.9.2006, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: нет
Всего: 99



А поискать на форуме? Все сто раз уже объясняли...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Светлана
Дата 7.9.2006, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.9.2006

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



Хорошо. Тогда дайте ссылку, где это обсуждалось. Если, конечно, не трудно.
PM MAIL   Вверх
cardinal
Дата 7.9.2006, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: нет
Всего: 99



Эх, народ...
http://forum.vingrad.ru/index.php?act=Sear...mp&skipped=
(это только те темы, в которых я принимал участие)...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Светлана
Дата 7.9.2006, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.9.2006

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



Народ у нас такой же как и правительство.

Спасибо. Я поищу там ответ на свой вопрос. Только меня мучают сомнения - есть ли там программное создание bmp файлов? Я же тоже искала ответ, прежде чем задавать вопрос. А суть в том, что программа переписывается с Builder'а, где существует замечательный класс. Он позволяет и создать, и порисовать и сохранить в файл. А в Visual такой класс есть? Спасибо, заранее за ответ.
PM MAIL   Вверх
Alexeis
Дата 7.9.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 3
Всего: 459



Цитата(Светлана @  7.9.2006,  16:14 Найти цитируемый пост)
есть ли там программное создание bmp файлов?

Класс CBitmap это может.
А вот на счет сохранения тут не уверен. Кажись нет такого метода.

А вот в .Net есть замечательный класс BitMap имеющий метод Save для сохранения изображений (не зря говорят, что там поработал программист Borland smile )

Это сообщение отредактировал(а) alexeis1 - 7.9.2006, 17:12


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rapalex
Дата 7.9.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



CImage прекрасно сохранит даже в png.


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
cardinal
Дата 7.9.2006, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: нет
Всего: 99



Цитата(Светлана @  7.9.2006,  15:14 Найти цитируемый пост)
А в Visual такой класс есть?

А тебе обязательно класс нужен?


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
SteN
Дата 7.9.2006, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 4.9.2006
Где: Брянск

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



Нашёл тут у себя один исходничек. Может поможет:
Код

#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <process.h>
#include <mem.h>

#define BI_RGB        0    // компрессия отсутствует
#define BI_RLE8       1    // компрессия (для одного пиксела - 8 бит)
#define BI_RLE4       2    // компрессия (для одного пиксела - 4 бита)
#define BI_BITFIELDS  3    // компрессия (другой формат компрессии)

typedef unsigned long UINT;
typedef unsigned long DWORD;
typedef unsigned int  WORD;
typedef unsigned long LONG;
typedef unsigned char BYTE;
//////////////////////////////////////////////////////////////////////////
//
typedef struct tagBITMAPFILEHEADER
{
    UINT  bfType;                // тип файла (0x4D42)
    DWORD bfSize;                // размер файла
    BYTE  bfReserved1;        
    BYTE  bfReserved2;        
    DWORD bfOffBits;            // смещение битов изображения
}BITMAPFILEHEADER;
typedef BITMAPFILEHEADER*     PBITMAPFILEHEADER;
typedef BITMAPFILEHEADER far* LPBITMAPFILEHEADER;

//////////////////////////////////////////////////////////////////////////
//
typedef struct tagBITMAPINFOHEADER
{
    DWORD biSize;                // размер структуры BITMAPFILEHEADER
    LONG  biWidth;                // ширина изображения в пикселах
    LONG  biHeight;            // высота изображения в пикселах
    WORD  biPlanes;            // количество плоскостей
    WORD  biBitCount;            // количество бит на пиксел
    DWORD biCompression;        // тип сжатия
    DWORD biSizeImage;        // размер изображения в байтах
    LONG  biXPelsPerMeter;    // разрешение устройства вывода по X
    LONG  biYPelsPerMeter;    // разрешение устройства вывода по Y
    DWORD biClrUsed;            // размер таблицы цветов
    DWORD biClrImportant;    // необходимое количество цветов
}BITMAPINFOHEADER;
typedef BITMAPINFOHEADER*     PBITMAPINFOHEADER;
typedef BITMAPINFOHEADER far* LPBITMAPINFOHEADER;

//////////////////////////////////////////////////////////////////////////
//
typedef struct tagRGBTRIPLE
{
    BYTE rgbtBlue;
    BYTE rgbtGreen;
    BYTE rgbtRed;
}RGBTRIPLE;
typedef RGBTRIPLE far* LPRGBTRIPLE;

//////////////////////////////////////////////////////////////////////////
//
void main()
{
    BITMAPFILEHEADER BitmapFileHeader;
    BITMAPINFOHEADER BitmapInfoHeader;
    RGBTRIPLE Rgb;
    BYTE buf;
    LONG  Width;
    LONG  Height;
    int i, j, k;

    buf    = 0;
    Width  = 150;
    Height = 300;
    clrscr();

    
    memset(&BitmapFileHeader, 0, sizeof(BITMAPFILEHEADER));
    
    BitmapFileHeader.bfType = 0x4D42;    // тип файла (текстовая строка "BM")
    BitmapFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) +
                                          sizeof(BITMAPINFOHEADER);

    
    memset(&BitmapInfoHeader, 0, sizeof(BITMAPINFOHEADER));
    
    BitmapInfoHeader.biSize     = sizeof(BITMAPINFOHEADER);
    BitmapInfoHeader.biHeight   = Height;
    BitmapInfoHeader.biWidth    = Width;
    BitmapInfoHeader.biPlanes   = 1;
    BitmapInfoHeader.biBitCount = sizeof(RGBTRIPLE)*8;

    FILE *stream;
    stream = fopen("a.bmp", "wb");
    if(stream == NULL)
    {
        cout << "Ошибка открытия файла для записи" << endl;
        exit(1);
    }

    
    fwrite(&BitmapFileHeader, sizeof(BITMAPFILEHEADER), 1, stream);
    fwrite(&BitmapInfoHeader, sizeof(BITMAPINFOHEADER), 1, stream);

   // "рисуем" красный прямоугольник
    Rgb.rgbtBlue  = 0;
    Rgb.rgbtGreen = 0;
    Rgb.rgbtRed   = 255;

    for(i = 0; i<Height/2; i++)
    {
        for(j = 0; j<Width; j++)
            fwrite(&Rgb, sizeof(RGBTRIPLE), 1, stream);

        // каждая строка изображения - кратна 4 байтам
        if(Width%4 == 0) continue;
        for(k=0; k<4; k++)
        {
            fwrite(&buf, sizeof(BYTE), 1, stream);
            if((Width+k+1)%4 == 0) break;
        }
    }

    // "рисуем" синий прямоугольник
    Rgb.rgbtBlue  = 255;
    Rgb.rgbtGreen = 0;
    Rgb.rgbtRed   = 0;

    for(i = 0; i<Height/2; i++)
    {
        for(j = 0; j<Width; j++)
            fwrite(&Rgb, sizeof(RGBTRIPLE), 1, stream);
        if(Width%4 == 0) continue;
        for(k=0; k<4; k++)
        {
            fwrite(&buf, sizeof(BYTE), 1, stream);
            if((Widthэ)%4 == 0) break;
        }
    }
    if(Width%4 != 0)
        for(k=0; k<4; k++)
        {
            fwrite(&buf, sizeof(BYTE), 1, stream);
            if((Widthэ)%4 == 0) break;
        }

    fclose(stream);
    getch();
}
 
PM MAIL ICQ   Вверх
cardinal
Дата 8.9.2006, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: нет
Всего: 99



SteN, у тебя очепятки в коде - Widthэ

А так, Светлана, я думаю Вы уже видите, что что в Visual, что в Borland - bmp файлы создавать можно везде одинаково (и не через классы).


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Светлана
Дата 8.9.2006, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.9.2006

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



Спасибо. Я даже не ожидала такого живого участия к моей проблеме... Правда, СПАСИБО!

SteN, скорее всего пригодится. Я посмотрю.

Сardinal, не обязательно класс. Хотя конечно с ним было бы удобнее. Но можно все собрать по кусочкам... Теперь, если с созданием и сохранением, есть где смотреть, то осталась проблема с рисованием. А очепятки - ничего, будет повод разобраться :)

Rapalex, CImage... что-то этот класс я упустила из виду.

Аlexeis1, класс CBitmap, не подходит. Т.к. в Builder'е класс назывался TBitmap, то на CBitmap я и подумала. Но он работает исключительно с картинкой, ее цветом и подобное. Не сохранить, не нарисовать что-нибудь с его помощью нельзя... А .Net, замечательно, но я ни разу даже не видела Visual .Net... Учиться конечно никогда не поздно, но хочу попробовать сначала решить проблему на этом уровне.
PM MAIL   Вверх
Dart
Дата 8.9.2006, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 26.6.2006
Где: Саратов, РФ

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



Светлана, в любом классе производном от CObject (это и к CImage, и к CBitmap), есть сериализация. А это преобразование в/из последовательной формы в, собственно, сам объект. Т.е. пожалуйста, переопределяй сериализацию и сохраняй как тебе угодно, вообще в любом формате. По поводу функций преобразования можно посмотреть на www.codeproject.com
--------------------
ЦитатаЛюблю смотреть, как другие работают
 Дж. К. ДжеромСайт: www.ecosigma.ruПочта: [email protected] 
PM MAIL WWW ICQ   Вверх
Earnest
Дата 8.9.2006, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(Светлана @  8.9.2006,  10:01 Найти цитируемый пост)
 не нарисовать что-нибудь с его помощью нельзя... 

Рисовать на битмапе очень просто. Нужно создать совместимый контекст, выбрать туда битмап, и рисовать в контекст любыми средствами GDI. CImage делает то же самое, но предлагает готовый контекст.


--------------------
...
PM   Вверх
Светлана
Дата 12.9.2006, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.9.2006

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



Все получилось! Всем огромное СПАСИБО!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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