Zoom in on Picture - Uwe
- Rick Lipkin
- Posts: 2668
- Joined: Fri Oct 07, 2005 1:50 pm
- Location: Columbia, South Carolina USA
Zoom in on Picture - Uwe
Uwe
I am starting an inventory module and one of the requests is to be able to show a picture of the part. I have no problem with incorporating a picture into a form. Do you know of a way with FreeImage to be able to doubleClick on the picture ( jpg or bmp ) to be able to enlarge the photo or to zoom out to increase the size of the picture ?
Many Thanks
Rick Lipkin
I am starting an inventory module and one of the requests is to be able to show a picture of the part. I have no problem with incorporating a picture into a form. Do you know of a way with FreeImage to be able to doubleClick on the picture ( jpg or bmp ) to be able to enlarge the photo or to zoom out to increase the size of the picture ?
Many Thanks
Rick Lipkin
Re: Zoom in on Picture - Uwe
Rick,
The < Image-click-solution >
I still have to find out, how to < crop > from a resized image.
This shows a < Button-solution >

Don't forget SCROLL !!!


Best Regards
Uwe
The < Image-click-solution >
Code: Select all | Expand
//------------- IMAGE -----------
FUNCTION START_IMAGE()
LOCAL oBmp
// Screen-adjust
// PUBLIC nSWidth := GetSysMetrics(0), nSHeight := GetSysMetrics(1)
IF FILE( cWorkFile ) // Image exists ?
@ 5, 5 IMAGE oBmp FILENAME cWorkFile OF oWnd ;
SIZE nSWidth - 30, nSHeight - 160 PIXEL SCROLL
oBmp:bLClicked := {|| ZOOM_ADJ(oBmp, "M") } // minus
oBmp:bRClicked := {|| ZOOM_ADJ(oBmp, "P") } // plus
ELSE
MsgAlert( "Not possible to load Image : " + CRLF + cWorkFile + CRLF + ;
"Please select a new Image !", "Error" )
ENDIF
RETURN( NIL )
// ---------------------
FUNCTION ZOOM_ADJ(oBmp,cAccion)
LOCAL nZoom0:=oBmp:Zoom()
DO CASE
CASE cAccion == "S"
oBmp:lStretch := !oBmp:lStretch
oBmp:ScrollAdjust()
oBmp:Refresh( .t. )
CASE cAccion == "M"
nZoom++
IF nZoom0 * 10 > 1
oBmp:lStretch := .f.
nZoom0 := nZoom0 - ( 0.10 )
oBmp:Zoom( nZoom0 )
oBmp:Refresh()
oBmp:ScrollAdjust()
ENDIF
CASE cAccion == "P"
oBmp:lStretch := .f.
nZoom0 := nZoom0 + 0.10
oBmp:Zoom( nZoom0 )
oBmp:Refresh()
oBmp:ScrollAdjust()
ENDCASE
RETURN NIL
I still have to find out, how to < crop > from a resized image.
This shows a < Button-solution >
Code: Select all | Expand
@ nSHeight - 150, nSWidth - 250 BTNBMP oBtn4 OF oWnd ;
SIZE 65, 35 PIXEL 2007 ;
NOBORDER ;
FILENAME c_path + "\Images\Plus.Bmp" ;
ACTION ZOOM_ADJ(oBmp, "P") ;
FONT oFont2 ;
CENTER
oBtn4:lTransparent := .t.
oBtn4:cToolTip = { "Enlarge" + CRLF + "Image","Zoom", 1, CLR_BLACK, 14089979 }
oBtn4:SetColor( 0, )
@ nSHeight - 105, nSWidth - 250 BTNBMP oBtn3 OF oWnd ;
SIZE 65, 35 PIXEL 2007 ;
NOBORDER ;
FILENAME c_path + "\Images\Minus.Bmp" ;
ACTION ZOOM_ADJ(oBmp, "M") ;
FONT oFont2 ;
CENTER
oBtn3:lTransparent := .t.
oBtn3:cToolTip = { "Shrink" + CRLF + "Image","Zoom", 1, CLR_BLACK, 14089979 }
oBtn3:SetColor( 0, )

