CCD每摄像出来一张图片,在其上面画特定的线
CCD每拍摄出来一张图片,在其上面画特定的线。
如题:
我CCD摄像头每拍摄出来一张图片,我怎么在图片的特定位置上画出线来,画的线是V型的线。。。
------解决方案--------------------
仅供参考
------解决方案--------------------
这是内存画图。在你保存摄像头采集的图片时,摄像头将数据传到电脑内存,Byte 或char数组。然后它们一般是按你的格式来保存JPEG/BMP等。你要做的是,在他们保存在硬盘之前,调用GDI或GDI+(你用GDI+吧,这个方便些,VS2012已自带了,你只要加载头文件就是)画内存图像画直线,然后将内存图像保存到硬盘上。。。就完了。
你要想法子将采集到的内存数据转到Cimage类的对像中(这个VS2012也是自带的),GDI+能直接在Cimage类的对像中直接画图。
------解决方案--------------------
仅供参考
如题:
我CCD摄像头每拍摄出来一张图片,我怎么在图片的特定位置上画出线来,画的线是V型的线。。。
------解决方案--------------------
仅供参考
#pragma comment(lib,"user32")
#pragma comment(lib,"gdi32")
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
HWND WINAPI GetConsoleWindow();
void HideTheCursor() {
CONSOLE_CURSOR_INFO cciCursor;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {
cciCursor.bVisible = FALSE;
SetConsoleCursorInfo(hStdOut, &cciCursor);
}
}
void ShowTheCursor() {
CONSOLE_CURSOR_INFO cciCursor;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {
cciCursor.bVisible = TRUE;
SetConsoleCursorInfo(hStdOut, &cciCursor);
}
}
int main() {
HWND hwnd;
HDC hdc;
HFONT hfont;
int i,x,y;
srand(time(NULL));
system("color F0");
system("cls");
HideTheCursor();
hwnd = GetConsoleWindow();
hdc = GetDC(hwnd);
hfont = CreateFont(48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "华文楷体");
SelectObject(hdc,hfont);
TextOut(hdc,10,10,"地球人都知道!",14);
MoveToEx(hdc,5,5,NULL);
LineTo(hdc,300, 5);
LineTo(hdc,300, 60);
LineTo(hdc, 5, 60);
LineTo(hdc, 5, 5);
for (i=0;i<100;i++) {
x=rand()%400;
y=rand()%300;
SetPixel(hdc,x,y,0);
}
DeleteObject(hfont);
ReleaseDC(hwnd,hdc);
getchar();
system("color 07");
system("cls");
ShowTheCursor();
return 0;
}
------解决方案--------------------
这是内存画图。在你保存摄像头采集的图片时,摄像头将数据传到电脑内存,Byte 或char数组。然后它们一般是按你的格式来保存JPEG/BMP等。你要做的是,在他们保存在硬盘之前,调用GDI或GDI+(你用GDI+吧,这个方便些,VS2012已自带了,你只要加载头文件就是)画内存图像画直线,然后将内存图像保存到硬盘上。。。就完了。
你要想法子将采集到的内存数据转到Cimage类的对像中(这个VS2012也是自带的),GDI+能直接在Cimage类的对像中直接画图。
------解决方案--------------------
仅供参考
#pragma comment(lib,"gdi32")
#include <windows.h>
#include <stdio.h>
int main() {
const DWORD uWidth = 18 + 17 * 256, uHeight = 18 + 17 * 128;
PBITMAPINFO pbmi = (PBITMAPINFO) LocalAlloc (LPTR, sizeof (BITMAPINFOHEADER) + sizeof (RGBQUAD) * 2);
pbmi->bmiHeader.biSize = sizeof (BITMAPINFOHEADER);
pbmi->bmiHeader.biWidth = uWidth;
pbmi->bmiHeader.biHeight = uHeight;
pbmi->bmiHeader.biPlanes = 1;
pbmi->bmiHeader.biBitCount = 1;
pbmi->bmiHeader.biSizeImage = ((uWidth + 31) & ~31) / 8 * uHeight;
pbmi->bmiColors[0].rgbBlue = 0;
pbmi->bmiColors[0].rgbGreen = 0;
pbmi->bmiColors[0].rgbRed = 0;
pbmi->bmiColors[1].rgbBlue = 255;
pbmi->bmiColors[1].rgbGreen = 255;
pbmi->bmiColors[1].rgbRed = 255;
HDC hDC = CreateCompatibleDC (0);
void * pvBits;
HBITMAP hBitmap = CreateDIBSection (hDC, pbmi, 0, &pvBits, NULL, 0);
SelectObject (hDC, hBitmap);
HFONT hFont = CreateFont (16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "宋体");
// HFONT hFont = CreateFont (16, 0, 0, 0, 0, 0, 0, 0, SHIFTJIS_CHARSET, 0, 0, 0, 0, "宋体");
SelectObject (hDC, hFont);
BitBlt (hDC, 0, 0, uWidth, uHeight, NULL, 0, 0, WHITENESS);