Модераторы: 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0649 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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