Don't forget SCROLL !!!


Best Regards
Uwe

Since 1995 ( the first release of FW 1.9 )
i work with FW.
If you have any questions about special functions, maybe i can help.
i work with FW.
If you have any questions about special functions, maybe i can help.
- Rick Lipkin
- Posts: 2668
- Joined: Fri Oct 07, 2005 1:50 pm
- Location: Columbia, South Carolina USA
Re: Zoom in on Picture - Uwe
Uwe
Thanks .. I will be starting on this inventory module next week ..
Rick
Thanks .. I will be starting on this inventory module next week ..
Rick
- Rick Lipkin
- Posts: 2668
- Joined: Fri Oct 07, 2005 1:50 pm
- Location: Columbia, South Carolina USA
Re: Zoom in on Picture - Uwe
Uwe
Just now working on your suggestion .. in your code in Func Zoom_Adj ..
1) Where does the variable nZoom come from ??
Here is my code and a screen shot .. I do not get any zoom Plus or Minus using the mouse buttons .. I have not put any code behind the 'Zoom' button yet.
Rick Lipkin
.rc

Just now working on your suggestion .. in your code in Func Zoom_Adj ..
1) Where does the variable nZoom come from ??
Here is my code and a screen shot .. I do not get any zoom Plus or Minus using the mouse buttons .. I have not put any code behind the 'Zoom' button yet.
Rick Lipkin
Code: Select all | Expand
REDEFINE IMAGE oImage ID 201 FILENAME NIL OF oInvt;
PIXEL SCROLL // ADJUST BORDER
oImage:bPainted := { |hDC| DRAW_IMG( oImage, hDC, cImage, @cPicFileName ) }
oImage:bLClicked := {|| ZOOM_ADJ(oImage, "M") } // minus
oImage:bRClicked := {|| ZOOM_ADJ(oImage, "P") } // plus
...
...
// ---------------------
Static Func ZOOM_ADJ(oBmp,cAccion)
LOCAL nZoom0 := oBmp:Zoom()
Local nZoom
nZoom := 10 // just plugged in a number .. no idea where this comes from
msginfo( nZoom0)
DO CASE
CASE cAccion == "S"
oBmp:lStretch := !oBmp:lStretch
oBmp:ScrollAdjust()
oBmp:Refresh( .t. )
CASE cAccion == "M" // minus
nZoom++
IF nZoom0 * 10 > 1
oBmp:lStretch := .f.
nZoom0 := nZoom0 - ( 0.10 )
oBmp:Zoom( nZoom0 )
oBmp:Refresh()
oBmp:ScrollAdjust()
ENDIF
CASE cAccion == "P" // plus
msginfo( "In Plus")
oBmp:lStretch := .f.
nZoom0 := nZoom0 + 0.10
oBmp:Zoom( nZoom0 )
oBmp:Refresh()
oBmp:ScrollAdjust()
ENDCASE
RETURN NIL
.rc
Code: Select all | Expand
CONTROL "", 201, "TImage", 0 | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL, 466, 233, 140, 118

Re: Zoom in on Picture - Uwe
Rick,
I created a sample from RESOURCE :
Start with original size

Zoom OUT

Zoom IN

Another Solution ( 20 % steps ) :
NO function
NO + / - Buttons
NO Image-click

There seems to be something wrong with the scroll-directions ( very confusing ) :
Right scrollbar-top goes right
Right scrollbar-bottom goes left
Bottom scrollbar-left goes down
Bottom scrollbar-right goes up

Best Regards
Uwe
I created a sample from RESOURCE :
Start with original size

Zoom OUT

Zoom IN

Another Solution ( 20 % steps ) :
NO function
NO + / - Buttons
NO Image-click

