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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание изображения, из чарового массива байтов 
:(
    Опции темы
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.2004 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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