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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Графика + текст, Картинку вставил. Как этим воспользовать 
:(
    Опции темы
Ученик
Дата 12.6.2004, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



С Вашей помощью отыскал программу, позволяющую
вставить в нее картинку. Попробовал изменить саму картинку
и размеры выводимой области – все работает.
Но будучи немного знаком с процедурным программированием,
ничего не понимаю в объектно-ориентированном.
Как можно дописать эту программу, например, в виде диалога
«Угадай, что на картинке?» с вариантами ответа, при этом
если угадано правильно – вывести сообщение «Угадал» на
экран и т. д.?
Можно воспользоваться привычными printf, scanf, getch и т. д.
или надо вставлять новые классы?
В каком месте?
Вот текст файла, который, как я догадываюсь, главный файл
приложения.

// TestBMP.cpp : Defines the class behaviors for the application.
//

#include "stdafx.h"
#include "TestBMP.h"

#include "MainFrm.h"
#include "TestBMPDoc.h"
#include "TestBMPView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CTestBMPApp

BEGIN_MESSAGE_MAP(CTestBMPApp, CWinApp)
//{{AFX_MSG_MAP(CTestBMPApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
// Standard file based document commands
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
// Standard print setup command
ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestBMPApp construction

CTestBMPApp::CTestBMPApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CTestBMPApp object

CTestBMPApp theApp;

/////////////////////////////////////////////////////////////////////////////
// CTestBMPApp initialization

BOOL CTestBMPApp::InitInstance()
{
AfxEnableControlContainer();

// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.

#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif

// Change the registry key under which our settings are stored.
// TODO: You should modify this string to be something appropriate
// such as the name of your company or organization.
SetRegistryKey(_T("Local AppWizard-Generated Applications"));

LoadStdProfileSettings(); // Load standard INI file options (including MRU)

// Register the application's document templates. Document templates
// serve as the connection between documents, frame windows and views.

CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CTestBMPDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CTestBMPView));
AddDocTemplate(pDocTemplate);

// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);

// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;

// The one and only window has been initialized, so show and update it.
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();

return TRUE;
}


/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
CAboutDlg();

// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA

// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL

// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
// No message handlers
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

// App command to run the dialog
void CTestBMPApp::OnAppAbout()
{
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}

/////////////////////////////////////////////////////////////////////////////
// CTestBMPApp message handlers


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


Опытный
**


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

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



я не понял.
ты вроде для ВС31 просил.
а это не для него.
там булина нету, а в этом коде есть!



--------------------
Who dares, wins. (с) Solid Snake
PM MAIL ICQ YIM MSN   Вверх
Baa
Дата 13.6.2004, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



lynx_916, шутник ;) там еще и MFC нет ;)
самое веселое то, что в этом коде даже нет намека на работу с картинкой (и не должно быть т.к. это "главный файл приложения") smile.gif


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Ученик
Дата 15.6.2004, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Для BC31 я уже отыскал и все сделал (правда, цвета не совпадают,
пришлось подбирать).
А данный код определяет поведение классов, в том числе и для
обеспечивающего вставку картинки класса CTestBMPView, другого
подобного приложения, только с MFC.
Как теперь можно под картинкой напечатать вопрос и варианты ответа, организовать ввод выбранного ответа с клавиатуры и вывести сообщение о том, правильный ли выбор?
PM MAIL   Вверх
shara
Дата 29.6.2004, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



вот пример проги для BC31 которая выводит текст не как текст а как гарфику, ну как шрифты или тому подобное. прогу взял из справки по BC31 на функцию OUTTEXTXY

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

int main(void)
{
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
int midx, midy;

/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "");

/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* terminate with an error code */
}

midx = getmaxx() / 2;// текст будет выведен по середине экрана
midy = getmaxy() / 2;

/* output text at the center of the screen */
/* Note: the C.P. doesn't get changed. */
outtextxy(midx, midy, "This is a test.");// вывод текста

/* clean up */
getch();
closegraph();
return 0;
}
будут вопросы - пиши.
пришли мне прогу при помощи которй ты картинку на экран выводишь

Это сообщение отредактировал(а) shara - 29.6.2004, 13:13


