![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Goldberg |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 3.6.2004 Репутация: нет Всего: нет |
Это я просто здесь ошибся. Я имел ввиду - unsigned char chReadImage[nSize]; --------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления. |
||||
|
|||||
| Mad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 7 Всего: 19 |
Все равно не правильно. Локальные переменные и массивы выделяються при компиляции из стека, соответственно динамическое указание размера локального массива приведет к переполнению стека. |
|||
|
||||
| Goldberg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 3.6.2004 Репутация: нет Всего: нет |
Странно...
int nSize = nGetBlock * 9375; unsigned char* chReadImage = new unsigned char[nSize]; Записывается только 4 байта. --------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления. |
|||
|
||||
| Goldberg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 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 --------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления. |
|||
|
||||
| Mad |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 7 Всего: 19 |
Вот она и читает тебе 4 байта (длина указателя)
|
||||
|
|||||
| Goldberg |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 3.6.2004 Репутация: нет Всего: нет |
Да, действительно. Как я сам не догодался. Спасибо! --------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления. |
||||
|
|||||
| Goldberg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 3.6.2004 Репутация: нет Всего: нет |
Еще вопросик появился)
Что в 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 --------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления. |
|||
|
||||
| Mad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 7 Всего: 19 |
Goldberg
А у тебя получается не DIB Придется тебе из сумарного массива снова делать HBITMAP, и атачить его к другому CImage. |
|||
|
||||
| Goldberg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 3.6.2004 Репутация: нет Всего: нет |
Стоп-стоп. Все у меня ДИБ.)
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 --------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления. |
|||
|
||||
| Goldberg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 3.6.2004 Репутация: нет Всего: нет |
Вроде как все начинает работать, но доходит до nByte = 8181, опять возникает описанная мной выше ошибка. В memcpy третий параметр, это кол-во байтов которые нужно копировать, или это номер байта в m_pSummFrame, который нужно копировать? Везде по разному пишут. Придерживаюсь второго варианта, хотя бы потому что цикл выполняется 8181 раз, а в первом случае сразу вылетает ошибка. --------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления. |
|||
|
||||
| Mad |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 7 Всего: 19 |
тут ошибка, надо
нетправильно, екокраз первый вариант : кол-во байтов. И еще один лапсус. Ты создаеш палитры из 4096 цветов. Хотя у тебя 16 битной изображение, и цветов в нем 65536 соответственно. К тому же 16,24,32 битные изображения палитру не используют |
||||||
|
|||||||
| Goldberg |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 3.6.2004 Репутация: нет Всего: нет |
1. Хм все равно вылетате та ошибка.
2. Ну тогда должно быть так по идее:
Но увы не работает. Можно эту операция как-нибудь по другому выполнить, без memcpy? Ну например подобное будет эквивалентом memcpy?:
Это сообщение отредактировал(а) Goldberg - 31.10.2004, 22:19 --------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления. |
||||
|
|||||
| Mad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 7 Всего: 19 |
Goldberg
Просто напиши
без всякого цикла. |
|||
|
||||
| Goldberg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 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 --------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления. |
|||
|
||||
| Mad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 7 Всего: 19 |
Goldberg
Проблема не memcpy. без него будет выглядеть так :
Но думаю, что ошибку это не уберет [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, скорей всего проблемма в этом. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |