Форум » GUI » Примеры из Минигуи -ошибки, вопросы..... (продолжение) » Ответить

Примеры из Минигуи -ошибки, вопросы..... (продолжение)

Andrey: Всем привет. Взялся смотреть примеры из МиниГуи, так не все работают. Может кто подскажет что там "допилить" нужно ? А заодно может и исправить и добавить новые.... Очень красочный пример: \MiniGUI\SAMPLES\Advanced\AVI_Animation - не работает под Win7 (наверно AVI-шки нет в ресурсах) Предложение Григорию: Можно ли добавить еще один пример с отдельным AVI-файлом в ресурсах проекта и показом такого же бегунка ? Пример: \MiniGUI\SAMPLES\Advanced\DisplayMode - не работает под ХР и далее.... Пример: \MiniGUI\SAMPLES\Advanced\Tsb_filter - вылетает на ХР -------------------------------------------------------------------------------- Harbour MiniGUI Errorlog File Harbour MiniGUI Extended Edition 2.0.1 - 2011.09.21 -------------------------------------------------------------------------------- Date: 11/15/2011 Time: 22:13:24 Error BASE/1124 Argument error: LEFT Called from LEFT(0) Called from SCANSOFT(195) Called from MAIN(84) Пример: \MiniGUI\SAMPLES\BASIC\MsgEdit - не собирается... Z:\MiniGUI\SAMPLES\BASIC\MsgEdit>call ..\..\..\batch\compile.bat demo /L shell32 Harbour 3.1.0dev (Rev. 17042) Copyright (c) 1999-2011, http://harbour-project.org/ Compiling 'demo.prg'... Lines 20133, Functions/Procedures 30 Generating C source output to 'demo.c'... Done. Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland demo.c: Error E2141 demo.prg 993: Declaration syntax error *** 1 errors in Compile *** C compile error.

Ответов - 300, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

SergKis: Dima пишет По большому счету в ON INIT можно и убрать поставить тиймер с сообщением на время и будет долбить фото. Не помогло однако у меня работает нормально, 1-раз инициализация, 2-раз пошла фото, так же и при restore ok

Dima: SergKis Я тупанул , сорри. Не придал значения этой строке и не добавлял ее (This.Object):Event( 1, {|| CaptureImage() }) Все работает отлично Спасибо !

SergKis: Dima С событиями, такой пример получается [pre2] *-----------------------------------------------------------------------------* Procedure Main *-----------------------------------------------------------------------------* SET OOP ON IF StatusOk != GdiplusInitExt( _GDI_GRAPHICS ) MsgStop( "Init GDI+ Error", "Error" ) RETURN ENDIF _GdiplusInitLocal() DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 440 + GetBorderWidth() ; HEIGHT 300 + GetTitleHeight() + GetBorderHeight() ; TITLE 'WebCam Preview Demo' ; MAIN ; NOMAXIMIZE NOSIZE ; ON INIT ( wPost(3), wPost(3) ) ; // capture initialization ON RELEASE CloseWebCam() ; ON RESTORE ( wPost(3), wPost(3) ) ; // capture initialization (This.Object):Event( 1, {| | CreateWebCam() }) (This.Object):Event( 2, {| | CloseWebCam(), ; This.Image_1.hBitmap := Nil }) (This.Object):Event( 3, {| | CaptureImage() }) (This.Object):Event( 9, {|ow| ow:Release() }) @ 20,60 WEBCAM WebCam_1 ; WIDTH 250 HEIGHT 210 ; RATE 20 ; START DEFINE IMAGE Image_1 ROW 120 COL 280 WIDTH 150 HEIGHT 110 STRETCH .T. END IMAGE DEFINE BUTTON Button_1 ROW 10 COL 20 WIDTH 120 CAPTION 'Start WebCam' ACTION wPost(1) // CreateWebCam() END BUTTON DEFINE BUTTON Button_2 ROW 10 COL 150 WIDTH 120 CAPTION 'Stop WebCam' ACTION wpost(2) // CloseWebCam() END BUTTON DEFINE BUTTON Button_3 ROW 80 COL 315 WIDTH 80 CAPTION 'Capture' ACTION wPost(3) // CaptureImage() END BUTTON DEFINE LABEL Label_1 ROW 59 COL 19 WIDTH 252 HEIGHT 212 BORDER .T. END LABEL DEFINE LABEL Label_2 ROW 119 COL 279 WIDTH 152 HEIGHT 112 BORDER .T. END LABEL ON KEY ESCAPE ACTION wPost(9) // ThisWindow.Release END WINDOW CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 Return *-----------------------------------------------------------------------------* FUNC wPost( nEvent, nIndex ) *-----------------------------------------------------------------------------* (ThisWindow.Object):PostMsg(nEvent, nIndex) DO EVENTS RETURN Nil *-----------------------------------------------------------------------------* FUNC wSend( nEvent, nIndex ) *-----------------------------------------------------------------------------* (ThisWindow.Object):SendMsg(nEvent, nIndex) DO EVENTS RETURN Nil ... [/pre2]


