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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание изображения, из чарового массива байтов 
:(
    Опции темы
Goldberg
Дата 23.10.2004, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем доброго времени суток!
Наконец-то моя камера нормально заработала. Оказалось, что мне дали старую документацию. :)
Так вот, я получаю изображение в чаровый массив, например char chImage[60000]. В дальнейшем я хочу использовать CImage, говорят, что в нем есть все, что мне необходимо(что именно мне необходимо, долго рассказывать:)).
Так вот как реализовать создание изображения, с использованием CImage? Может кто знает где есть примерчик? Ну или просто с чего начать, чисто теоритически, без кода, приведите краткий алгоритм моих дейтсвий. :)
P.S.: Искал и в Яндексе, и в Рамблере, и в Гугле, может плохо искал, но не нашел, честно. :)
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 23.10.2004, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Сначала создаеш HBITMAP и загружаеш пиксели в него, потом вызаваеш Attach из CImage.


--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 23.10.2004, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



...

Это сообщение отредактировал(а) Goldberg - 23.10.2004, 17:53
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 23.10.2004, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Goldberg
Нет, это вместо Create.

HBITMAP надо создать при помощи GDI API.
Посмотри CreateBitmap
в параметр lpvBits и ставиш свой масив.


--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 23.10.2004, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



CBitmap bmp;
bmp.CreateBitmap(600, 600, 256, 12, chReadImage);
CImage image;
image.Attach(bmp);
image.Save("D:\\\aaaaa", ?????????? ); Во втором параметры пишу ImageFormatGIF, говорит undeclared identifier

Добавлено @ 18:22
Оказалось можно просто - image.Save("D:\\\aaaaa.gif");
Но все равно что-то делаю ни так, в процессе работы появляются ошибки.
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 23.10.2004, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Goldberg
Это консты в файле Gdiplusimaging.h прописанны
надо писать Gdiplus::ImageFormatGIF
Добавлено @ 18:26
Goldberg
Какие ошибки ?


--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 23.10.2004, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В altimage.h in Line 504
Expression: hBitmap != 0
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 23.10.2004, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Goldberg
Это из-за CBitmap.

сделай так:
Код

HBITMAP hBitmap = CreateBitmap(600, 600, 1, 8 /*или какой у тебя BPP*/, pBits /*это твой масив*/);
CImage image;
image.Attach(hBitmap);


Добавлено @ 18:47
Goldberg
Только сейчас обратил внимание
12bpp и размер массива 60000 это к слову, или реальные параметры ?

Это сообщение отредактировал(а) Mad - 23.10.2004, 18:46


--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 23.10.2004, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



12 бит/пиксел
Рамер кадра - 93750 байт.(не 60000)
Добавлено @ 18:54
CBitmap bmp;
bmp.CreateBitmap(600, 600, 1, 12, chReadImage);
CImage image;
image.Attach(bmp);
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 23.10.2004, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Goldberg
Нестыковка получается.
Если считать что побайтное выравнивание отсутствует, тогда размер кадра 540000 быйт
А с выравниванием вообще 720000 байт
Это если кадр 600х600 как ты в функцию пишеш.

У тебя в масиве риксы случаем ни чем не упакованны ?


--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 23.10.2004, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Извиняюсь 250Х250.
Ошибок не возникает, но и изображение не сохраняется...
Добавлено @ 19:07
CBitmap bmp;
bmp.CreateBitmap(250, 250, 1, 12, chReadImage);
CImage image;
image.Attach(bmp);
image.Save("C:\ABC.jpg");
Добавлено @ 19:13
- Команда Set_Mode – код = 0AH
Устанавливает биннинг и режим передачи данных камерой

MODE BINNING Прореживание Бит/пиксел Разрешение Размер кадра
0 1х1 нет 12 1000х1000 1500000
1 1х1 1:4 8 250х250 250000
2 2х2 нет 12 500х500 375000
3 2х2 1:4 8 125х125 15625
4 4х4 нет 12 250х250 93750
5 4х4 1:2 8 125х125 15625

