| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Помогите с рисованием в с++ |
| Автор: Гость_Дмитрий 17.12.2005, 14:32 |
| Здравствуйте. По учебе задали построение эвольвент через классы. При подключении к borland 3.1 graphics.h, он начинает ругаться, что initgraph, setcolor, и др. функции из "с" неопознаются. В Visual c++ вообще не поддерживается эта библиотека. Подскажите пожалуйста как можно в с++ программно рисовать. И где это проще сделать в borland или в visual? p.s. время поджимает, если можно расскажите поконкретней пожалуйста. |
| Автор: BreakPointMAN 17.12.2005, 14:50 |
| Дмитрий, сначала определись со средой, в которой ты хочешь программу написать... С графикой можно везде работать, правда, подходы везде будут разные... Ибо в понятие языка C++ понятие графики как таковой не входит, рисование обеспечивается либо средствами операционной системы, либо графическими библиотеками конкретных сред... |
| Автор: BreakPointMAN 17.12.2005, 15:09 | ||||
А ты уверен, что все настройки среды корректны? Должны быть верно прописаны все пути (где-то примерно в Options==>Directories... поля "Include Directories" и "Library Directories" или как-то так...) !!! Должна быть подключена библиотека графическая (Options==>Linker==>Libraries... и там галочка напротив "Graphics library" или около того...) bgi-файл должен лежать в той же папке, что и откомпилированная программа, либо путь к нему должен быть явно указан:
Поищи на этом форуме, часто очень поднимаются темы насчет программирования графики - были уже и исходные коды программ, и советы разные... |
| Автор: Гость_Дмитрий 17.12.2005, 15:15 |
| 2 BreakPointMAN: как я могу определиться со средой, если я не знаю особенностей этих сред? Я могу сделать программу на с, которая будет строить то что мне нужно. Но мне задали сделать такую программу с использованием классов в с++. Можно сделать и с помощью visual, но эту программу я впервые открыл вчера, так что не очень предтавляю как с ней работать. Класс у меня должен осуществлять такие действия: В соответствии с введенным числом l (длиной графика) и числом n особенностей графика (типа числа линий в ломанной) строить этот самый график. Дайте хоть какую-нибудь информацию по любой из сред (borland/visual) |
| Автор: BreakPointMAN 17.12.2005, 16:23 | ||
Вообще говоря, есть такая замечательная вещь, как поиск... Не ленимся его использовать. А вообще, ИМХО, начинающему будет проще работать с графикой в среде Borland C++ Builder, но это только ИМХО. |
| Автор: Guest 17.12.2005, 18:52 |
| 2 BreakPointMAN: Большое спасибо. выручил. пришлось правда немного повозиться и скопировать egavga.bgi в bin (непонятно зачем). |
| Автор: Wird 27.12.2006, 02:55 |
| Здравствуйте. Учусь на с++. Как картинку с экрана отправить в файл, а потом оттуда извлечь? Помогите плз |
| Автор: zkv 27.12.2006, 05:45 |
рад за вас, какой компилятор используете? скриншот сделать? Или что вы имеете ввиду? |
| Автор: Wird 27.12.2006, 23:06 |
| bc3.11 рисуешь в с чего-нибудь, пихаешь в файл, и так далее а потом по счётчику извлекаешь определённый образ с getimage и putimage вроде ясно, а вот как потом из буфера в правильном формате в файл засунуть, а потом извлечь(и при этом на экране возникла нужная картинка, а не что-то ещё) |
| Автор: zkv 28.12.2006, 00:59 |
| Wird, каков вопрос таков и ответ: fopen() - открыть файл, в вашем случае, скорее всего режим для чтения "rb", для записи "wb" fwrite() - fread() - fclose() - закрыть файл |
| Автор: Wird 28.12.2006, 03:17 |
| пойдём другим путём прога что-то записывает в txt, а извлекает бред #include<graphics.h> #include<stdlib.h> #include <stdio.h> #include <io.h> #include <dos.h> #include <errno.h> #include <alloc.h> #include <conio.h> #include <FCNTL.H> #define MAXSIZE 10 int count; int maxx, maxy; void far *ptr; int init_lib() { int fd = open ("D:\\TC\\@\\LIB.txt", O_WRONLY); if (fd < 0) { printf ("ЋиЁЎЄ ЇаЁ ®вЄалвЁЁ д ©« (Є®¤ %d)\nexiting...\n", errno); return errno; } count = 0; lseek(fd, 0, 0); write (fd, &count, sizeof(count)); // § Єалў Ґ¬ д ©« close (fd); return 0; } void push(int x1, int x2, int y1, int y2, void far *buf) { if(!(count==MAXSIZE)) { int fd = open ("D:\\TC\\@\\LIB.txt", O_RDWR); unsigned size; size = imagesize(x1, y1, x2, y2); if ((buf = farmalloc(size)) == NULL) { closegraph(); printf("Error: not enough heap space in save_screen().\n"); exit(1); } getimage(x1, y1, x2, y2, buf); lseek(fd, 0L, SEEK_END); write (fd, &size ,sizeof(size)); write (fd, &buf, size); count++; close (fd); } else { printf("Net mesta!\n"); exit(0); } } void show(int num, int x, int y, void far *buf){ int fd = open ("D:\\TC\\@\\LIB.txt", O_RDWR); int i=0; unsigned size; lseek(fd, sizeof(count), 0); for(i = 1; i < num; i++){ read(fd, &size, 2); lseek(fd, 2, 1); lseek(fd, size, 1); } read(fd, &size, 2); lseek(fd, 2, 1); /*if ((buf = farmalloc(size)) == NULL) { closegraph(); printf("Error: not enough heap space in save_screen().\n"); exit(1); } */ read(fd, &buf, size); putimage(x, y, buf, COPY_PUT); } void main() { int gdriver=DETECT, gmode, errorcode; // int fd = open("D:\\TC\\@\\LIB.txt", O_RDWR); /* auto-detect the graphics driver and mode */ initgraph(&gdriver, &gmode, "d:\\TC\\bgi"); errorcode = graphresult(); if (errorcode != grOk) { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); } scanf("%d %d", &maxx, &maxy); cleardevice(); rectangle(0, 0, maxx, maxy); line(0, 0, maxx, maxy); line(0, maxy, maxx, 0); // if (read(fd, 1, 1)==EOF) init_lib(); // close(fd); push(0, 0, maxx, maxy, ptr); /* save the current screen */ getch(); /* pause screen */ cleardevice(); getch(); show(1, 20, 30, ptr);/* restore the screen */ getch(); /* pause screen */ closegraph(); } |
| Автор: zkv 28.12.2006, 04:18 | ||
| во-первых существует кнопка "код" вверху окна ввода, во вторых код плохо читаем, например lseek(fd, 2, 1); что такое 1? наверное SEEK_CUR, как думаете, какой вариант удобнее для восприятия, ваш или такой: lseek(fd, sizeof(size), SEEK_CUR); ну и догадки:
и где проверка ошибок чтения\записи? все можно (и даже нужно) держать под контролем |