SergKis: PS пропустил, вместо ON RELEASE CloseWebCam() ; надо ON RELEASE wPost(2) ; и (This.Object):Event( 1, {| | CreateWebCam(), wPost(3) })

SergKis: Плюс в пример пульт управления [pre2] *-----------------------------------------------------------------------------* Procedure Main *-----------------------------------------------------------------------------* SET OOP ON IF StatusOk != GdiplusInitExt( _GDI_GRAPHICS ) MsgStop( "Init GDI+ Error", "Error" ) RETURN ENDIF _GdiplusInitLocal() DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 440 + GetBorderWidth() ; HEIGHT 300 + GetTitleHeight() + GetBorderHeight() ; TITLE 'WebCam Preview Demo' ; MAIN ; NOMAXIMIZE NOSIZE ; ON INIT ( wPost(3), wPost(3) ) ; // capture initialization ON RELEASE wPost(2) ; ON RESTORE ( wPost(3), wPost(3) ) ; // capture initialization (This.Object):Event( 1, {| | CreateWebCam(), wPost(3) }) // +capture initialization (This.Object):Event( 2, {| | CloseWebCam(), ; This.Image_1.hBitmap := Nil }) (This.Object):Event( 3, {| | CaptureImage() }) (This.Object):Event( 4, {|ow| RemoteControl(ow) }) (This.Object):Event( 9, {|ow| ow:Release() }) @ 20,60 WEBCAM WebCam_1 ; WIDTH 250 HEIGHT 210 ; RATE 20 ; START DEFINE IMAGE Image_1 ROW 120 COL 280 WIDTH 150 HEIGHT 110 STRETCH .T. END IMAGE DEFINE BUTTON Button_1 ROW 10 COL 20 WIDTH 120 CAPTION 'Start WebCam' ACTION wPost(1) // CreateWebCam() END BUTTON DEFINE BUTTON Button_2 ROW 10 COL 150 WIDTH 120 CAPTION 'Stop WebCam' ACTION wPost(2) // CloseWebCam() END BUTTON DEFINE BUTTON Button_3 ROW 80 COL 315 WIDTH 80 CAPTION 'Capture' ACTION wPost(3) // CaptureImage() END BUTTON DEFINE LABEL Label_1 ROW 59 COL 19 WIDTH 252 HEIGHT 212 BORDER .T. END LABEL DEFINE LABEL Label_2 ROW 119 COL 279 WIDTH 152 HEIGHT 112 BORDER .T. END LABEL DEFINE BUTTON Button_4 ROW This.Label_2.Row + This.Label_2.Height + 10 COL This.Label_2.Col + 40 WIDTH 80 CAPTION 'Remote' ACTION wPost(4) // RemoteControl() END BUTTON ON KEY ESCAPE ACTION wPost(9) // ThisWindow.Release END WINDOW CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 Return *-----------------------------------------------------------------------------* FUNC wPost( nEvent, nIndex ) *-----------------------------------------------------------------------------* (ThisWindow.Object):PostMsg(nEvent, nIndex) DO EVENTS RETURN Nil *-----------------------------------------------------------------------------* FUNC wSend( nEvent, nIndex ) *-----------------------------------------------------------------------------* (ThisWindow.Object):SendMsg(nEvent, nIndex) DO EVENTS RETURN Nil *-----------------------------------------------------------------------------* STATIC FUNC RemoteControl( oWnd ) *-----------------------------------------------------------------------------* LOCAL nY := 10, nX := 20, nW := 120 DEFINE WINDOW Pult ; AT App.Row + App.Height + 2 + GetBorderHeight(), App.Col ; WIDTH App.Width ; HEIGHT 50 + GetTitleHeight() + GetBorderHeight() ; TITLE 'Remote Control' ; MODAL NOSIZE; ON RELEASE Nil (This.Object):Event( 1, {| | oWnd:PostMsg(1) }) (This.Object):Event( 2, {| | oWnd:PostMsg(2) }) (This.Object):Event( 3, {| | oWnd:PostMsg(3) }) (This.Object):Event( 9, {|ow| ow:Release() }) DEFINE BUTTON Button_1 ROW nY COL nX WIDTH nW CAPTION 'Start WebCam' ACTION wPost(1) // CreateWebCam() END BUTTON nX += This.Button_1.Width + 10 DEFINE BUTTON Button_2 ROW nY COL nX WIDTH nW CAPTION 'Stop WebCam' ACTION wPost(2) // CloseWebCam() END BUTTON nX += This.Button_2.Width + 10 DEFINE BUTTON Button_3 ROW nY COL nX WIDTH nW CAPTION 'Capture' ACTION wPost(3) // CaptureImage() END BUTTON ON KEY ESCAPE ACTION wPost(9) // ThisWindow.Release END WINDOW ACTIVATE WINDOW Pult RETURN Nil [/pre2]

