Page 1 of 1

FW_SaveImage

PostPosted: Tue Feb 13, 2024 1:38 pm
by Natter
Hi,

I create an image in A2 format.
Code: Select all  Expand view
hBmp :=FW_MakeYour Bitmap(7016, 4961, {|hDc|FW_DrawImage(),..})

Then I save it to file
Code: Select all  Expand view
FW_SaveImage(bmp, "myfile")
Everything is fine.

I create an image in A1 format.
Code: Select all  Expand view
hBmp:=FW_MakeYour Bitmap(9933, 7016, {|hDc|FW_DrawImage(),..})
When saving it to a file, the program terminates without an error. I understand that there is not enough memory. What can be predicted ?

Re: FW_SaveImage

PostPosted: Tue Feb 13, 2024 2:40 pm
by nageswaragunupudi
When saving it to a file, the program terminates without an error. I understand that there is not enough memory.


Possible.
But I tried with the same size it is working for me quite well.
This is my sample program
Code: Select all  Expand view
function LargeBmp()

   local hBmp

   ? "start"

   hBmp  := FW_MakeYourBitmap(9933, 7016, <|hDc,w,h|
      local aBmp
      aBmp  := FW_ReadImage( nil, "..\bitmaps\sea.bmp", , .t. )
      FW_DrawImage( hDC, aBmp[ 1 ],              { 0, 0, 768*4, 1024*4, 1 } )
      FW_DrawImage( hDC, "..\bitmaps\olga1.jpg", { 0, 1024*4, 450*7, 1024*4 + 352*7, 1 } )
      FW_DrawImage( hDC, aBmp[ 1 ],              { 3200, 0, 3200+768*4, 1024*4, 1 } )
      FW_DrawImage( hDC, "..\bitmaps\olga1.jpg", { 3200, 1024*4, 3200+450*7, 1024*4 + 352*7, 1 } )
      PalBmpFree( aBmp )
      return nil
      > )

   ? hbmp

   FW_SaveImage( hBmp, "large.png" )
   DeleteObject( hBmp )

   ? "saved"

   XImage( "large.png" )

return nil


I am able to see the image well.
If you want I can also post a screenshot

Re: FW_SaveImage

PostPosted: Thu Feb 15, 2024 12:51 am
by nageswaragunupudi
Did you try my sample program?

Re: FW_SaveImage

PostPosted: Thu Feb 15, 2024 11:39 am
by Natter
Yes, your example works well. But files in A1 and A0 format do not want to be saved from my program :cry:

I am trying to make an option with the creation of several bitmap files and their subsequent gluing.
Is it possible to split hBmp into several parts and save them as separate files ?

Re: FW_SaveImage

PostPosted: Thu Feb 15, 2024 3:22 pm
by nageswaragunupudi
Yes, your example works well. But files in A1 and A0 format do not want to be saved from my program.


How can I help you?
Can you send me a test program of yours to my personal email?
nageswaragunupudi [at] gmail [dot] com
I am trying to make an option with the creation of several bitmap files and their subsequent gluing.

For gluing, you can use the function
Code: Select all  Expand view
FW_StitchImages( uImage1, uImage2, [cSide], [cType] ) --> newImage


uImage1 and uImage2: can be hBitmap or any image-file or any image-buffer of any type.
cSide: Can be "R" or "B". R for Right and B for bottom. Default Bottom
cType: If the parameter is nil, the result is hBitmap
if cType is "bmp", "jpg", "png" the result is an image buffer of the type speicified, which can be saved to a file directly wih MEMOWRIT
if cType is .T., then the result type is the type of the first image.

Is it possible to split hBmp into several parts and save them as separate files ?

Code: Select all  Expand view
FW_TransformBitmap( hBmp, aCrop ) --> hCroppedBmp

Re: FW_SaveImage

PostPosted: Thu Feb 15, 2024 3:41 pm
by Natter
Thank you, Rao, very interesting functions - FW_StitchImages and FW_TransformBitmap. I'll try with them

Re: FW_SaveImage

PostPosted: Fri Feb 16, 2024 9:29 am
by Natter
I wanted to divide the hBmp into 3 parts - 33%, 33% and 34%
How can I do this using the FW_Transform Bitmap function ?

Re: FW_SaveImage

PostPosted: Fri Feb 16, 2024 3:46 pm
by nageswaragunupudi
Try this sample which splits and again glues together
Code: Select all  Expand view
#include "fivewin.ch"

function Main()

   local cSource  := "\fwh\bitmaps\sea.bmp"
   local aSave
   local hSource, aBmp
   local nWidth, nHeight, h, n, c, nTop, nBot
   local nParts   := 3

   hSource  := FW_ReadImage( nil, cSource )[ 1 ] // hBitmap
   nWidth   := GetBmpWidth(  hSource )
   nHeight  := GetBmpHeight( hSource )
   h        := Int( nHeight / nParts )

   nTop        := 0
   aBmp        := Array( nParts )

   for n := 1 to nParts
      nBot  := If( n == nParts, nHeight, nTop + h )
      aBmp[ n ]   := FW_TransformBitmap( hSource, { nTop, 0, nBot, nWidth } )
      nTop  := nBot
   next

   DeleteObject( hSource )

   // SaveAs png files
   aSave    := Array( nParts )
   for n := 1 to nParts
      aSave[ n ] := BeforAtNum( ".", cSource ) + cValToStr( n ) + ".png"
      FW_SaveImage( aBmp[ n ], aSave[ n ] )
      DeleteObject( aBmp[ n ] )
   next

   // View all the saved parts
   xbrowser aSave SETUP ( ;
      oBrw:aCols[ 1 ]:cDataType := "F", ;
      oBrw:nMarqueeStyle := 0 )

   // Let us now glue all the parts and view the reconstructed full image

   c  := aSave[ 1 ]
   for n := 2 to nParts
      c  := FW_StitchImages( c, aSave[ n ], , "png" )
   next

   // save the glued image to file
   MEMOWRIT( "new.png", c )
   XImage( "new.png" )

return aSave
 


Image

Re: FW_SaveImage

PostPosted: Fri Feb 16, 2024 4:31 pm
by Natter
I think the problem is not saving large formats through the FW_SaveImage function.

To get a larger format, I expanded the dialog box to the desired size (oDld:Move()). Further, moving this dialog according to the specified algorithm, I received the device context of the screen. It used to work, now it doesn't.