Code: Select all | Expand
LOCAL oZSelect1, nZSelect1 := 5 // original
REDEFINE IMAGE oImage ID 510 FILENAME cImage OF oDlg1 PIXEL SCROLL ADJUST BORDER
// NOT NEEDED !!
// oImage:bLClicked := {|| ZOOM_ADJ(oImage, nZoom, "M") } // minus
// oImage:bRClicked := {|| ZOOM_ADJ(oImage, nZoom, "P") } // plus
REDEFINE SELEX oZSelect1 VAR nZSelect1 OF oDlg1 ID 520 ;
ITEMS "-80", "-60", "-40", "-20", "0", "+20", "+40", "+60", "+80", "+100" ;
GRADIENT OUTTRACK { { 0.5, 16443068, 16312263 }, ;
{ 0.5, 16312263, 16443068 } } ;
GRADIENT INTRACK { { 1, 5426223, 1071100 }, ;
{ 1, 1071100, 5426223 } } ;
THUMBSIZE 20, 20 ROUNDSIZE 5 ;
COLOR THUMB 14853684 ;
COLORTEXT 128, 32768 ;
TITLE "Image-zoom" TOP ;
FONT oDataFont ;
ACTION ( nZSelect1 := oZSelect1:nOption, ;
oImage:lStretch := .f., ;
nZoom := oImage:Zoom(), ;
IIF( nZSelect1 = 1, nZoom := 0.2, NIL ), ;
IIF( nZSelect1 = 2, nZoom := 0.4, NIL ), ;
IIF( nZSelect1 = 3, nZoom := 0.6, NIL ), ;
IIF( nZSelect1 = 4, nZoom := 0.8, NIL ), ;
IIF( nZSelect1 = 5, nZoom := 1, NIL ), ;
IIF( nZSelect1 = 6, nZoom := 1.2, NIL ), ;
IIF( nZSelect1 = 7, nZoom := 1.4, NIL ), ;
IIF( nZSelect1 = 8, nZoom := 1.6, NIL ), ;
IIF( nZSelect1 = 9, nZoom := 1.8, NIL ), ;
IIF( nZSelect1 = 10, nZoom := 2, NIL ), ;
oImage:Zoom( nZoom ), oImage:Refresh(), oImage:ScrollAdjust() ) ;
COLORTITLE 0
There seems to be something wrong with the scroll-directions ( very confusing ) :
Right scrollbar-top goes right
Right scrollbar-bottom goes left
Bottom scrollbar-left goes down
Bottom scrollbar-right goes up

Code: Select all | Expand
// ------------- DIALOG from Resource --------
FUNCTION SHOW_DLG2()
LOCAL hDC, oImage, nZoom := 0 // Counter for plus or minus
LOCAL cImage := c_path + "\Images\Trash.bmp"
// DEFINE PATH
//c_path := GETCURDIR() // New FWH
//IF !FILE( c_path + "\SETTING.INI" ) // a existing File
// c_path := CURDRIVE() + ":\" + GETCURDIR() // old FWH
//ENDIF
DEFINE DIALOG oDlg1 RESOURCE "Zoom" ;
FONT oBrwFont TITLE "Dialog from RESOURCE" TRANSPARENT
// A Dialog-brush-function
//D_BACKGRD( oDlg1, nDStyle, lDDirect, nDColorF, nDColorB, nDGradPos, cDBrush, cDImage )
REDEFINE IMAGE oImage ID 510 FILENAME cImage OF oDlg1 PIXEL SCROLL ADJUST BORDER
oImage:bLClicked := {|| ZOOM_ADJ(oImage, nZoom, "M") } // minus
oImage:bRClicked := {|| ZOOM_ADJ(oImage, nZoom, "P") } // plus
ACTIVATE DIALOG oDlg1 NOWAIT ;
ON INIT ( ZOOM_ADJ(oImage, nZoom, "S"), ; // ON INIT start with normal size
oDlg1:Move( 60, 30, oDlg1:nWidth, oDlg1:nHeight, .f. ) )
RETURN( NIL )
// ---------------------
FUNCTION ZOOM_ADJ(oBmp, nZoom, cAccion)
LOCAL nZoom0:=oBmp:Zoom()
DO CASE
CASE cAccion == "S"
oBmp:lStretch := !oBmp:lStretch
oBmp:ScrollAdjust()
oBmp:Refresh( .t. )
CASE cAccion == "M"
nZoom-- // a Counter plus / minus, to remember the zoom-status
IF nZoom0 * 10 > 1 .or. nZoom < 1
oBmp:lStretch := .f.
nZoom0 := nZoom0 - ( 0.20 ) // 0.20 = Zoomfactor 20%
oBmp:Zoom( nZoom0 )
oBmp:Refresh()
oBmp:ScrollAdjust()
ENDIF
CASE cAccion == "P"
nZoom++ // a Counter plus / minus
oBmp:lStretch := .f.
nZoom0 := nZoom0 + 0.20
oBmp:Zoom( nZoom0 )
oBmp:Refresh()
oBmp:ScrollAdjust()
ENDCASE
RETURN NIL
Best Regards
Uwe

