Как получить доступ к битам изображения?
Добавлено: 30 Апрель 2006, 6:46
Уважаемые коллеги, задача следующая:
1 есть web-камера 640*480
2 нужно по нажатию кнопки сделать снимок текущего изображения
3 преобразовать полученное 24 битное цветное изображение в черно-белое и построить матрицу в виде массива 640*480 элементов.
Первые два пункта реализованы без проблем, а вот с п.3 увы, ничего не получается.
Предполагалось для простоты и скорости использовать зеленую составляющую картинки для BW матрицы.
Я пытался использовать пример А.Мялина (grabber):
но застрял на GetDIBits - не работает эта функция, всегда возвращает 0.
Не силен я в API, да и не писал программ давно - ослаб
Может кто поможет?
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
Не силен я в API, да и не писал программ давно - ослаб

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