Subject: bug#46556: 27.1; transparent images are displayed incorrectly if rotated

From: [email-masked]
Date: Tue, 16 Feb 2021 19:17:43 +0900

The form below displays same images with different rotation, different
format. The first line shows the image in XPM format. The second line
shows the same image converted into PNG format. The image looks like:
  [transparent][    red    ]
  [   green   ][    blue   ]

The third image in the first line is the XPM image rotated in 180
degrees. It should looks like:
  [    blue   ][   green   ]
  [    red    ][transparent]
but displayed as:
  [transparent][   green   ]
  [    red    ][   black   ]

The first image in the second line is the PNG image without rotation.
The transparent pixel is displayed as black.

The second to fourth image in the second line are the PNG images rotated
in 90 to 270 degrees. They are invisible as if the entire images are
transparent.

(let ((buf (generate-new-buffer "tmp"))
      (xpm "/* XPM */
static char * test_xpm[] = {
\"2 2 4 1\",
\".\tc None\",
\"R\tc #FF0000\",
\"G\tc #00FF00\",
\"B\tc #0000FF\",
\".R\",
\"GB\"};
")
      (png "\211PNG\r\n\032\n\0\0\0\rIHDR\0\0\0\002\
\0\0\0\002\004\003\0\0\0\200\230\020\027\0\0\0\017PLTE\
\0\0\0\377\0\0\0\377\0\0\0\377\377\377\377\201\347\260\355\
\0\0\0\001tRNS\0@\346\330f\0\0\0\014IDAT\010\327c`dP\006\0\0*\
\0%\323\224\340\204\0\0\0\0IEND\256B`\202"))
  (switch-to-buffer buf)
  (insert " ")
  (insert-image (create-image xpm 'xpm t :scale 20))
  (insert " ")
  (insert-image (create-image xpm 'xpm t :scale 20 :rotation 90))
  (insert " ")
  (insert-image (create-image xpm 'xpm t :scale 20 :rotation 180))
  (insert " ")
  (insert-image (create-image xpm 'xpm t :scale 20 :rotation 270))
  (insert " \n ")
  (insert-image (create-image png 'png t :scale 20))
  (insert " ")
  (insert-image (create-image png 'png t :scale 20 :rotation 90))
  (insert " ")
  (insert-image (create-image png 'png t :scale 20 :rotation 180))
  (insert " ")
  (insert-image (create-image png 'png t :scale 20 :rotation 270))
  (insert " \n")
  (put-text-property (point-min) (point-max) 'face '(:background "grey")))

In GNU Emacs 27.1 (build 1, x86_64-w64-mingw32)
 of 2020-08-22 built on CIRROCUMULUS
Repository revision: 86d8d76aa36037184db0b2897c434cdaab1a9ae8
Repository branch: HEAD
Windowing system distributor 'Microsoft Corp.', version 10.0.18363
System Description: Microsoft Windows 10 Pro (v10.0.1909.18363.1379)

Recent messages:

Configured using:
 'configure --without-dbus --host=x86_64-w64-mingw32
 --without-compress-install 'CFLAGS=-O2 -static''

Configured features:
XPM JPEG TIFF GIF PNG RSVG SOUND NOTIFY W32NOTIFY ACL GNUTLS LIBXML2
HARFBUZZ ZLIB TOOLKIT_SCROLL_BARS MODULES THREADS JSON PDUMPER LCMS2 GMP

Important settings:
  value of $LANG: JPN
  locale-coding-system: cp932

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
None found.

Features:
(gnutls network-stream nsm mailalias smtpmail auth-source eieio
eieio-core cl-macs eieio-loaddefs json map rect wid-edit descr-text
mule-util cl-extra help-fns radix-tree misearch multi-isearch pp shadow
sort emacsbug sendmail mail-extr message rmc puny dired dired-loaddefs
format-spec rfc822 mml mml-sec password-cache epa derived epg epg-config
gnus-util rmail rmail-loaddefs text-property-search time-date subr-x seq
byte-opt gv bytecomp byte-compile cconv mm-decode mm-bodies mm-encode
mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr
mailabbrev mail-utils gmm-utils mailheader cl-seq image-mode exif
term/bobcat help-mode easymenu cl-loaddefs cl-lib japan-util tooltip
eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel
dos-w32 ls-lisp disp-table term/w32-win w32-win w32-vars term/common-win
tool-bar dnd fontset image regexp-opt fringe tabulated-list replace
newcomment text-mode elisp-mode lisp-mode prog-mode register page
tab-bar menu-bar rfn-eshadow isearch timer select scroll-bar mouse
jit-lock font-lock syntax facemenu font-core term/tty-colors frame
minibuffer cl-generic cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite charscript charprop case-table epa-hook jka-cmpr-hook help
simple abbrev obarray cl-preloaded nadvice loaddefs button faces
cus-face macroexp files text-properties overlay sha1 md5 base64 format
env code-pages mule custom widget hashtable-print-readable backquote
threads w32notify w32 lcms2 multi-tty make-network-process emacs)

Memory information:
((conses 16 80508 31642)
 (symbols 48 21222 6)
 (strings 32 81414 6409)
 (string-bytes 1 1948745)
 (vectors 16 17956)
 (vector-slots 8 1025460 97518)
 (floats 8 49 310)
 (intervals 56 2064 179)
 (buffers 1000 27))