Dima: SergKis Пример понятен. Спасибо. Не понятно почему без такого подхода глючил Image_1 на Form_1 Ведь не должен. Ведь в других примерах с IMAGE , при сворачивании окна и последующем поднятии ни чего ведь не глючит.....

SergKis: Dima пишет Ведь не должен. Надо расставить DO EVENTS и заработает, очередь не успевает обработаться, сообщения теряются. Я не хотел лезть во все функции, потому перевел пример на SET OOP ON. Подправил родной пример, вроде пошел [pre2] /* * MINIGUI - Harbour Win32 GUI library Demo * * Copyright 2011-2017 Grigory Filatov <gfilatov@inbox.ru> */ #include "minigui.ch" #include "hbgdip.ch" *-----------------------------------------------------------------------------* Procedure Main *-----------------------------------------------------------------------------* IF StatusOk != GdiplusInitExt( _GDI_GRAPHICS ) MsgStop( "Init GDI+ Error", "Error" ) RETURN ENDIF _GdiplusInitLocal() DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 440 + GetBorderWidth() ; HEIGHT 300 + GetTitleHeight() + GetBorderHeight() ; TITLE 'WebCam Preview Demo' ; MAIN ; NOMAXIMIZE NOSIZE ; ON INIT ( ; CaptureImage() ; // capture initialization ) ; ON RELEASE ( ; CloseWebCam() ; ) ; ON RESTORE ( ; CaptureImage() ; // capture initialization ) @ 20,60 WEBCAM WebCam_1 ; WIDTH 250 HEIGHT 210 ; RATE 20 ; START DEFINE IMAGE Image_1 ROW 120 COL 280 WIDTH 150 HEIGHT 110 STRETCH .T. END IMAGE DEFINE BUTTON Button_1 ROW 10 COL 20 WIDTH 120 CAPTION 'Start WebCam' ACTION CreateWebCam() END BUTTON DEFINE BUTTON Button_2 ROW 10 COL 150 WIDTH 120 CAPTION 'Stop WebCam' ACTION CloseWebCam() END BUTTON DEFINE BUTTON Button_3 ROW 80 COL 315 WIDTH 80 CAPTION 'Capture' ACTION CaptureImage() END BUTTON DEFINE LABEL Label_1 ROW 59 COL 19 WIDTH 252 HEIGHT 212 BORDER .T. END LABEL DEFINE LABEL Label_2 ROW 119 COL 279 WIDTH 152 HEIGHT 112 BORDER .T. END LABEL ON KEY ESCAPE ACTION ThisWindow.Release END WINDOW CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 Return *-----------------------------------------------------------------------------* Procedure CreateWebCam *-----------------------------------------------------------------------------* If ! IsControlDefined( WebCam_1, Form_1 ) @ 20,60 WEBCAM WebCam_1 OF Form_1 ; WIDTH 250 HEIGHT 210 ; RATE 20 Form_1.WebCam_1.Start() DO EVENTS Form_1.Button_3.Enabled := .T. EndIf Return *-----------------------------------------------------------------------------* Procedure CloseWebCam *-----------------------------------------------------------------------------* If IsControlDefined( WebCam_1, Form_1 ) Form_1.WebCam_1.Release() DO EVENTS Form_1.Button_3.Enabled := .F. EndIf Return *-----------------------------------------------------------------------------* Procedure CaptureImage *-----------------------------------------------------------------------------* Local hBitmap Local nWidth Local nHeight If cap_EditCopy( GetControlHandle ( 'WebCam_1', 'Form_1' ) ) DO EVENTS nWidth := GetProperty( "Form_1", "Image_1", "Width" ) nHeight := GetProperty( "Form_1", "Image_1", "Height" ) hBitmap := LoadFromClpbrd( GetFormHandle( 'Form_1' ), nWidth, nHeight ) DO EVENTS If !Empty( hBitmap ) Form_1.Image_1.hBitmap := hBitmap System.Clipboard := "" DO EVENTS gPlusSaveHBitmapToFile( hBitmap, "webcam.png", nWidth, nHeight, "image/png", 100 ) DO EVENTS EndIf Else MsgAlert( 'Capture is failure!', 'Error' ) EndIf Return #define CF_BITMAP 2 *-----------------------------------------------------------------------------* Static Function LoadFromClpbrd( hWnd, w, h ) *-----------------------------------------------------------------------------* Local hBmp If OpenClipboard( hWnd ) hBmp := GetClipboardData( CF_BITMAP, w, h ) CloseClipboard() DO EVENTS EndIf Return( hBmp ) #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" HBITMAP StretchBitmap( HBITMAP hbmpSrc, int New_Width, int New_Height ) { HBITMAP hbmpOldSrc, hbmpOldDest, hbmpNew; HDC hdcSrc, hdcDest; BITMAP bmp; POINT Point; hdcSrc = CreateCompatibleDC( NULL ); hdcDest = CreateCompatibleDC( hdcSrc ); GetObject( hbmpSrc, sizeof( BITMAP ), &bmp ); hbmpOldSrc = (HBITMAP) SelectObject( hdcSrc, hbmpSrc ); hbmpNew = CreateCompatibleBitmap( hdcSrc, New_Width, New_Height ); hbmpOldDest = (HBITMAP) SelectObject( hdcDest, hbmpNew ); GetBrushOrgEx( hdcDest, &Point ); SetStretchBltMode( hdcDest, HALFTONE ); SetBrushOrgEx( hdcDest, Point.x, Point.y, NULL ); StretchBlt( hdcDest, 0, 0, New_Width, New_Height, hdcSrc, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY ); SelectObject( hdcDest, hbmpOldDest ); SelectObject( hdcSrc, hbmpOldSrc ); DeleteDC( hdcDest ); DeleteDC( hdcSrc ); return hbmpNew; } HB_FUNC( CLOSECLIPBOARD ) { hb_retl( CloseClipboard() ); } HB_FUNC( OPENCLIPBOARD ) { hb_retl( OpenClipboard( ( HWND ) hb_parnl( 1 ) ) ) ; } HB_FUNC( GETCLIPBOARDDATA ) { WORD wType = hb_parni( 1 ); HGLOBAL hMem; switch( wType ) { case CF_TEXT: hMem = GetClipboardData( CF_TEXT ); if( hMem ) { hb_retc( ( char * ) GlobalLock( hMem ) ); GlobalUnlock( hMem ); } else hb_retc( "" ); break; case CF_BITMAP: if( IsClipboardFormatAvailable( CF_BITMAP ) ) hb_retnl( ( LONG ) StretchBitmap( ( HBITMAP ) GetClipboardData( CF_BITMAP ), hb_parni( 2 ), hb_parni( 3 ) ) ); else hb_retnl( 0 ); } } #pragma ENDDUMP ////////////////////////////////////////////////////////////////////////////// #pragma BEGINDUMP /* * This source file is part of the hbGdiPlus library source * Copyright 2007-2017 P.Chornyj <myorg63@mail.ru> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include <mgdefs.h> #include "hbapiitm.h" #ifndef __XHARBOUR__ # include "hbwinuni.h" #else typedef wchar_t HB_WCHAR; #endif typedef enum { Ok = 0, GenericError = 1, InvalidParameter = 2, OutOfMemory = 3, ObjectBusy = 4, InsufficientBuffer = 5, NotImplemented = 6, Win32Error = 7, WrongState = 8, Aborted = 9, FileNotFound = 10, ValueOverflow = 11, AccessDenied = 12, UnknownImageFormat = 13, FontFamilyNotFound = 14, FontStyleNotFound = 15, NotTrueTypeFont = 16, UnsupportedGdiplusVersion = 17, GdiplusNotInitialized = 18, PropertyNotFound = 19, PropertyNotSupported = 20, } GpStatus; typedef struct { CLSID Clsid; GUID FormatID; const unsigned short * CodecName; const unsigned short * DllName; const unsigned short * FormatDescription; const unsigned short * FilenameExtension; const unsigned short * MimeType; ULONG Flags; ULONG Version; ULONG SigCount; ULONG SigSize; const unsigned char * SigPattern; const unsigned char * SigMask; } ImageCodecInfo; typedef struct { GUID Guid; ULONG NumberOfValues; ULONG Type; void * Value; } ENCODER_PARAMETER; typedef struct { unsigned int Count; ENCODER_PARAMETER Parameter[ 1 ]; } EncoderParameters; #define WINGDIPAPI __stdcall #define GDIPCONST const typedef DWORD ARGB; typedef void GpBitmap; typedef void GpImage; #ifndef IStream typedef struct IStream IStream; #endif typedef GpStatus ( WINGDIPAPI * GetThumbnailImageAbort )( void * ); typedef GpStatus ( WINGDIPAPI * GdipCreateBitmapFromFile_ptr )( GDIPCONST HB_WCHAR *, GpBitmap ** ); typedef GpStatus ( WINGDIPAPI * GdipCreateHBITMAPFromBitmap_ptr )( GpBitmap *, HBITMAP *, ARGB ); typedef GpStatus ( WINGDIPAPI * GdipCreateBitmapFromResource_ptr )( HINSTANCE, GDIPCONST HB_WCHAR *, GpBitmap ** ); typedef GpStatus ( WINGDIPAPI * GdipCreateBitmapFromStream_ptr )( IStream *, GpBitmap ** ); typedef GpStatus ( WINGDIPAPI * GdipDisposeImage_ptr )( GpImage * ); #define EXTERN_FUNCPTR( name ) extern name##_ptr fn_##name #define DECLARE_FUNCPTR( name ) name##_ptr fn_##name = NULL #define ASSIGN_FUNCPTR( module, name ) fn_##name = ( name##_ptr )GetProcAddress( module, #name ) #define _EMPTY_PTR( module, name ) NULL == ( ASSIGN_FUNCPTR( module, name ) ) EXTERN_FUNCPTR( GdipCreateBitmapFromFile ); EXTERN_FUNCPTR( GdipCreateBitmapFromResource ); EXTERN_FUNCPTR( GdipCreateBitmapFromStream ); EXTERN_FUNCPTR( GdipCreateHBITMAPFromBitmap ); EXTERN_FUNCPTR( GdipDisposeImage ); typedef GpStatus ( WINGDIPAPI * GdipGetImageEncodersSize_ptr )( UINT * numEncoders, UINT * size ); typedef GpStatus ( WINGDIPAPI * GdipGetImageEncoders_ptr )( UINT numEncoders, UINT size, ImageCodecInfo * encoders ); typedef GpStatus ( WINGDIPAPI * GdipGetImageThumbnail_ptr )( GpImage * image, UINT thumbWidth, UINT thumbHeight, GpImage ** thumbImage, GetThumbnailImageAbort callback, VOID * callbackData ); typedef GpStatus ( WINGDIPAPI * GdipCreateBitmapFromHBITMAP_ptr )( HBITMAP hbm, HPALETTE hpal, GpBitmap ** bitmap ); typedef GpStatus ( WINGDIPAPI * GdipSaveImageToFile_ptr )( GpImage * image, GDIPCONST HB_WCHAR * filename, GDIPCONST CLSID * clsidEncoder, GDIPCONST EncoderParameters * encoderParams ); DECLARE_FUNCPTR( GdipGetImageEncodersSize ); DECLARE_FUNCPTR( GdipGetImageEncoders ); DECLARE_FUNCPTR( GdipGetImageThumbnail ); DECLARE_FUNCPTR( GdipCreateBitmapFromHBITMAP ); DECLARE_FUNCPTR( GdipSaveImageToFile ); BOOL SaveHBitmapToFile( void * HBitmap, const char * FileName, unsigned int Width, unsigned int Height, const char * MimeType, ULONG JpgQuality ); extern HMODULE g_GpModule; unsigned char * MimeTypeOld; /* * GDI+ Local Init */ static GpStatus _LoadExt( void ) { if( NULL == g_GpModule ) return FALSE; if( _EMPTY_PTR( g_GpModule, GdipGetImageEncodersSize ) ) return NotImplemented; if( _EMPTY_PTR( g_GpModule, GdipGetImageEncoders ) ) return NotImplemented; if( _EMPTY_PTR( g_GpModule, GdipCreateBitmapFromHBITMAP ) ) return NotImplemented; if( _EMPTY_PTR( g_GpModule, GdipSaveImageToFile ) ) return NotImplemented; if( _EMPTY_PTR( g_GpModule, GdipGetImageThumbnail ) ) return NotImplemented; return TRUE; } HB_FUNC( _GDIPLUSINITLOCAL ) { hb_retl( Ok != _LoadExt() ? HB_TRUE : HB_FALSE ); } /* * Get encoders */ HB_FUNC( GPLUSGETENCODERSNUM ) { UINT num = 0; // number of image encoders UINT size = 0; // size of the image encoder array in bytes fn_GdipGetImageEncodersSize( &num, &size ); hb_retni( num ); } HB_FUNC( GPLUSGETENCODERSSIZE ) { UINT num = 0; UINT size = 0; fn_GdipGetImageEncodersSize( &num, &size ); hb_retni( size ); } HB_FUNC( GPLUSGETENCODERSMIMETYPE ) { UINT num = 0; UINT size = 0; UINT i; ImageCodecInfo * pImageCodecInfo; PHB_ITEM pResult = hb_itemArrayNew( 0 ); PHB_ITEM pItem; char * RecvMimeType; fn_GdipGetImageEncodersSize( &num, &size ); if( size == 0 ) { hb_itemReturnRelease( pResult ); return; } pImageCodecInfo = ( ImageCodecInfo * ) hb_xalloc( size ); if( pImageCodecInfo == NULL ) { hb_itemReturnRelease( pResult ); return; } RecvMimeType = LocalAlloc( LPTR, size ); if( RecvMimeType == NULL ) { hb_xfree( pImageCodecInfo ); hb_itemReturnRelease( pResult ); return; } fn_GdipGetImageEncoders( num, size, pImageCodecInfo ); pItem = hb_itemNew( NULL ); for( i = 0; i < num; ++i ) { WideCharToMultiByte( CP_ACP, 0, pImageCodecInfo[ i ].MimeType, -1, RecvMimeType, size, NULL, NULL ); pItem = hb_itemPutC( NULL, RecvMimeType ); hb_arrayAdd( pResult, pItem ); } // free resource LocalFree( RecvMimeType ); hb_xfree( pImageCodecInfo ); hb_itemRelease( pItem ); // return a result array hb_itemReturnRelease( pResult ); } static BOOL GetEnCodecClsid( const char * MimeType, CLSID * Clsid ) { UINT num = 0; UINT size = 0; ImageCodecInfo * pImageCodecInfo; UINT CodecIndex; char * RecvMimeType; BOOL bFounded = FALSE; hb_xmemset( Clsid, 0, sizeof( CLSID ) ); if( ( MimeType == NULL ) || ( Clsid == NULL ) || ( g_GpModule == NULL ) ) return FALSE; if( fn_GdipGetImageEncodersSize( &num, &size ) ) return FALSE; if( ( pImageCodecInfo = hb_xalloc( size ) ) == NULL ) return FALSE; hb_xmemset( pImageCodecInfo, 0, sizeof( ImageCodecInfo ) ); if( fn_GdipGetImageEncoders( num, size, pImageCodecInfo ) || ( pImageCodecInfo == NULL ) ) { hb_xfree( pImageCodecInfo ); return FALSE; } if( ( RecvMimeType = LocalAlloc( LPTR, size ) ) == NULL ) { hb_xfree( pImageCodecInfo ); return FALSE; } for( CodecIndex = 0; CodecIndex < num; ++CodecIndex ) { WideCharToMultiByte( CP_ACP, 0, pImageCodecInfo[ CodecIndex ].MimeType, -1, RecvMimeType, size, NULL, NULL ); if( strcmp( MimeType, RecvMimeType ) == 0 ) { bFounded = TRUE; break; } } if( bFounded ) CopyMemory( Clsid, &pImageCodecInfo[ CodecIndex ].Clsid, sizeof( CLSID ) ); hb_xfree( pImageCodecInfo ); LocalFree( RecvMimeType ); return bFounded ? TRUE : FALSE; } /* * Save bitmap to file */ HB_FUNC( GPLUSSAVEHBITMAPTOFILE ) { HBITMAP hbmp = ( HBITMAP ) hb_parnl( 1 ); hb_retl( SaveHBitmapToFile( ( void * ) hbmp, hb_parc( 2 ), ( UINT ) hb_parnl( 3 ), ( UINT ) hb_parnl( 4 ), hb_parc( 5 ), ( ULONG ) hb_parnl( 6 ) ) ); } BOOL SaveHBitmapToFile( void * HBitmap, const char * FileName, unsigned int Width, unsigned int Height, const char * MimeType, ULONG JpgQuality ) { void * GBitmap; void * GBitmapThumbnail; LPWSTR WFileName; static CLSID Clsid; EncoderParameters EncoderParameters; if( ( HBitmap == NULL ) || ( FileName == NULL ) || ( MimeType == NULL ) || ( g_GpModule == NULL ) ) { MessageBox( NULL, "Wrong Param", "GPlus error", MB_OK | MB_ICONINFORMATION | MB_SYSTEMMODAL ); return FALSE; } if( MimeTypeOld == NULL ) { if( ! GetEnCodecClsid( MimeType, &Clsid ) ) { MessageBox( NULL, "Wrong MimeType", "GPlus error", MB_OK | MB_ICONINFORMATION | MB_SYSTEMMODAL ); return FALSE; } MimeTypeOld = LocalAlloc( LPTR, strlen( MimeType ) + 1 ); if( MimeTypeOld == NULL ) { MessageBox( NULL, "LocalAlloc Error", "GPlus error", MB_OK | MB_ICONINFORMATION | MB_SYSTEMMODAL ); return FALSE; } strcpy( MimeTypeOld, MimeType ); } else { if( strcmp( MimeTypeOld, MimeType ) != 0 ) { LocalFree( MimeTypeOld ); if( ! GetEnCodecClsid( MimeType, &Clsid ) ) { MessageBox( NULL, "Wrong MimeType", "GPlus error", MB_OK | MB_ICONINFORMATION | MB_SYSTEMMODAL ); return FALSE; } MimeTypeOld = LocalAlloc( LPTR, strlen( MimeType ) + 1 ); if( MimeTypeOld == NULL ) { MessageBox( NULL, "LocalAlloc Error", "GPlus error", MB_OK | MB_ICONINFORMATION | MB_SYSTEMMODAL ); return FALSE; } strcpy( MimeTypeOld, MimeType ); } } ZeroMemory( &EncoderParameters, sizeof( EncoderParameters ) ); EncoderParameters.Count = 1; EncoderParameters.Parameter[ 0 ].Guid.Data1 = 0x1d5be4b5; EncoderParameters.Parameter[ 0 ].Guid.Data2 = 0xfa4a; EncoderParameters.Parameter[ 0 ].Guid.Data3 = 0x452d; EncoderParameters.Parameter[ 0 ].Guid.Data4[ 0 ] = 0x9c; EncoderParameters.Parameter[ 0 ].Guid.Data4[ 1 ] = 0xdd; EncoderParameters.Parameter[ 0 ].Guid.Data4[ 2 ] = 0x5d; EncoderParameters.Parameter[ 0 ].Guid.Data4[ 3 ] = 0xb3; EncoderParameters.Parameter[ 0 ].Guid.Data4[ 4 ] = 0x51; EncoderParameters.Parameter[ 0 ].Guid.Data4[ 5 ] = 0x05; EncoderParameters.Parameter[ 0 ].Guid.Data4[ 6 ] = 0xe7; EncoderParameters.Parameter[ 0 ].Guid.Data4[ 7 ] = 0xeb; EncoderParameters.Parameter[ 0 ].NumberOfValues = 1; EncoderParameters.Parameter[ 0 ].Type = 4; EncoderParameters.Parameter[ 0 ].Value = ( void * ) &JpgQuality; GBitmap = 0; if( fn_GdipCreateBitmapFromHBITMAP( HBitmap, NULL, &GBitmap ) ) { MessageBox( NULL, "CreateBitmap Operation Error", "GPlus error", MB_OK | MB_ICONINFORMATION | MB_SYSTEMMODAL ); return FALSE; } WFileName = LocalAlloc( LPTR, ( strlen( FileName ) * sizeof( WCHAR ) ) + 1 ); if( WFileName == NULL ) { MessageBox( NULL, "WFile LocalAlloc Error", "GPlus error", MB_OK | MB_ICONINFORMATION | MB_SYSTEMMODAL ); return FALSE; } MultiByteToWideChar( CP_ACP, 0, FileName, -1, WFileName, ( strlen( FileName ) * sizeof( WCHAR ) ) - 1 ); if( ( Width > 0 ) && ( Height > 0 ) ) { GBitmapThumbnail = NULL; if( Ok != fn_GdipGetImageThumbnail( GBitmap, Width, Height, &GBitmapThumbnail, NULL, NULL ) ) { fn_GdipDisposeImage( GBitmap ); LocalFree( WFileName ); MessageBox( NULL, "Thumbnail Operation Error", "GPlus error", MB_OK | MB_ICONINFORMATION | MB_SYSTEMMODAL ); return FALSE; } fn_GdipDisposeImage( GBitmap ); GBitmap = GBitmapThumbnail; } if( Ok != fn_GdipSaveImageToFile( GBitmap, WFileName, &Clsid, &EncoderParameters ) ) { fn_GdipDisposeImage( GBitmap ); LocalFree( WFileName ); MessageBox( NULL, "Save Operation Error", "GPlus error", MB_OK | MB_ICONINFORMATION | MB_SYSTEMMODAL ); return FALSE; } fn_GdipDisposeImage( GBitmap ); LocalFree( WFileName ); return TRUE; } #pragma ENDUMP[/pre2]

