diff --git a/basis/images/bitmap/bitmap.factor b/basis/images/bitmap/bitmap.factor index ffe3adff48..8209159a8e 100755 --- a/basis/images/bitmap/bitmap.factor +++ b/basis/images/bitmap/bitmap.factor @@ -83,14 +83,15 @@ ERROR: bmp-not-supported n ; :: fixup-color-index ( loading-bitmap -- loading-bitmap ) loading-bitmap width>> :> width + width 3 * :> width*3 loading-bitmap height>> abs :> height loading-bitmap color-index>> length :> color-index-length - height 3 * :> height*3 - color-index-length width height*3 * - height*3 /i :> misaligned - misaligned 0 > [ + color-index-length height /i :> stride + color-index-length width*3 height * - height /i :> padding + padding 0 > [ loading-bitmap [ - loading-bitmap width>> misaligned + 3 * - [ 3 misaligned * head* ] map concat + stride + [ width*3 head-slice ] map concat ] change-color-index ] [ loading-bitmap diff --git a/basis/images/test-images/40red24bit.bmp b/basis/images/test-images/40red24bit.bmp new file mode 100644 index 0000000000..5e694559c6 Binary files /dev/null and b/basis/images/test-images/40red24bit.bmp differ diff --git a/basis/images/test-images/41red24bit.bmp b/basis/images/test-images/41red24bit.bmp new file mode 100644 index 0000000000..6599dcc107 Binary files /dev/null and b/basis/images/test-images/41red24bit.bmp differ diff --git a/basis/images/test-images/42red24bit.bmp b/basis/images/test-images/42red24bit.bmp new file mode 100644 index 0000000000..e95a4f75f5 Binary files /dev/null and b/basis/images/test-images/42red24bit.bmp differ diff --git a/basis/images/test-images/43red24bit.bmp b/basis/images/test-images/43red24bit.bmp new file mode 100644 index 0000000000..d88f2d4c32 Binary files /dev/null and b/basis/images/test-images/43red24bit.bmp differ diff --git a/basis/images/test-images/elephants.tiff b/basis/images/test-images/elephants.tiff new file mode 100644 index 0000000000..f462a0c043 Binary files /dev/null and b/basis/images/test-images/elephants.tiff differ diff --git a/basis/images/tiff/tiff.factor b/basis/images/tiff/tiff.factor index 2ea1b08e20..80eaff8140 100755 --- a/basis/images/tiff/tiff.factor +++ b/basis/images/tiff/tiff.factor @@ -477,26 +477,24 @@ ERROR: unknown-component-order ifd ; [ unknown-component-order ] } case ; +: normalize-alpha-data ( seq -- byte-array ) + ! [ normalize-alpha-data ] change-bitmap + B{ } like dup + byte-array>float-array + 4 + [ + dup fourth dup 0 = [ + 2drop + ] [ + [ 3 head-slice ] dip '[ _ / ] change-each + ] if + ] each ; + : handle-alpha-data ( ifd -- ifd ) dup extra-samples find-tag { - { extra-samples-associated-alpha-data [ - [ - B{ } like dup - byte-array>float-array - 4 - [ - dup fourth dup 0 = [ - 2drop - ] [ - [ 3 head-slice ] dip '[ _ / ] change-each - ] if - ] each - ] change-bitmap - ] } - { extra-samples-unspecified-alpha-data [ - ] } - { extra-samples-unassociated-alpha-data [ - ] } + { extra-samples-associated-alpha-data [ ] } + { extra-samples-unspecified-alpha-data [ ] } + { extra-samples-unassociated-alpha-data [ ] } [ bad-extra-samples ] } case ;