--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
Ученик
Дата 29.6.2004, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Это я знаю. Могу вставлять картинку, созданную в Paint размером до
800*600*24 (см. код ниже), рисовать по ней из программы, двигать
эти рисунки, тем более вставлять текст с помощью outtextxy(x, y, "text");
в DOS.
------------------------------------------------------------------------------------------------
Я имел в виду объектно-ориентированное программирование (с исполь-
зованием MFC) - как после вставки картинки с помощью соответствующего
графического класса вставить в главный файл (см. код выше), например,
текст, когда нет привычного void main(void)?
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
А задаю этот вопрос потому, что болею тем же, что и ты: мало мне 16
цветов. Нижеприведенный код понимает только 16 цветов.
Очень надеюсь, что кто-нибудь на форуме подкинет исходник
законченной (работающей, а не фрагмент) программы, вставляющей
bmp с 256 цветами и расскажет, что к чему. Может - в режиме VESA или
еще как (для BC3.1).
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[code]
#include <conio.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys\stat.h>
#include <io.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include <graphics.h>

unsigned long readnb(int handle,int from,int n)
{
int j=0;
unsigned char c;
unsigned long s=0;
lseek(handle,from,SEEK_SET);
do
{
read(handle,&c,1);
s=s+c*pow(2,j*8);
j++;
}while(j<n);
return(s);
}

int main(void)
{
int handle,i,bppixel,ctype,x=0,y=0;
FILE *stream;
unsigned char ch,r,g,b;
unsigned long fsize,width,height,asize,aloc;
int graphdriver=DETECT;
int graphmode;
initgraph(&graphdriver,&graphmode,"");

clrscr();
if ((handle=open("my_pict.bmp",O_RDONLY | O_BINARY))==-1)
{
perror("Error");
}
stream=fdopen(handle,"r+");

fsize=readnb(handle,2,4);
printf("Size: %lu\n",fsize);

aloc=readnb(handle,10,4);
printf("Array location: %lu\n",aloc);

width=readnb(handle,18,4);
printf("Width: %lu\n",width);

height=readnb(handle,22,4);
printf("Height: %lu\n",height);

bppixel=readnb(handle,28,2);
printf("Bit per pixel: %u\n",bppixel);

ctype=readnb(handle,30,4);
printf("Compression type: %u\n",ctype);

asize=readnb(handle,34,4);
printf("Array size: %lu\n",asize);

getch();
lseek(handle,aloc,SEEK_SET);
cleardevice();
y=height;
do
{
read(handle,&r,1);
read(handle,&g,1);
read(handle,&b,1);

putpixel(x,y,((r+g+b)/51));
x++;
if (x==width)
{
x=0;
y--;
}
//getch();
}while(!eof(handle));
fclose(stream);
close(handle);
getch();
closegraph();
}



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


Опытный
**


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

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



ну понятно. спасибо за прогу(хоть что-то sad.gif ). если наедешь что ищешь поделись с ближним своим: залей мне на мыло [email protected] или на форуме напиши, я в долгу не останусь. smile.gif


--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
Конструктор
Дата 30.6.2004, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Господа, а чем вам это не нравится?

http://forum.vingrad.ru/index.php?showtopic=24270
PM MAIL WWW ICQ   Вверх
Ученик
Дата 30.6.2004, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Лично мне это нравится. Распечатал на бумажку, изучаю.
Надеюсь, настанет время - оценю это по достоинству и задам кучу
вопросов.
Один уже есть. Попробовал с файлами .mtx, .pal, pic.
А как с другими типами? Отсканировал свою фотку в bmp и хочу к ней
пририсовать кое-что и вставить в программу. Можно это сделать в
MTX_EDIT? Как это конвертируется? Моя bmp не захотела никуда
вставляться.

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


Опытный
**


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

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



В идеале надо просто написать конвертер из бмп в mtx, или pic. MTX_EDIT бесконечно убог для серъезных рисунков.

Форматы просты до безобразия:
mtx - 2 байта - ширина,2 байта высота (в пикселах), затем построчно собственно битовая карта размером ширина * высота байт.

pic - несколько mtx скрепленных вместе последовательно (т.е. например операцией merge из norton) для более удобной работы с анимацией и уменьшения незаполненных кластеров.