Dima: SergKis пишет: Надо расставить DO EVENTS и заработает, очередь не успевает обработаться, сообщения теряются. Понял тебя. Есть еще вопрос. Имеем запись в файл gPlusSaveHBitmapToFile( hBitmap, "webcam.jpg", nWidth, nHeight, "image/jpeg", 100 ) (переделал на JPG) Хотелка: что бы в качестве nWidth и nHeight подставлялись значения исходя из максимального разрешения самой камеры. Как то можно дернуть характеристики камеры ?

Dima: Пробнул тест снятия скриншота математикой что шла с камерой. Фоткал документ. На выходе получил картинку с разрешением 2048 на 1536. Текст довольно читаем. Попробовал сделать скриншот с помощью webcam_2 где в LoadFromClpbrd подправил nWidth, nHeight на 2048 и 1536 И в gPlusSaveHBitmapToFile тоже подправил nWidth, nHeight на 2048 и 1536. Текст на картине получил не такой читаемый и расплывчатый. С 6-м параметром в gPlusSaveHBitmapToFile , игрался , не помогает. Разве что ухудшить можно качество делая его меньше 100. Больше 100 , не пашет и видимо и не должно. В чем прикол ? Еще поигрался и вроде все дело в cap_EditCopy , именно она ложит в буфер такое корявое изображение. Поставил паузу после cap_EditCopy и слямздил из буфера картинку в PAINT , так и есть.......

