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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите найти ошибку. быстрее плииз! 
:(
    Опции темы
Code Magister
  Дата 28.4.2005, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Magister of Code
*


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

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



Я дублировал тему, потому-что в старой мне не отвечают, потому-что я рано написал "спасибо"

Просьба модерам ен удалять ее хотя бы до завтра плиз, потому-что мне эта прога нужна до завтра или вобще не нужна!

С++ 3.1
Короче мне надо считать изображение дисплея(в графическом режиме) в файл, исползуя 4-битовое представление каждого пикселя.
Как я понял последовательно считывать и записывать по 2 числа в char.
Но что-то у меня с этим смещением не получается.
Как записать, а потом прочитать два числа(4 битовых) в чар?

chaos мне ответил:
Цитата

void main()
{
  unsigned char ch;
  ch = 0;
  //записываем первое число
  ch += (chislo1 & 0x0F); //устраняем переполнение те > 1111b
  //записываем второе число
  ch += ((chislo2 & 0x0F) << 4) ;
}


Вобщем, я сам придумал как считывать от туда:
Код

    chislo2=ch /16;
    chislo1=ch-chislo2*16;

Не знаю почему, но считывает правильно.
И написал я эту прогу таким образом(сначала считывает экран и записывает в файл, а потом считывает файл и выводит на дисплей):
Код

#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
unsigned char ch, ch1, ch2;
int chislo1=15, chislo2=15, gd, gm, p1, p2;
FILE* file;

void main()
{
  file=fopen("lol.txt","w+");
  clrscr();
  gd=DETECT;
  initgraph(&gd, &gm, "F:\\BORLANDC\\BGI");
  for(int i=0; i<2000; i++)
  {
  randomize;
  putpixel(random(640), random(480), random(15) );
  }
  for(i=0; i<640; i+=2)
  {
  for(int j=0; j<480; j++)
  {
    p1=getpixel(i,j);
    p2=getpixel(i+1,j);
    ch = 0;
    ch += (chislo1 & 0x0F);
    ch += ((chislo2 & 0x0F) << 4);
    fputc(ch,file);

  }
  }
   printf("READY?\n");
   delay(1000);
   printf("GO GO GO");

   for(i=0; i<640; i+=2)
  {
  for(int j=0; j<480; j++)
  {

    fscanf(file,"%i" , &ch);
    ch2=ch /16;

    ch1=ch-ch2*16;
    putpixel(i,j,ch1);
    putpixel(i+1,j,ch2);
   }
   }
  getch();
  closegraph();
  fclose(file);
}

ЕСТЕСТВЕННО ОНА НЕ ПАШЕТ! А мне седня еще 2 проги надо написать, поэтому прошу Вас помочь мне разобраться с этой. Напоминаю, что в char надо утрамбовать 2 пикселя.

Это сообщение отредактировал(а) _Slipknot - 28.4.2005, 20:57
--------------------
PM MAIL WWW ICQ   Вверх
Leksey
Дата 28.4.2005, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Может быть я не прав, но мне кажется ошибка в том, что ты из файла считываешь
не один байт а сразу несколько когда указываешь fscanf(file,"%i" , &ch).
i - integer занимает больше одного байта.Попробуй использовать спецификатор %с:
fscanf(file,"%c" , &ch).
Добавлено @ 21:33
И еще:
chislo2=ch>>4;
chislo1=ch-chislo2<<4;
будет лучше, поскольку не каждый компилятор хорошо оптиизирует код.
PM MAIL   Вверх
Code Magister
Дата 28.4.2005, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Magister of Code
*


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

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



Leksey попробовал, не помогло.
--------------------
PM MAIL WWW ICQ   Вверх
Leksey
Дата 28.4.2005, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Можно не скромный вопрос?
Зачем ты в файл число 0xff записываешь 640*480 раз.

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


Magister of Code
*


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

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



Разве я записываю это число, а не цвет пикселя? Тогда исправь, пожалуйста. Я зайти смогу только завтра утром. Если не трудно исправь и выложи рабочий код плиз.
--------------------
PM MAIL WWW ICQ   Вверх
Leksey
Дата 28.4.2005, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Извини, но проверить я его не смогу , поскольку у меня нет С++ 3.1
Но думаю ,что если убрать переменные chislo1 и chislo2 и заменить их на p1 и p2
все заработает:
Код

#include <stdio.h>    
#include <conio.h>    
#include <graphics.h>    
#include <stdlib.h>    
#include <dos.h>    
unsigned char ch, ch1, ch2;    
int  gd, gm, p1, p2;    
FILE* file;    
void main()    
{    
  file=fopen("lol.txt","w+");    
  clrscr();    
  gd=DETECT;    
  initgraph(&gd, &gm, "F:\\BORLANDC\\BGI");    
  for(int i=0; i<2000; i++)    
  {    
  randomize;    
  putpixel(random(640), random(480), random(15) );    
  }    
  for(i=0; i<640; i+=2)    
  {    
  for(int j=0; j<480; j++)    
  {    
    p1=getpixel(i,j);    
    p2=getpixel(i+1,j);    
    ch = 0;    
    ch += p1 & 0x0F;    
    ch += (p2 & 0x0F) << 4;    
    fputc(ch,file);    
  }    
  }    
   printf("READY?\n");    
   delay(1000);    
   printf("GO GO GO");    
   for(i=0; i<640; i+=2)    
  {    
  for(int j=0; j<480; j++)    
  {    
    fscanf(file,"%c" , &ch);    
    ch2=ch >>4;    
    ch1=ch-ch2<<4;    
    putpixel(i,j,ch1);    
    putpixel(i+1,j,ch2);    
   }    
   }    
  getch();    
  closegraph();    
  fclose(file);    
}

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


Magister of Code
*


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

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



Leksey Спасибо!
Если вдруг кому понадобится, то там еще перед чтением надо было сбросить курсор в начало файла.
И при этом прога почему-то искажала картинку
Но главное, что я ее сдал smile

--------------------
PM MAIL WWW ICQ   Вверх
Doc_d0s
Дата 29.4.2005, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



2SlipKnot А ты под чем компилишь, я тут Серпинского чертить взялся и BC 3.11 материт меня smile
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
Code Magister
Дата 30.4.2005, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Magister of Code
*


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

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



Doc_d0s под BC 3.1 компилю, но думаю проблема не в компиляторе, а где-то в моей проге.
--------------------
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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