--!movie
--!encoding=utf-8
-- ************************************************************************
-- Software: BITMAP MEMBER EXPORTER
-- Version: 0.1 - D11.5+ version
-- Date: 2015-08-12
-- Author: Valentin Schmidt
--
-- Requirements/Dependencies:
-- * Xtra "FileIO"
-- * Xtra "Crypto" (http://valentin.dasdeck.com/xtras/crypto_xtra/win/d11.5/)
-- * Xtra "ImgXtra" (http://valentin.dasdeck.com/xtras/img_xtra/win/)
--
-- Usage:
-- ok = exportBitmap (member("bmp"), _movie.path, "mybitmap")
-- ok = exportBitmap (member("jpg"), _movie.path, void, true)
-- ok = exportBitmap (member("png"), _movie.path, "png", true)
-- ok = exportBitmap (member("png"), _movie.path, "pngasbmp", false)
--
-- ************************************************************************
----------------------------------------
-- Exports internal bitmap member as file. Compressed members are exported in native
-- format (JPG, PNG or GIF), uncompressed members as BMP files (or any other format
-- supported by ImgXtra, see config variable 'uncompressedFileType').
--
-- @param {string} tMemRef
-- @param {string} tFolder
-- @param {string} [tBaseName] - optional, if omitted, memberName is used
-- @param {bool} [tUseCompressed=false] - optional, try to export original compressed media, if available
-- @return {bool} success
----------------------------------------
on exportBitmap (tMemRef, tFolder, tBaseName, tUseCompressed)
if tMemRef.type<>#bitmap then return false
if tMemRef.image.width=0 then return false
-- CONFIG: can be ".bmp" | ".png" | ".jpg" | ".gif"
uncompressedFileType = ".bmp"
if voidP(tBaseName) then tBaseName = tMemRef.name
pd = the last char of _movie.path
if the last char of tFolder<>pd then put pd after tFolder
ok = false
if tUseCompressed then
tUseCompressed = tMemRef.compressedMedia.length<tMemRef.media.length
if tUseCompressed then
data = cx_member_to_bytes(tMemRef, TRUE)
if data.length>=25 then tUseCompressed = (data[25]>0)
end if
end if
if tUseCompressed then
data.position = 29
formatLen = data[25]
dataType = data.readRawString(formatLen)
data.position = data.position+36
case (dataType) of
"kMoaCfFormat_JPEG":
len = data.readInt32()
ok = file_put_bytes(tFolder&tBaseName&".jpg", data.readByteArray(len))
"kMoaCfFormat_PNG":
len = data.readInt32()
ok = file_put_bytes(tFolder&tBaseName&".png", data.readByteArray(len))
"kMoaCfFormat_GIF":
len = data.readInt32()
ok = file_put_bytes(tFolder&tBaseName&".gif", data.readByteArray(len))
end case
end if
if not(ok) then -- EXPORT AS uncompressedFileType (e.g. BMP)
ix = xtra("ImgXtra").new()
props=[:]
props["image"] = tMemRef.image
props["filename"] = tFolder&tBaseName&uncompressedFileType
ok = ix.ix_saveImage(props)
ix = 0
end if
return ok
end
----------------------------------------
-- Saves byteArray as file
-- @param {string} tFile
-- @param {byteArray} tByteArray
-- @return {bool} success
----------------------------------------
on file_put_bytes (tFile, tByteArray)
fp = xtra("fileIO").new()
fp.openFile(tFile, 1)
err = fp.status()
if (err=0) then fp.delete()
else if (err <> -37) then return false
fp.createFile(tFile)
err = fp.status()
if (err<>0) then return false
fp.openFile(tFile, 2)
err = fp.status()
if (err<>0) then return false
ok = fp.writeByteArray(tByteArray)
fp.closeFile()
fp = 0
return (err=0)
end