Dima: Может кто то портировать в Harbour функцию capSetVideoFormat ?

gfilatov2002: Dima пишет: портировать в Harbour функцию capSetVideoFormat Лови [pre]#pragma BEGINDUMP #include <hbapi.h> #include <windows.h> #include <vfw.h> #if defined( __BORLANDC__ ) #pragma warn -use /* unused var */ #endif HB_FUNC( CAPSETVIDEOFORMAT ) { BITMAPINFO binf; HWND hCapWnd = (HWND) hb_parnl(1); capGetVideoFormat(hCapWnd, &binf, sizeof(BITMAPINFO)); binf.bmiHeader.biWidth = hb_parni(2); binf.bmiHeader.biHeight = hb_parni(3); binf.bmiHeader.biPlanes = 1; binf.bmiHeader.biBitCount = 24; binf.bmiHeader.biCompression = BI_RGB; binf.bmiHeader.biSizeImage = 0; binf.bmiHeader.biClrUsed = 0; binf.bmiHeader.biClrImportant = 0; hb_retl( capSetVideoFormat(hCapWnd, &binf, sizeof(BITMAPINFO)) ); } #pragma ENDDUMP [/pre] Использовать : capSetVideoFormat(This.WebCam_1.Handle, 640, 480)

Dima: gfilatov2002 Спасибо Странный меседж получил во время сборки Warning W8019 demo.prg 784: Code has no effect in function HB_FUN_CAPSETVIDEOFORMAT

