Convertfromraw has no idea what sectors the guest OS uses or doesn't use,
so the virtual image will contain the entire source disk.
In fact the source file can be anything - it doesn't even have to be
a disk image.
The only space optimization is that large chunks (>1MB) that
are filled with zero bytes will merely be flagged as zero and
not written to the target file.
This is a simple form of lossless compression,
perhaps resembling simplified run-length encoding.
This is the same mechanism that causes VDI files to get smaller
if you zerofill/sdelete and then clone them.
To minimize the size of the VDI file, you should therefore zero
all the unused sectors on the source disk before doing
convertfromraw.
Defragmenting (if possible) all used sectors to the beginning of
the disk will also help.