Since 1995 ( the first release of FW 1.9 )
i work with FW.
If you have any questions about special functions, maybe i can help.
i work with FW.
If you have any questions about special functions, maybe i can help.
Re: Zoom in on Picture - Uwe
Rick,
tested :
aDlgActual := { { nDGradPos, nDColorF, nDColorB }, { nDGradPos, nDColorB, nDColorF } }
SetDlgGradient( aDlgActual )
that works without problems.
working on a Solution, to show and test at runtime
( modified from Logo-painter )
1. select any Image and test with different Brushes
2. test Dialog from CODE or RESOURCE
3. creates a PRG and EXE of the Selections
4. saves Settings to a INI-file
I will have a look at Class Bitmap, because of VScroll and HScroll-directions

Best Regards
Uwe
tested :
aDlgActual := { { nDGradPos, nDColorF, nDColorB }, { nDGradPos, nDColorB, nDColorF } }
SetDlgGradient( aDlgActual )
that works without problems.
working on a Solution, to show and test at runtime
( modified from Logo-painter )
1. select any Image and test with different Brushes
2. test Dialog from CODE or RESOURCE
3. creates a PRG and EXE of the Selections
4. saves Settings to a INI-file
I will have a look at Class Bitmap, because of VScroll and HScroll-directions

Best Regards
Uwe

Since 1995 ( the first release of FW 1.9 )
i work with FW.
If you have any questions about special functions, maybe i can help.
i work with FW.
If you have any questions about special functions, maybe i can help.
- Rick Lipkin
- Posts: 2668
- Joined: Fri Oct 07, 2005 1:50 pm
- Location: Columbia, South Carolina USA
Re: Zoom in on Picture - Uwe
Uwe
Thank you for your help .. I found that the SetDlgGradient() function really messes up the zoom .. I did not realize this until I decided to just create a small self contained example.
Just a simple dialog box like in your example worked as you suggested .. so why did the same code fail in my application ?
I realized SetDlgGradient caused an unintended failure of the zoom .. here is the code with the Gradient function .. compile and run then rem it out re-compile to see the difference.
I read your last post on ( perhaps ) another solution .. don't quite understand the syntax
.. just curious if you can trap the mouse wheel scroll rather than using a Selex control ?
Thanks
Rick
.rc
Thank you for your help .. I found that the SetDlgGradient() function really messes up the zoom .. I did not realize this until I decided to just create a small self contained example.
Just a simple dialog box like in your example worked as you suggested .. so why did the same code fail in my application ?
I realized SetDlgGradient caused an unintended failure of the zoom .. here is the code with the Gradient function .. compile and run then rem it out re-compile to see the difference.
I read your last post on ( perhaps ) another solution .. don't quite understand the syntax