pal - так как все файлы хранят только 256 цветные рисунки (1 байт на пиксел) для их корректного отображения необходима палитра. (Редактор PAL_EDIT) Каждый байт в 256 цветном растре указывает какой цвет из палитры необхождимо применить для вывода этого байта на экран. Палитра это 768 (256 * 3)байт с данными о 256 цветах по каналам (красный-зеленый-синий (RGB)). Т.е. первая тройка байт кодирует первый цвет (атрибут), и т.д. "Формат" был очень распространен в эпоху досовских игр, из которых можно этих палитр навыдергивать.

Вообще вся эта белиберда в первую очередь для разработки "игр", коих несколько штук имеется.

PM MAIL WWW ICQ   Вверх
Ученик
Дата 2.7.2004, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как можно дополнить этот код, чтобы вставить в программу из файла
bmp 640*480*256 цветов?
[code]
#include <conio.h>
#include <dos.h>
#include <process.h>
#include <stdio.h>
#include <string.h>
#include "myvesa.h"

#define LOWORD(l) ((int)(l))
#define HIWORD(l) ((int)((l)>>16))

static int curBank =0;
static int granularity=1;
static VESAModeInfo curMode;

int findVESA(VESAInfo& vi)
{
#if defined(__COMPACT__)||defined(__LARGE__)||defined(__HUGE__)
asm{
push es
push di
les di,dword ptr vi
mov ax,4F00h
int 10h
pop di
pop es
}
#else
asm{
push di
mov di,word ptr vi
mov ax,4F00h
int 10h
pop di
}
#endif
if(_AX != 0x004F)
return 0;
return !strncmp(vi.sign,"VESA",4);
}
int findVESAMode(int mode, VESAModeInfo& mi)
{
#if defined(__COMPACT__)||defined(__LARGE__)||defined(__HUGE__)
asm{
push es
push di
les di,dword ptr mi
mov ax,4F01h
mov cx, mode
int 10h
pop di
pop es
}
#else
asm{
push di
move di,word ptr mi
mov ax,4F01h
mov cx,mode
int 10h
pop di
}
#endif
return _AX==0x004F;
}
int setVESAMode(int mode)
{
if(!findVESAMode(mode,curMode))
return 0;
granularity=64/curMode.winGranularity;
asm{
mov ax,4F02h
mov bx,mode
int 10h
}
return _AX==0x004F;
}
int getVESAMode()
{
asm{
mov ax,4F03h
int 10h
}
if(_AX!=0x004F)
return 0;
else
return _BX;
}
void setVESABank(int start)
{
if(start==curBank)
return;
curBank=start;
start *=granularity;
asm{
mov ax,4F05h
mov bx,0
mov dx,start
push dx
int 10h
mov bx,1
pop dx
int 10h
}
}
void writePixel(int x,int y,int color)
{
long addr=(long)curMode.bytesPerScanLine*(long)y+(long)x;
setVESABank(HIWORD(addr));
pokeb(0xA000,LOWORD(addr),color);
}
void main()
{
VESAInfo vi;
if(!findVESA(vi))
{
printf("\nVESA VBE not found.");
exit( 1 );
}
if(!setVESAMode(VESA_640x480x256))
exit( 1 );
for(int i=0;i<640;i++)
for(int j=0;j<480;j++)
writePixel(i,j,((i/20)+1)*(j/20+1));
getch();
}




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


Опытный
**


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

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



я хочю сказать только одно, ты когда инициализируешь графику то ты ОПЯТЬЖЕ используешь 16 цветов и поэтому нарисовать bmp в 256 цветов будет очень проблематично sad.gif . я тут нашёл как получить 256 цветов при разрешалове 1024*768 для BC31 - но работает оно ужасно медленно... sad.gif

Это сообщение отредактировал(а) shara - 3.7.2004, 07:13


--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
Ученик
Дата 3.7.2004, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Будь так добр - покажи.
PM MAIL   Вверх
Artem13
Дата 5.7.2004, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ученик
shara
Ребята, вам не надоело ДОС мучить? Мож под винды чёнить, а?
PM MAIL   Вверх
Ученик
Дата 5.7.2004, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У тебя есть, что показать?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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