Code: Select all
IncludeFile "includes/cv_functions.pbi"
Global GetCV.b, *save.IplImage, ExitCV.b, lpPrevWndFunc
#CV_WINDOW_NAME = "PureBasic Interface to OpenCV"
#CV_DESCRIPTION = "How to draw text in openCV with any font."
Procedure WindowCallback(hWnd, Msg, wParam, lParam)
Select Msg
Case #WM_COMMAND
Select wParam
Case 1
GetCV = #True
keybd_event_(#VK_ESCAPE, 0, 0, 0)
Case 2
FileName.s = SaveFile()
If FileName
params.SAVE_INFO
Select LCase(GetExtensionPart(FileName))
Case "jpeg", "jpg", "jpe"
params\paramId = #CV_IMWRITE_JPEG_QUALITY
params\paramValue = 95
Case "png"
params\paramId = #CV_IMWRITE_PNG_COMPRESSION
params\paramValue = 3
Case "ppm", "pgm", "pbm"
params\paramId = #CV_IMWRITE_PXM_BINARY
params\paramValue = 1
Default
Select SelectedFilePattern()
Case 0
FileName + ".jpg"
params\paramId = #CV_IMWRITE_JPEG_QUALITY
params\paramValue = 95
Case 1
FileName + ".png"
params\paramId = #CV_IMWRITE_PNG_COMPRESSION
params\paramValue = 3
Case 2
FileName + ".ppm"
params\paramId = #CV_IMWRITE_PXM_BINARY
params\paramValue = 1
EndSelect
EndSelect
cvSaveImage(FileName, *save, @params)
EndIf
Case 10
keybd_event_(#VK_ESCAPE, 0, 0, 0)
EndSelect
Case #WM_DESTROY
ExitCV = #True
EndSelect
ProcedureReturn CallWindowProc_(lpPrevWndFunc, hWnd, Msg, wParam, lParam)
EndProcedure
ProcedureC CvMouseCallback(event, x, y, flags, *param.USER_INFO)
Select event
Case #CV_EVENT_RBUTTONDOWN
*save.IplImage = *param\uPointer1
DisplayPopupMenu(0, *param\uValue)
EndSelect
EndProcedure
Procedure OpenCV(ImageFile.s)
If FileSize(ImageFile) > 0
cvNamedWindow(#CV_WINDOW_NAME, #CV_WINDOW_NORMAL)
window_handle = cvGetWindowHandle(#CV_WINDOW_NAME)
*window_name = cvGetWindowName(window_handle)
lpPrevWndFunc = SetWindowLongPtr_(window_handle, #GWL_WNDPROC, @WindowCallback())
If CreatePopupImageMenu(0, #PB_Menu_ModernLook)
MenuItem(1, "Open")
MenuBar()
MenuItem(2, "Save")
MenuBar()
MenuItem(10, "Exit")
EndIf
hwnd = GetParent_(window_handle)
opencv = LoadImage_(GetModuleHandle_(0), @"icons/opencv.ico", #IMAGE_ICON, 35, 32, #LR_LOADFROMFILE)
SendMessage_(hwnd, #WM_SETICON, 0, opencv)
wStyle = GetWindowLongPtr_(hwnd, #GWL_STYLE)
SetWindowLongPtr_(hwnd, #GWL_STYLE, wStyle & ~(#WS_MAXIMIZEBOX | #WS_MINIMIZEBOX | #WS_SIZEBOX))
*image.IplImage = cvLoadImage(ImageFile, #CV_LOAD_IMAGE_ANYDEPTH | #CV_LOAD_IMAGE_ANYCOLOR)
dtWidth = DesktopWidth(0)
dtHeight = DesktopHeight(0)
If *image\width >= dtWidth - 100 Or *image\height >= dtHeight - 100
iWidth = dtWidth - 100
iRatio1.d = iWidth / *image\width
iHeight = dtHeight - 100
iRatio2.d = iHeight / *image\height
If iRatio1 < iRatio2
iWidth = *image\width * iRatio1
iHeight = *image\height * iRatio1
Else
iWidth = *image\width * iRatio2
iHeight = *image\height * iRatio2
EndIf
cvResizeWindow(#CV_WINDOW_NAME, iWidth, iHeight)
*resize.IplImage = cvCreateImage(iWidth, iHeight, #IPL_DEPTH_8U, *image\nChannels)
cvResize(*image, *resize, #CV_INTER_AREA)
Else
cvResizeWindow(#CV_WINDOW_NAME, *image\width, *image\height)
*resize.IplImage = cvCloneImage(*image)
EndIf
cvMoveWindow(#CV_WINDOW_NAME, 20, 20)
ToolTip(window_handle, #CV_DESCRIPTION)
*mask.IplImage = cvCreateImage(*resize\width, 80, #IPL_DEPTH_8U, *resize\nChannels)
cvSet(*mask, 0, 0, 0, 0, #Null)
Font = LoadFont(#PB_Any, "BetinaScriptCTT", 36, #PB_Font_Bold)
pbimage = CreateImage(#PB_Any, *mask\width, 80, 24 , RGB($00,$00,$00))
StartDrawing(ImageOutput(pbimage))
DrawingFont(FontID(Font))
DrawText((*mask\width-480)/2, 5, "Hello, any font in openCV!", RGB($FF,$FF,$FF))
*mask\imageData = DrawingBuffer()
StopDrawing()
cvFlip(*mask, #Null, 0)
cvSetImageROI(*resize, 0, *resize\height-100, *resize\width, 80)
cvAddS(*resize, 70,70,70,0, *resize, 0)
cvSub(*resize, *mask, *resize, 0)
cvResetImageROI(*resize)
*param.USER_INFO = AllocateMemory(SizeOf(USER_INFO))
*param\uPointer1 = *resize
*param\uValue = window_handle
cvSetMouseCallback(*window_name, @CvMouseCallback(), *param)
Repeat
If *resize
cvShowImage(#CV_WINDOW_NAME, *resize)
keyPressed = cvWaitKey(0)
EndIf
Until keyPressed = 27 Or ExitCV
FreeMemory(*param)
cvReleaseImage(@*resize)
cvReleaseImage(@*image)
cvDestroyWindow(#CV_WINDOW_NAME)
If GetCV
GetCV = #False
ExitCV = #False
OpenCV(GetImage())
EndIf
EndIf
EndProcedure
ExamineDesktops()
OpenCV(GetImage())
Thank you for links, i will read they.