gfilatov2002: Dima пишет: Warning W8019 Просто добавь подавление этого предупреждения; #pragma BEGINDUMP #include <hbapi.h> #include <windows.h> #include <vfw.h> #if defined( __BORLANDC__ ) #pragma warn -use /* unused var */ #pragma warn -eff /* no effect */ #endif ...

Dima: Поменяли вебкамеру на Logitech c920 , разрешение у нее конечно приличное по сравнению c270. Поменял разрешение с помощью capSetVideoFormat на 2304 x 1536 и оба примера WEBCAM и WEBCAM_2 начали жутко тормозить , когда иногда удается нажать кнопку снять капчу , то картинка реально нормальная , правда размер в BMP (если) , то почти 11 метров ))) Попробовал фокус с https://github.com/michael4jonas/capcam , снимает норм и тормозов таких нет. Запускал командой capcam.exe 0 -r18 -fjpg -odd2.jpg Где r18 ( 18: 2304 x 1536) PS Что то не пруха с этой камерой ))

Dima: Dima пишет: Поменял разрешение с помощью capSetVideoFormat Кажись этого и не надо было делать так как тормоза....... А надо юзать capCaptureSetSetup (а может и нет) , но понятно что с её написанием ни кто не поможет :) Хотелось бы что б видео как отображалось так и отображается а вот что бы Капча снялась с нужным разрешением и не 640 на 480 (и не преобразованное из 640 на 480 в большее)

