I would recommend to use a .png format, rather than .gif, as the colour palette that is reproduced is much better.
The following code works for me for a %gr region, where the approach is for the 'active selected region'. This may be applied to the %pl region via i = select_graphics_object@ (w_handle), where w_handle is an I*4 handle provided to %gr. There may be an equivalent to %pl ?
Subroutine Dump_jpg_func (message, prefix, ext)
!
! dumps a .jpg, .png or .pcx file from active selected region
!
! use mswin
include <clearwin.ins>
!
character message*(*), prefix*(*), ext*4
!
integer*4 error_jpg, file_nn, nx, ny
character file_jpg*80
data file_nn / 0 /
!
! develop a screen dump file name
!
call get_next_dump_file (file_nn, file_jpg, prefix, ext)
if (file_nn > 999) then
error_jpg = -999
goto 100
end if
write (*,*) 'Dumping screen to ',trim (file_jpg)
!
error_jpg = export_image@ (file_jpg)
!
100 call get_graphical_resolution@ ( nx, ny )
!
write ( *,1000) ext, trim(file_jpg), nx, ny, error_jpg
write (98,1000) ext, trim(file_jpg), nx, ny, error_jpg
1000 format (a,' DUMP file ',a, &
' Size : ',i0,' x ',i0,' (error=',i0,')')
!
if (error_jpg > 0) then
message = ext//' dump to '//file_jpg
else if (error_jpg == -999) then
message = 'Unable to open '//file_jpg
else
message = 'Unable to use '//file_jpg
end if
!
end subroutine Dump_jpg_func
subroutine get_next_dump_file (file_nn, file_name, prefix, ext)
!
! develop a screen dump file name
!
integer*4 file_nn
character file_name*(*), prefix*(*), ext*4
integer*4 lu, get_file_unit
external get_file_unit
!
lu = get_file_unit (90)
close (unit=lu)
!
11 file_nn = file_nn + 1
if (file_nn > 999) return
!
if (len_trim (prefix) > 0) then
write (file_name, '(a,i3.3,a)') trim(prefix) // 'dump', file_nn, ext
else
write (file_name, '(a,i3.3,a)') 'dump', file_nn, ext
end if
open (unit=lu, file=file_name, status='new', err=11)
close (unit=lu, status='delete')
end subroutine get_next_dump_file