Code: Select all | Expand
aDlgActual := { { nDGradPos, nDColorF, nDColorB }, { nDGradPos, nDColorB, nDColorF } }
SetDlgGradient( aDlgActual )
.. just curious if you can trap the mouse wheel scroll rather than using a Selex control ?
Thanks
Rick
Code: Select all | Expand
#include "FiveWin.ch"
//----------------------------------------------------------------------------//
function Main()
local oDlg, oImage,cImage, c_path, nZoom, hDC
c_path := GETCURDIR()
cImage := c_path+"\icetree2.jpg"
nZoom := 0
*LightGreyGrad()
DEFINE DIALOG oDlg RESOURCE "Test" //TRANSPARENT
REDEFINE IMAGE oImage ID 201 FILENAME cImage OF oDlg PIXEL SCROLL ADJUST BORDER
oImage:bLClicked := {|| ZOOM_ADJ(oImage, nZoom, "M") } // minus
oImage:bRClicked := {|| ZOOM_ADJ(oImage, nZoom, "P") } // plus
REDEFINE BUTTON ID 120 OF oDlg ;
ACTION oDlg:End()
ACTIVATE DIALOG oDlg ;
ON INIT ( oDlg:Move( 60, 30, oDlg:nWidth, oDlg:nHeight, .f. ) )
Return( nil )
// ---------------------
Static Func ZOOM_ADJ(oBmp, nZoom, cAccion)
LOCAL nZoom0:=oBmp:Zoom()
DO CASE
CASE cAccion == "S"
oBmp:lStretch := !oBmp:lStretch
oBmp:ScrollAdjust()
oBmp:Refresh( .t. )
CASE cAccion == "M"
nZoom-- // a Counter plus / minus, to remember the zoom-status
IF nZoom0 * 10 > 1 .or. nZoom < 1
oBmp:lStretch := .f.
nZoom0 := nZoom0 - ( 0.20 ) // 0.20 = Zoomfactor 20%
oBmp:Zoom( nZoom0 )
oBmp:Refresh()
oBmp:ScrollAdjust()
ENDIF
CASE cAccion == "P"
nZoom++ // a Counter plus / minus
oBmp:lStretch := .f.
nZoom0 := nZoom0 + 0.20
oBmp:Zoom( nZoom0 )
oBmp:Refresh()
oBmp:ScrollAdjust()
ENDCASE
RETURN NIL
//------------------
Func LightGreyGrad()
SetDlgGradient( { { .50, nRGB( 216, 216, 216 ), nRGB( 255, 255, 255 ) } } )
Return(nil)
// end
.rc
Code: Select all | Expand
Test DIALOG 19, 47, 325, 227
STYLE WS_POPUP | WS_CAPTION
{
PUSHBUTTON "&OK", 120, 23, 203, 37, 14
CONTROL "", 201, "TImage", 0 | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL, 37, 4, 254, 178
}
Re: Zoom in on Picture - Uwe
Rick,
I hope I get it finished this weekend.
That will make it easy, to test the different possible combinations.
The created PRG, You can use inside Your application.
A straight connection to PIXELFORMER is included as well.
It makes it possible, to change something of the selected Image.
The gradient-array saved to var aDlgActual ( nDGradPos = Grad.-pos, nDColorF = 1. Color, nDColorB = 2. Color ) :
aDlgActual := { { nDGradPos, nDColorF, nDColorB }, { nDGradPos, nDColorB, nDColorF } }
SetDlgGradient( aDlgActual )
Best Regards
Uwe
I hope I get it finished this weekend.
That will make it easy, to test the different possible combinations.
The created PRG, You can use inside Your application.
A straight connection to PIXELFORMER is included as well.
It makes it possible, to change something of the selected Image.
The gradient-array saved to var aDlgActual ( nDGradPos = Grad.-pos, nDColorF = 1. Color, nDColorB = 2. Color ) :
aDlgActual := { { nDGradPos, nDColorF, nDColorB }, { nDGradPos, nDColorB, nDColorF } }
SetDlgGradient( aDlgActual )
Best Regards
Uwe

Since 1995 ( the first release of FW 1.9 )
i work with FW.
If you have any questions about special functions, maybe i can help.
i work with FW.
If you have any questions about special functions, maybe i can help.
- Rick Lipkin
- Posts: 2668
- Joined: Fri Oct 07, 2005 1:50 pm
- Location: Columbia, South Carolina USA