Страница 1 из 1

Как получить доступ к битам изображения?

Добавлено: 30 Апрель 2006, 6:46
Анатолий Токарев
Уважаемые коллеги, задача следующая:
1 есть web-камера 640*480
2 нужно по нажатию кнопки сделать снимок текущего изображения
3 преобразовать полученное 24 битное цветное изображение в черно-белое и построить матрицу в виде массива 640*480 элементов.

Первые два пункта реализованы без проблем, а вот с п.3 увы, ничего не получается.
Предполагалось для простоты и скорости использовать зеленую составляющую картинки для BW матрицы.
Я пытался использовать пример А.Мялина (grabber):

Код: Выделить всё

Convert         routine                                        ! 
    hdcScreen = CreateDC(Displ,0,0)
    hdcCompatible = CreateCompatibleDC(hdcScreen)
    hbmScreen = CreateCompatibleBitmap(hdcScreen,640,480)

    IF NOT hbmScreen
        MESSAGE('Error on CreateCompatibleBitmap Error!',ICON:HAND)
    END

    IF NOT SelectObject(hdcCompatible, hbmScreen)
        MESSAGE('SelectObject Error!',ICON:HAND)
    END

    IF NOT BitBlt(hdcCompatible,0,0,639,479,hdcScreen,0,0,SRCCOPY)
        MESSAGE('Screen to Compat Blt Failed','Error!',ICON:HAND)
    END

    hMemory = GlobalAlloc(GMEM_FIXED, 1920)
    message('GlobalAlloc ='&hMemory)

    loop I=0 to 479
        FirstLine = I
        NLines = 1

        RtnVal = GetDIBits(hdcCompatible, hbmScreen, FirstLine, NLines, address(OneLine), bmi, DIB_RGB_COLORS)
        message('GetDIBits='&RtnVal&', address(OneLine)='&address(OneLine))

        loop J=1 to 640
            Matrix[J,I+1] = OneLine[J]!OneLine.G[J]
        end
    END
но застрял на GetDIBits - не работает эта функция, всегда возвращает 0.
Не силен я в API, да и не писал программ давно - ослаб ;)

Может кто поможет?

Добавлено: 30 Апрель 2006, 12:58
Admin
А библиотека ImageEx не может помочь?

Добавлено: 01 Май 2006, 4:15
Анатолий Токарев
Admin писал(а):А библиотека ImageEx не может помочь?
А что это за зверь и где он живет? И где взять описание?

Добавлено: 01 Май 2006, 15:37
Admin
http://www.solidsoftware.de
посмотри по функционалу...
потом на нашем FTP смотри.
если нет или не той версии кричи! может быть народ поможетет...

Я не помню у нас куплено или нет...

Добавлено: 02 Май 2006, 16:03
Анатолий Токарев
Admin писал(а):http://www.solidsoftware.de
посмотри по функционалу...
потом на нашем FTP смотри.
если нет или не той версии кричи! может быть народ поможетет...

Я не помню у нас куплено или нет...
Ага, спасибо за совет. А где FTP? Если через приват, то у меня туда ходу нет, не получил туда доступа.

Добавлено: 02 Май 2006, 16:15
Admin
В приват доступ сделал.
Читай тред про FTP

Добавлено: 03 Май 2006, 5:20
Анатолий Токарев
Admin писал(а):В приват доступ сделал.
Читай тред про FTP
Спасибо за приват!
Про FTP так ничего и не наше - ни в поиске, ни в FAQ. Можно носом ткнуть?

C вопросом похоже вопрос решил и без библиотеки, аж двумя способами, один правда медленный - через GetPixel,
а второй - компиляция из статьи с вашего сайта "ИЗО: рисуем в памяти и в не клиентской области" и примера А.Мялина (MSDN). Странно - не работало из-за того, что я сам (для простоты) инициализировал структуру данных. Как только сделал (чисто тупо, 1:1) как у Андрея, все заработало. Теперь нужно все причесать.

Пример, с захватом изображения с web-камеры пришлю, может еще кому понадобится.

P.S. В который раз убеждаюсь, что если долго и методично биться лбом в стену "не получается", стена не выдерживает первой ;)

Добавлено: 03 Май 2006, 12:41
Admin
Вот здесь как посмотрет приват FTP через http : http://forum.clarionlife.net/viewtopic.php?t=1520
Здесь как по FTP ходить в приватные папки : http://forum.clarionlife.net/viewtopic.php?t=1326

Смотри там каталог SolidSoftware