Устанавливаю MODE 4.
Добавлено @ 19:14
Упс. Таблица перекосилась, но понять вроде можно.
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 23.10.2004, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Goldberg
Вопервы у тебя масив получается не выровненный (pBits надо выравнивать по словам, а не по байтам).

Еще меня смущает 12bpp. Дело в том, что в описании CreateBitmap для GDI, pBits описан как указатель на масив 8-битных значений. А в описании CBitmap::CreateBitmap 16-битных значений :hmmm

попробуй так (именно попробуй, сам не могу. GDI+ нема :) )
Код

char *pBits = new char[94000];
memset(pBits, 0, 94000);
for (int y=0; y<250; y++)
   memcpy(pBits+y*376, chReadImage+y*375, 375);

HBITMAP hBitmap = CreateBitmap(250, 250, 1, 12, pBits);
CImage image;
image.Attach(hBitmap);
image.Save("D:\\aaaaa", Gdiplus::ImageFormatGIF);




--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 23.10.2004, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Опять же никаких ошибок, а результат нулевой.
И вот, что:
image --> m_hBitmap 0x0a05071e {unused=??? } HBITMAP__ * --> unused CXX0030: Error: expression cannot be evaluated int

Добавлено @ 19:42
BITMAP не создается похоже...
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 23.10.2004, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Цитата(Goldberg @ 23.10.2004, 19:38)
Опять же никаких ошибок, а результат нулевой.

Даже пустой файл не создается ?


--------------------
user posted image
PM MAIL   Вверх
Mad
Дата 23.10.2004, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Кажись разобрался.
CreateBitmap понимает тока 1,4,8,16,24,32bpp

значит код получится такой:
Код

char *pBits = new char[250*250*2];
bool b = true;
int psrc = 0
for (int i=0; i<250*250; i++)
{
    unsigned short src = *(unsigned short*)(chReadImage+psrc);
    int sr = 0;
    int sg = 0;
    int sb = 0;
    if (b)
    {
         sr = src & 0xf000;
         sg = src & 0x0f00;
         sb = src & 0x00f0;
         psrc++;
    }
    else
    {
         sr = src&0x0f00;
         sg = src&0x00f0;
         sb = src &0x000f;
         psrc+=2;
    }
    b = !b; // отредактированно

    sr = (float)sr/17.0f*37.0f;
    sg = (float)sg/17.0f*37.0f;
    sb = (float)sb/17.0f*37.0f;
    (unsigned short)pBits[i] = sr<<10+sg<<5+sb; // отредоктированно
}

HBITMAP hBitmap = CreateBitmap(250, 250, 1, 16, pBits);
CImage image;
image.Attach(hBitmap);
image.Save("D:\\aaaaa", Gdiplus::ImageFormatGIF);

код не оптимизирован. так на скорую руку.

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


--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 23.10.2004, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я честно говоря еще не понял, что ты там делаешь, но в строчке (unsigned short*)pBits[i] = sr<<10+sg<<5+sb; - cannot convert from 'int' to 'unsigned short *' :)
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 24.10.2004, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Goldberg
Там я пару ошибок исправил ;-)


