[squeak-dev] PNG export problem

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Fri Apr 29 02:30:28 UTC 2011


2011/4/29 Juan Vuletich <juan at jvuletich.org>:
> Nicolas Cellier wrote:
>>
>> This code seems to work:
>>    PNGReadWriter
>>        putForm: ((TextStyle defaultFont characterFormAt: $T) magnifyBy:
>> 16)
>>        onFileNamed: 'T1.png'.
>>
>> This one produces a fully transparent image (at least in mac finder
>> and firefox renderers):
>>    PNGReadWriter
>>        putForm: ((TextStyle defaultFont characterFormAt: $T)
>> magnifyBy: 16) asMorph imageForm
>>        onFileNamed: 'T2.png'.
>>
>> Though a FileList is able to display a preview of the image for both
>> files,
>> importing with:
>>    Form openImageInWindow: (FileDirectory default / 'T2.png') fullName.
>> just leave a transparent image in upper corner...
>>
>> While
>>    Form openImageInWindow: (FileDirectory default / 'T1.png') fullName.
>> works as expected...
>>
>> Any clue ?
>>
>> Nicolas
>>
>
> Hi Nicolas,
>
> It is a bug in BitBlt. For instance:
>
>   | f f2 blt sourceDepth |
>   sourceDepth := 16.
>   f := Form extent: 16 at 16 depth: sourceDepth.
>   f fillWhite.
>   f2 := Form extent: 16 at 16 depth: 32.
>   f2 fillColor: Color blue.
>   blt := BitBlt new.
>   blt setDestForm: f2 sourceForm: f fillColor: nil combinationRule: Form
> paint destOrigin: 0 at 0 sourceOrigin: 0 at 0 extent: 16 at 16 clipRect: f
> boundingBox.
>   blt copyBits.
>   f2 colorAt: 0 at 0
>
> prints 'Color transparent' if sourceDepth = 16, but 'Color white' if
> sourceDepth = 32.
>
> The problem seems to be in BitBltSimulation>>#rgbMapPixel:flags:, if I
> replace the last line with
>
>   val :=val bitOr: ((255) bitShift: (24)).
>   ^val
>
> and call #copyBitsSimulated (with VMMaker loaded) It seems to work ok. This
> is just a hack for testing, as it doesn't take into account actual source
> and destination depths...
>
> Cheers,
> Juan Vuletich
>
>

Hi Juan,
this was hard to understand because I didn't noticed that imageFrom
was doing the 16bits -> 32bits copy...
But now I get it, thanks.

Nicolas



More information about the Squeak-dev mailing list