I just found that Pictures can’t be saved in GIF format. Which is a bummer because the lossless alternatives (TIFF and PNG) produce much larger files in my tests with images that are fairly “flat”.
Could someone from RS comment on what the problem is here?
I suspect that it has to do with the licensing rights to this format. If that’s true, then let’s please update the documentation (I can do that) and fix the IsExportFormatSupported function so that it returns FALSE as it should if Save can’t handle this format.
Though, that makes no sense with the licensing, either, does it? Because it can load gifs just fine. Unless the licensing issue is with generating gifs in particular? In any case, it’s bad that the IsExportFormatSupported function says that it works when it doesn’t.
[quote=31120:@Thomas Tempelmann]I just found that Pictures can’t be saved in GIF format. Which is a bummer because the lossless alternatives (TIFF and PNG) produce much larger files in my tests with images that are fairly “flat”.
[/quote]
GIF files use colour palettes of 256 colours and then 8 bits to represent the index into the palette for each pixel. So where you may have RGB (3x8 bits) or RGBA (4 x 8 bits) in other formats for a single pixel you have just 8 bits in GIF. The tricky part is trying to work out which colours to include in the 256 colour palette. It works well with ‘flat’ images. In most formats ‘runs’ of colours can be replaced by a special marker that says here is the colour and it runs for n-pixels to save space in the file. You can represent more than 256 colours in a GIF file by breaking the image into sections, each with its own palette. I don’t know if the PCX file format is supported in Xojo or with any 3rd party but it should provide for similar sizes to GIF, no multiple palettes though from memory.
I believe that all of the software patents have now expired. (The ‘GIF History’ supports the case for software patents being harmful in some cases, it would have been better PR for Unisys to allow free use as it caused much of the world to move away to something that is in many cases better and dislike Unisys in the process - I doubt it was worth the money in licensing fees and admin).
Or if you are on OSX… use the included built-in SIPS utility (no download required)
//
// Save Picture in GIF or TIFF format using SIPS command
//
// 1. save image as png file in temp directory
temp_file=SpecialFolder.Temporary.child("temp.png")
If temp_file.Exists Then temp_file.Delete
// 2. use sips to convert from PNG to GIF and move to desired directory
//pic_stack(current_picture).Save temp_file,150
work_area.save temp_file,Format
'temp_file.SaveAsPicture Current_Pictur),150
app.DoEvents
s="sips -s format "+sips_format+" "+temp_file.shellpath+" --out "+xfile.shellPath
//
sh.Mode = 0
sh.Execute s
app.DoEvents
If InStr(sh.Result,"command not found")>0 Then
Beep
myMsgBox "SIPS Not Found^The Image Conversion utility 'SIPS'^was not located on this computer.^^This is required for GIF and TIFF file^formats.",16
End If
If temp_file.Exists Then temp_file.Delete
Some more information: The Picture I have is actually built from GIF data. It’s downloaded via a httpSocket, so I got the data in the content parameter, created the image from it and then wanted to save it. So, the Picture is as good a valid GIF image as it could be.
I solved this issue by saving the content string directly to a file, if its first 6 bytes match the GIF signature “GIF89a”, so I’m good.
The issue why I brought thisup here is not that it doesn’t work and I needed help but that the Docs do not mention this and that IsExportFormatSupported reports the wrong behavior as well. I wanted to get confirmation for this to update at least the docs, which is the best I can do to help.