--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 24.10.2004, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Строчка - (unsigned short)pBits[i] = sr<<10+sg<<5+sb; - по прежнему не хочет работать:(
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 24.10.2004, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Goldberg
Со всеми исправлениями выглядет так:
Код

char *pBits = new char[250*250*2];
bool b = true;
int psrc = 0
for (int i=0; i<250*250; i++)
{
 unsigned short src = *(unsigned short*)(chReadImage+psrc);
 int sr = 0;
 int sg = 0;
 int sb = 0;
 if (b)
 {
   sr = src & 0xf000>>12;
   sg = src & 0x0f00>>8;
   sb = src & 0x00f0>>4;
   psrc++;
 }
 else
 {
   sr = src&0x0f00>>8;
   sg = src&0x00f0>>4;
   sb = src &0x000f;
   psrc+=2;
 }
 b = !b;

 sr = (float)sr/17.0f*37.0f;
 sg = (float)sg/17.0f*37.0f;
 sb = (float)sb/17.0f*37.0f;
 *((unsigned short*)(pBits+i*2)) = sr<<10+sg<<5+sb;
}

HBITMAP hBitmap = CreateBitmap(250, 250, 1, 16, pBits);
CImage image;
image.Attach(hBitmap);
image.Save("D:\\aaaaa", Gdiplus::ImageFormatGIF);



--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 24.10.2004, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Нет, все равно не сохраняет, и опять же никаких ошибок не выдает. :(
Что-то в создании БИТМЭПА не правильно:
hBitmap 0x10050d33 {unused=??? } HBITMAP__ *
unused CXX0030: Error: expression cannot be evaluated int

--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 25.10.2004, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Goldberg
Вопервых ты в дебагере битмап неправильно смотриш (HBITMAP это не указатель :) )

пришли на мыло дфнные одного кадра, посмотрю (хоть GDI+ и нема, но bmp записать должно и без него)


--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 25.10.2004, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Mad @ 25.10.2004, 14:19)

дфнные

Что сие есть?

Это сообщение отредактировал(а) Goldberg - 25.10.2004, 15:19
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 25.10.2004, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Goldberg
сие есть опечатка , следеут читать данные :)
а именно отот твой чаровый масив (просто запиши его в файл и вышли)


--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 25.10.2004, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Отослал.
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Goldberg
Дата 25.10.2004, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



2Mad
Получил???
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 26.10.2004, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Goldberg
Да.
Посмотрел.
Вот такой код переводит массив из 12bpp в 16bpp
Код

 char *pBits = new char[250*250*2];
 bool b = true;
 int psrc = 0;

 for (int i=0; i<250*250; i++)
 {
  unsigned short src = *(unsigned short*)(chReadImage+psrc);
  int sr = 0;
  int sg = 0;
  int sb = 0;
  if (b)
  {
   sr = src & 0xf000>>12;
   sg = src & 0x0f00>>8;
   sb = src & 0x00f0>>4;
   psrc++;
  }
  else
  {
   sr = src&0x0f00>>8;
   sg = src&0x00f0>>4;
   sb = src &0x000f;
   psrc+=2;
  }
  b = !b;

  sr = (int)(((float)sr/17.0f)*37.0f)<<10;
  sg = (int)(((float)sg/17.0f)*37.0f)<<5;
  sb = (int)(((float)sb/17.0f)*37.0f);
  unsigned short res = sr+sg+sb;
  pBits[i*2] = (res&0xff00)>>8;
  pBits[i*2+1] = (res&0x00ff);
 }

 HBITMAP hBitmap = CreateBitmap(250, 250, 1, 16, pBits);
 

Поставил GDI+, и попробовал записать картинку - ноль. :(
Кстати HBITMAP нормально создается. После присоединения его CImage правильно определяет его параметры.

Попробуй отказатся от GDI+, и попробовать другую библиотеку, например CxImage, FreeImage (помоему обе на SourceForge были).


--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 26.10.2004, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ok.
Спасибо! :)
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Goldberg
Дата 26.10.2004, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Тут еще вопросик.)
Как сделать массив размером nSize? Ну то есть, например:
int nSize = 9375;
nSize = nSize * 10;
unsigned char chReadImage[nSize]; - Неправильно. Пробовал по разному - не работатет.

Это сообщение отредактировал(а) Goldberg - 26.10.2004, 17:55
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
chipset
Дата 26.10.2004, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Goldberg @ 26.10.2004, 05:55)

unsigned char[nSize];

Вообще то это некорректный синтаксис..
unsigned char i[nSize];
Правда я все равно не уверен..
Вот так делай
unsigned char *i;
i = new char(nSize);


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Mad
Дата 26.10.2004, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Цитата(chipset @ 26.10.2004, 15:59)

i = new char(nSize);

ты наверно имел в виду i = new char[nSize]


--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 26.10.2004, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(chipset @ 26.10.2004, 16:59)
Цитата(Goldberg @ 26.10.2004, 05:55)

unsigned char[nSize];