Haz: Dima пишет: о понятно что с её написанием ни кто не поможет Ну прям и никто Сюда глянь http://forums.fivetechsupport.com/viewtopic.php?t=5695 там есть это и многое другое [pre2] HB_FUNC( CAPCAPTURESETSETUP ) { CAPTUREPARMS Capture; hb_retl( capCaptureSetSetup( (HWND) hb_parnl( 1 ), &Capture, sizeof( CAPTUREPARMS ) )); } [/pre2]

Andrey: Использую функцию из МиниГуи CreateFolder(). Проблем не было. Но под работой Win2008 Server не удаётся создать папку для пользователя. Как получить код ошибки для этой функции ? Или нужно делать старый клиперовский вариант MakeDir(), где есть обработка ошибок. Или можно использовать DosError() и всё ? Мне просто проверить негде такую ситуацию.

PSP: Andrey пишет: под работой Win2008 Server не удаётся создать папку для пользователя Где пытаешься создать папку?

Andrey: PSP пишет: Где пытаешься создать папку? Функция GetUserTempFolder() по пути C:\Users\ЮЗЕР\AppData\Local\Temp У всех нормально, а у этого сервера ошибка - папку не создаёт !

Pasha: Наверное надо сделать обертку для GetLastError() Примерно так: [pre2]HB_FUNC( GETLASTERROR ) { hb_retnl( GetLastError() ); }[/pre2]



полная версия страницы