COPYIMAGE: Difference between revisions

From QB64 Phoenix Edition Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
(4 intermediate revisions by the same user not shown)
Line 29: Line 29:
;Example 1:Restoring a Legacy SCREEN using the _COPYIMAGE return value.
;Example 1:Restoring a Legacy SCREEN using the _COPYIMAGE return value.
{{CodeStart}}
{{CodeStart}}
{{Cl|SCREEN}} 13
{{Cl|SCREEN}} {{Text|13|#F580B1}}
{{Cl|CIRCLE}} (160, 100), 100, 40
{{Cl|CIRCLE}} ({{Text|160|#F580B1}}, {{Text|100|#F580B1}}), {{Text|100|#F580B1}}, {{Text|40|#F580B1}}
DO: {{Cl|SLEEP}}: {{Cl|LOOP}} {{Cl|UNTIL}} {{Cl|INKEY$}} <> ""
{{Cl|DO}}: {{Cl|SLEEP}}: {{Cl|DO...LOOP|LOOP UNTIL}} {{Cl|INKEY$}} <> {{Text|<nowiki>""</nowiki>|#FFB100}}


'backup screen before changing {{Cl|SCREEN}} mode
{{Text|<nowiki>'backup screen before changing SCREEN mode</nowiki>|#919191}}
oldmode& = {{Cl|_COPYIMAGE}}(0) 'the 0 value designates the current destination {{Cl|SCREEN}}
oldmode& = {{Cl|_COPYIMAGE}}({{Text|0|#F580B1}}) {{Text|<nowiki>'the 0 value designates the current destination SCREEN</nowiki>|#919191}}


s& = {{Cl|_NEWIMAGE}}(800, 600, 32)
s& = {{Cl|_NEWIMAGE}}({{Text|800|#F580B1}}, {{Text|600|#F580B1}}, {{Text|32|#F580B1}})
{{Cl|SCREEN}} s&
{{Cl|SCREEN}} s&
{{Cl|LINE}} (100, 100)-(500, 500), {{Cl|_RGB}}(0, 255, 255), BF
{{Cl|LINE}} ({{Text|100|#F580B1}}, {{Text|100|#F580B1}})-({{Text|500|#F580B1}}, {{Text|500|#F580B1}}), {{Cl|_RGB}}({{Text|0|#F580B1}}, {{Text|255|#F580B1}}, {{Text|255|#F580B1}}), BF
DO: {{Cl|SLEEP}}: {{Cl|LOOP}} {{Cl|UNTIL}} {{Cl|INKEY$}} <> ""
{{Cl|DO}}: {{Cl|SLEEP}}: {{Cl|DO...LOOP|LOOP UNTIL}} {{Cl|INKEY$}} <> {{Text|<nowiki>""</nowiki>|#FFB100}}


{{Cl|SCREEN}} oldmode&       'restore original screen
{{Cl|SCREEN}} oldmode& {{Text|<nowiki>'restore original screen</nowiki>|#919191}}
{{Cl|IF...THEN|IF}} s& < -1 THEN {{Cl|_FREEIMAGE}} s&
{{Cl|IF}} s& < {{Text|-1|#F580B1}} {{Cl|THEN}} {{Cl|_FREEIMAGE}} s&
{{Cl|END}}
{{Cl|END}}
{{CodeEnd}}
{{CodeEnd}}
{{small|Code courtesy of Galleon}}
{{Small|Code courtesy of Galleon}}
;Note:Only free valid handle values with [[_FREEIMAGE]] AFTER a new [[SCREEN]] mode is being used by the program.
;Note:Only free valid handle values with [[_FREEIMAGE]] AFTER a new [[SCREEN]] mode is being used by the program.
----
----
;Example 2:Program that copies desktop to a hardware image to form a 3D triangle ('''version 1.000 and up'''):
;Example 2:Program that copies desktop to a hardware image to form a 3D triangle ('''version 1.000 and up'''):
{{CodeStart}}
{{CodeStart}}
{{Cl|SCREEN}} {{Cl|_NEWIMAGE}}(640, 480, 32)
{{Cl|SCREEN}} {{Cl|_NEWIMAGE}}({{Text|640|#F580B1}}, {{Text|480|#F580B1}}, {{Text|32|#F580B1}})
my_hardware_handle = {{Cl|_COPYIMAGE}}({{Cl|_SCREENIMAGE}}, 33) 'take a screenshot and use it as our texture
my_hardware_handle = {{Cl|_COPYIMAGE}}({{Cl|_SCREENIMAGE}}, {{Text|33|#F580B1}}) {{Text|<nowiki>'take a screenshot and use it as our texture</nowiki>|#919191}}
{{Cl|_MAPTRIANGLE}} (0, 0)-(500, 0)-(250, 500), my_hardware_handle TO_
{{Cl|_MAPTRIANGLE}} ({{Text|0|#F580B1}}, {{Text|0|#F580B1}})-({{Text|500|#F580B1}}, {{Text|0|#F580B1}})-({{Text|250|#F580B1}}, {{Text|500|#F580B1}}), my_hardware_handle {{Cl|TO}} _
(-1, 0, -1)-(1, 0, -1)-(0, 5, -10), , _SMOOTH
({{Text|-1|#F580B1}}, {{Text|0|#F580B1}}, {{Text|-1|#F580B1}})-({{Text|1|#F580B1}}, {{Text|0|#F580B1}}, {{Text|-1|#F580B1}})-({{Text|0|#F580B1}}, {{Text|5|#F580B1}}, {{Text|-10|#F580B1}}), , {{Cl|_SMOOTH (function)|_SMOOTH}}
{{Cl|_DISPLAY}}
{{Cl|_DISPLAY}}
{{Cl|DO...LOOP|DO}}: {{Cl|_LIMIT}} 30: {{Cl|LOOP}} {{Cl|UNTIL}} {{Cl|INKEY$}} <> ""
{{Cl|DO}}: {{Cl|_LIMIT}} {{Text|30|#F580B1}}: {{Cl|DO...LOOP|LOOP UNTIL}} {{Cl|INKEY$}} <> {{Text|<nowiki>""</nowiki>|#FFB100}}
{{CodeEnd}}
{{CodeEnd}}
{{small|Code courtesy of Galleon}}
{{Small|Code courtesy of Galleon}}




{{PageSeeAlso}}
{{PageSeeAlso}}
* [[_LOADIMAGE]], [[_NEWIMAGE]]
* [[_LOADIMAGE]], [[_NEWIMAGE]], [[_SAVEIMAGE]]
* [[_PUTIMAGE]], [[_MAPTRIANGLE]]
* [[_PUTIMAGE]], [[_MAPTRIANGLE]]
* [[_SOURCE]], [[_DEST]]
* [[_SOURCE]], [[_DEST]]
* [[_FREEIMAGE]]
* [[_FREEIMAGE]]
* [[_FILELIST$ (function)]] {{text|(Demo of _COPYIMAGE)}}
* [[_FILELIST$ (function)]] {{Text|(Demo of _COPYIMAGE)}}
* [[_DISPLAYORDER]]
* [[_DISPLAYORDER]]
* [[Hardware images]]
* [[Hardware images]]

Latest revision as of 08:20, 10 January 2024

This function creates an identical designated image in memory with a different negative LONG handle value.


Syntax

newhandle& = _COPYIMAGE(imageHandle&[, mode%])


Parameters

  • The LONG newhandle& value returned will be different than the source handle value supplied.
  • If imageHandle& is designated being zero, the current software destination screen or image is copied.
  • If 1 is designated instead of an imageHandle&, it designates the last OpenGL hardware surface to copy.
  • Mode 32 can be used to convert 256 color images to 32 bit colors.
  • Mode 33 images are hardware accelerated in version 1.000 and up, and are created using _LOADIMAGE or _COPYIMAGE.


Description

  • The function copies any image or screen handle to a new and unique negative LONG handle value.
  • Valid copy handles are less than -1. Invalid handles return -1 or 0 if it was never created.
  • Every attribute of the passed image or program screen is copied to a new handle value in memory.
  • 32 bit screen surface backgrounds (black) have zero _ALPHA so that they are transparent when placed over other surfaces.
Use CLS or _DONTBLEND to make a new surface background _ALPHA 255 or opaque.
  • Images are not deallocated when the SUB or FUNCTION they are created in ends. Free them with _FREEIMAGE.
  • It is important to free discarded images with _FREEIMAGE to prevent PC memory allocation errors!
  • Do not try to free image handles currently being used as the active SCREEN. Change screen modes first.


Examples

Example 1
Restoring a Legacy SCREEN using the _COPYIMAGE return value.
SCREEN 13
CIRCLE (160, 100), 100, 40
DO: SLEEP: LOOP UNTIL INKEY$ <> ""

'backup screen before changing SCREEN mode
oldmode& = _COPYIMAGE(0) 'the 0 value designates the current destination SCREEN

s& = _NEWIMAGE(800, 600, 32)
SCREEN s&
LINE (100, 100)-(500, 500), _RGB(0, 255, 255), BF
DO: SLEEP: LOOP UNTIL INKEY$ <> ""

SCREEN oldmode& 'restore original screen
IF s& < -1 THEN _FREEIMAGE s&
END
Code courtesy of Galleon
Note
Only free valid handle values with _FREEIMAGE AFTER a new SCREEN mode is being used by the program.

Example 2
Program that copies desktop to a hardware image to form a 3D triangle (version 1.000 and up):
SCREEN _NEWIMAGE(640, 480, 32)
my_hardware_handle = _COPYIMAGE(_SCREENIMAGE, 33) 'take a screenshot and use it as our texture
_MAPTRIANGLE (0, 0)-(500, 0)-(250, 500), my_hardware_handle TO _
(-1, 0, -1)-(1, 0, -1)-(0, 5, -10), , _SMOOTH
_DISPLAY
DO: _LIMIT 30: LOOP UNTIL INKEY$ <> ""
Code courtesy of Galleon


See also



Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link