Вообще то это некорректный синтаксис..
unsigned char i[nSize];

Это я просто здесь ошибся.
Я имел ввиду - unsigned char chReadImage[nSize];
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 27.10.2004, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Цитата(Goldberg @ 26.10.2004, 17:56)

Я имел ввиду - unsigned char chReadImage[nSize];

Все равно не правильно. Локальные переменные и массивы выделяються при компиляции из стека, соответственно динамическое указание размера локального массива приведет к переполнению стека.


--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 27.10.2004, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Странно...
int nSize = nGetBlock * 9375;
unsigned char* chReadImage = new unsigned char[nSize];
Записывается только 4 байта.
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Goldberg
Дата 27.10.2004, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Даже если вот так:
unsigned char* chReadImage = new unsigned char[93750];
Результат отличается от:
unsigned char chReadImage[93750];
Я в функции чтения данных указываю кол-во байт которые нужно читать, а именно:
ReadData(chReadImage, sizeof(chReadImage));
Т.е. получается, что в первом случае sizeof(chReadImage) возвращает размер chReadImage 4.
************************
Сейчас проверил, действительно, sizeof почему-то возвращает - 4.

Это сообщение отредактировал(а) Goldberg - 27.10.2004, 21:37
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 28.10.2004, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Цитата(Goldberg @ 27.10.2004, 21:30)

Я в функции чтения данных указываю кол-во байт которые нужно читать, а именно:
ReadData(chReadImage, sizeof(chReadImage));

Вот она и читает тебе 4 байта (длина указателя) :)
Код

int nSize = nGetBlock * 9375;
unsigned char* chReadImage = new unsigned char[nSize];
ReadData(chReadImage, nSize);



--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 28.10.2004, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Mad @ 28.10.2004, 13:07)
Вот она и читает тебе 4 байта (длина указателя) :)
Код

int nSize = nGetBlock * 9375;
unsigned char* chReadImage = new unsigned char[nSize];
ReadData(chReadImage, nSize);

Да, действительно. Как я сам не догодался.
Спасибо! :)
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Goldberg
Дата 30.10.2004, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Еще вопросик появился)
Код

unsigned char* m_pSummFrame[93750]
...
Тут заполняем m_pSummFrame
...
CImage image;
short int* pBuf;
pBuf =  (short int*)image.GetBits();
memcpy((void*) pBuf, (const void*) m_pSummFrame, nSize); //nSize = 93750

Что в memcpy не правильно?
/////////////////////////////////////
На всякий случай:
CImage::GetBits
Return Value
A pointer to the bitmap buffer. If the bitmap is a bottom-up DIB, the pointer points near the end of the buffer. If the bitmap is a top-down DIB, the pointer points to the first byte of the buffer.
/////////////////////////////////////
Короче говоря, я получаю указатель на буфер, и пытаюсь записать туда все, что находится в m_pSummFrame.

Это сообщение отредактировал(а) Goldberg - 30.10.2004, 19:47
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 30.10.2004, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Goldberg
Цитата(MSDN)

Note  This method supports only DIB section bitmaps; consequently, you access the pixels of a CImage object the same way you would the pixels of a DIB section. The returned pointer points to the pixel at the location (0, 0).

А у тебя получается не DIB :)
Придется тебе из сумарного массива снова делать HBITMAP, и атачить его к другому CImage.


--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 30.10.2004, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Стоп-стоп. Все у меня ДИБ.)
Код

CImage image;
image.Create(250, 250, 16);
RGBQUAD rgb[4096];
int nColor = 0;
for (nColor = 0; nColor < 4096; nColor++)
        {
 rgb[nColor].rgbBlue = nColor / 16;
 rgb[nColor].rgbGreen = nColor / 16;
 rgb[nColor].rgbRed = nColor / 16;
  }
   short int* pBuf =  (short int*)image.GetBits();
memcpy((void*) &pBuf, (const void*) &m_pSummFrame, (size_t) nSize);
image.SetColorTable(0, 4096, (const RGBQUAD*) &rgb);

   image.Save("C:\\AAAAAA.bmp");

CImage::Create: Creates a DIB section bitmap and attaches it to the previously constructed CImage object.
Добавлено @ 20:11
При получении указателя никаких проблем не возникает.
А вот при попытке записать: Unhandled exception at 0x10216393 (msvcr71d.dll) in Name.exe: 0xC0000005: Access violation reading location 0x00131000.

Это сообщение отредактировал(а) Goldberg - 30.10.2004, 20:04
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Goldberg
Дата 31.10.2004, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

unsigned char* m_pSummFrame = new unsigned char[nSize]; //nSize = 93750
short int* pBuf =  (short int*) image.GetBits();
for (int nByte = 0; nByte < nSize; nByte++)
{
 memcpy((void*) &pBuf, (const void*) &m_pSummFrame, (size_t) nByte);
}

Вроде как все начинает работать, но доходит до nByte = 8181, опять возникает описанная мной выше ошибка.
В memcpy третий параметр, это кол-во байтов которые нужно копировать, или это номер байта в m_pSummFrame, который нужно копировать? Везде по разному пишут.
Придерживаюсь второго варианта, хотя бы потому что цикл выполняется 8181 раз, а в первом случае сразу вылетает ошибка. :)
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 31.10.2004, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Цитата(Goldberg @ 30.10.2004, 20:04)

memcpy((void*) &pBuf, (const void*) &m_pSummFrame, (size_t) nSize);

тут ошибка, надо
Код

memcpy((void*) pBuf, (const void*) m_pSummFrame, (size_t) nSize);


Цитата(Goldberg @ 31.10.2004, 13:04)

В memcpy третий параметр, это кол-во байтов которые нужно копировать, или это номер байта в m_pSummFrame, который нужно копировать? Везде по разному пишут.
Придерживаюсь второго варианта

нетправильно, екокраз первый вариант : кол-во байтов.

И еще один лапсус.
Ты создаеш палитры из 4096 цветов. Хотя у тебя 16 битной изображение, и цветов в нем 65536 соответственно.
К тому же 16,24,32 битные изображения палитру не используют :)


--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 31.10.2004, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



1. Хм все равно вылетате та ошибка.
2. Ну тогда должно быть так по идее:
Код

for (int nByte = 0; nByte < nSize; nByte++)
{
 memcpy((void*) pBuf, (const void*) m_pSummFrame[nByte], 1);
}

Но увы не работает. Можно эту операция как-нибудь по другому выполнить, без memcpy? Ну например подобное будет эквивалентом memcpy?:
Код

for (int nByte = 0; nByte < nSize; nByte++)
{
 pBuf = (short*) &m_pSummFrame[nByte];
}


Это сообщение отредактировал(а) Goldberg - 31.10.2004, 22:19
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 1.11.2004, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Goldberg
Просто напиши
Код

memcpy((void*) pBuf, (const void*) m_pSummFrame, nSize);

без всякого цикла.


--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 1.11.2004, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну так нет же... Unhandled exception at 0x10216393 (msvcr71d.dll) in Name.exe: 0xC0000005: Access violation writing location 0x00f6f000. :( Пробовал уже.
Ну так что, без memcpy никак не обойтись?

Это сообщение отредактировал(а) Goldberg - 1.11.2004, 18:11
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 2.11.2004, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Goldberg
Проблема не memcpy.
без него будет выглядеть так :
Код

for (int nByte = 0; nByte < nSize; nByte++)
{
   pBuf[nByte] = m_pSummFrame[nByte];
}

Но думаю, что ошибку это не уберет :(

[qoute=MSDN]
A pointer to the bitmap buffer. If the bitmap is a bottom-up DIB, the pointer points near the end of the buffer.
[/quote]

Посмотри в дебагере какой у тебя битмап получается top-down или bottom-up, скорей всего проблемма в этом.


--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 2.11.2004, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



m_nPitch = -500
Цитата
The pitch of the image. If the return value is negative, the bitmap is a bottom-up DIB and its origin is the lower left corner. If the return value is positive, the bitmap is a top-down DIB and its origin is the upper left corner.

Т.е. bottom-up(вроде).
Как мне тогда, в начало буфера это дело записать?
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 2.11.2004, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Goldberg
pBuf -= img.GetPitch()*img.GetHeight;


--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 2.11.2004, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

short int* pBuf =  (short int*) image.GetBits();
pBuf -= (image.GetPitch() * image.GetHeight());
for (int nByte = 0; nByte < nSize; nByte++)
{
   //memcpy((void*) pBuf, (const void*) m_pSummFrame, nSize);
   pBuf[nByte] = m_pSummFrame[nByte];
}

Unhandled exception at 0x004275d5 in Name.exe: 0xC0000005: Access violation writing location 0x00fab6e4.
:(


Это сообщение отредактировал(а) Goldberg - 2.11.2004, 15:44
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 3.11.2004, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Goldberg
Цитата(Goldberg @ 2.11.2004, 15:43)

Код

short int* pBuf =  (short int*) image.GetBits();
pBuf -= (image.GetPitch() * image.GetHeight());
for (int nByte = 0; nByte < nSize; nByte++)
{
  //memcpy((void*) pBuf, (const void*) m_pSummFrame, nSize);
  pBuf[nByte] = m_pSummFrame[nByte];
}


Код

short int* pBuf =  (short int*) image.GetBits();
pBuf += (image.GetPitch() * image.GetHeight()); // забыл что pitch тута отрицательный :)
memcpy((void*) pBuf, (const void*) m_pSummFrame, nSize);



--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 3.11.2004, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Mad @ 3.11.2004, 11:37)
Код

short int* pBuf =  (short int*) image.GetBits();
pBuf += (image.GetPitch() * image.GetHeight()); // забыл что pitch тута отрицательный :)
memcpy((void*) pBuf, (const void*) m_pSummFrame, nSize);

Ну это да, я уже заметил и исправил.
Но все равно Unhandled exception at 0x0041ae74 in Name.exe: 0xC0000005: Access violation writing location 0x00f315c4.
Тут что-то еще... :(

Это сообщение отредактировал(а) Goldberg - 3.11.2004, 11:50
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 3.11.2004, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Goldberg
попробуй
Код

pBuf += (image.GetPitch() * (image.GetHeight()-1));




--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 3.11.2004, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Mad @ 3.11.2004, 12:03)
Goldberg
попробуй
Код

pBuf += (image.GetPitch() * (image.GetHeight()-1));

Пробовал.
pBuf = pBuf + (image.GetPitch() * (image.GetHeight() - 1));
pBuf = pBuf + (image.GetPitch() * (image.GetHeight() - 100)); //ради эксперемента

Результат тот же :(
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 3.11.2004, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Goldberg
Вышли на мыло полный проект.


--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 3.11.2004, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Проект или функцию? Если ф-цию то вот:
Код

BOOL CSerial::GetImage()
{
char chWriteGetData[3];
chWriteGetData[0] = 0x8D;
chWriteGetData[1] = 0x00;
chWriteGetData[2] = 0x00;

BOOL bWriteStatus = SendCommand(chWriteGetData);
    if (bWriteStatus == FALSE) return FALSE;

    int nGetBlock = GetBlocks();
    if (!nGetBlock) return FALSE;

int nSize = nGetBlock * 9375;
unsigned char* chReadImage = new unsigned char[nSize];

int nReadStatus = ReadData(chReadImage, nSize);
if (!nReadStatus) return FALSE;

unsigned short nP1,nP2,nLB1,nLB2;
long k,n;
unsigned char *pFrame;
//pFrame = (unsigned char *)m_pPackFrame;
pFrame = chReadImage;
unsigned char* m_pSummFrame = new unsigned char[nSize];

 n=0;
 for(k=0; k<nSize; k+=3)
 {
  nP1 = pFrame[k];
  nP1 = nP1 << 4;
  nP2 = pFrame[k+1];
  nP2 = nP2 << 4;
  nLB1 = pFrame[k+2];
  nLB1 = nLB1 & 0x0f;
  nP1 += nLB1;
  nLB2 = pFrame[k+2];
  nLB2 = nLB2 & 0xf0;
  nLB2  = nLB2 >> 4;
  nP2 += nLB2;
  m_pSummFrame[n++] = nP1;
  m_pSummFrame[n++] = nP2;
 }

CImage image;
image.Create(250, 250, 16);

RGBQUAD rgb[4096];
int nColor;
for (nColor = 0; nColor < 4095; nColor++)
{
             rgb[nColor].rgbBlue = nColor / 16;
             rgb[nColor].rgbGreen = nColor / 16;
             rgb[nColor].rgbRed = nColor / 16;
  }
   
short int* pBuf =  (short int*) image.GetBits();

pBuf += (image.GetPitch() * (image.GetHeight()- 1));

for (int nByte = 0; nByte < nSize; nByte++)
{
 //memcpy((void*) pBuf, (const void*) m_pSummFrame, nSize);
             pBuf[nByte] = m_pSummFrame[nByte];
}
   image.SetColorTable(0, 4096, (const RGBQUAD*) &rgb);

   image.Save("C:\\AAAAAA.bmp");

delete chReadImage;
delete m_pSummFrame;

return nReadStatus;
}



Это сообщение отредактировал(а) Goldberg - 3.11.2004, 12:43
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Mad
Дата 3.11.2004, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Goldberg
Ты тут все вместе перепутал :)

Вопервых используеш один размер и для 12bpp изображения и для 16bpp (а они всетаки разные :))
Добавлено @ 12:48
Goldberg
Попробуй заменить эту фугкцию на
Код

BOOL CSerial::GetImage()
{
   char chWriteGetData[3];
   chWriteGetData[0] = 0x8D;
   chWriteGetData[1] = 0x00;
   chWriteGetData[2] = 0x00;

   BOOL bWriteStatus = SendCommand(chWriteGetData);
   if (bWriteStatus == FALSE) return FALSE;

   int nGetBlock = GetBlocks();
   if (!nGetBlock) return FALSE;

   int nSize = nGetBlock * 9375;
   unsigned char* chReadImage = new unsigned char[nSize];

   int nReadStatus = ReadData(chReadImage, nSize);
   if (!nReadStatus) return FALSE;

   char *pBits = new char[250*250*2];
   bool b = true;
   int psrc = 0;

for (int i=0; i<250*250; i++)
{
 unsigned short src = *(unsigned short*)(chReadImage+psrc);
 int sr = 0;
 int sg = 0;
 int sb = 0;
 if (b)
 {
  sr = src & 0xf000>>12;
  sg = src & 0x0f00>>8;
  sb = src & 0x00f0>>4;
  psrc++;
 }
 else
 {
  sr = src&0x0f00>>8;
  sg = src&0x00f0>>4;
  sb = src &0x000f;
  psrc+=2;
 }
 b = !b;

 sr = (int)(((float)sr/17.0f)*37.0f)<<10;
 sg = (int)(((float)sg/17.0f)*37.0f)<<5;
 sb = (int)(((float)sb/17.0f)*37.0f);
 unsigned short res = sr+sg+sb;
 pBits[i*2] = (res&0xff00)>>8;
 pBits[i*2+1] = (res&0x00ff);
}

CImage image;
image.Create(250, 250, 16);

short int* pBuf =  (short int*) image.GetBits();

pBuf += (image.GetPitch() * (image.GetHeight()- 1));

memcpy((void*) pBuf, (const void*) pBits, 250*250*2);
image.Save("C:\\AAAAAA.bmp");

delete chReadImage;
delete m_pSummFrame;

return nReadStatus;
}




--------------------
user posted image
PM MAIL   Вверх
Goldberg
Дата 3.11.2004, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Unhandled exception at 0x10216393 (msvcr71d.dll) in CameraControl.exe: 0xC0000005: Access violation writing location 0x00f319ac.

Это уже серьезно... :)
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Goldberg
Дата 3.11.2004, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Mad
Послал приватное сообщение.
--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL 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.1202 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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