From: Felix.Stude (Felix Studer)

Subject: inverted colors

Date: 1997-4-20 8:37

Hi,

In the following code a first window (mymain-window) is created and a
.bmp-file (picture1.bmp) is displayed in this window. Then a dialog is
opened and another .bmp-file (picture2.bmp) is displayed in this dialog. At
this moment the colors of the first picture (picture1.bmp) are inverted
(dark-gray is orange and so on). How can I avoid the modification of the
colors?

(in-package :common-lisp-user)

(defvar mymain-window)

(defvar *bannerdialog*)
(defvar *bitmapinbanner*)

(defclass main-window (bitmap-window)())
(defclass main-pane (bitmap-pane)())
(defmethod default-pane-class ((stream main-window)) 'main-pane)

(defun create-mymain-window ()
   (setq mymain-window
      (open-stream
         'main-window
         *screen*
         :io
         :title "myTitle"
         :window-border :frame
         :window-state nil
         :user-movable t
         :user-resizable nil
         :user-closable t
         :user-shrinkable nil
         :user-scrollable nil
         :overlapped nil
         :background-color
         (make-rgb :red 192 :green 192 :blue 192)
         :pop-up-p nil
         :window-interior (make-box 1 19 506 427)))
   (setq pict (copy-pixels-to-stream-from-file
               "picture1.bmp"
               mymain-window))
   (redisplay-window pict))

(defun make-bannerdialog ()
   (setq *bannerdialog*
      (open-dialog
         (list
            (make-dialog-item
               :widget 'default-button
               :name :default-button-1
               :title "OK"
               :box (make-box 170 218 270 238)
               :3d-border t
               :tabstop nil
               :groupstart nil
               :set-value-fn 'closebanner
               :font (make-font nil :arial 16 '(:bold))))
         'dialog mymain-window
         :name :bannerdialog
         :title "Dialog 1"
         :font (make-font :swiss :system 16 '(:bold))
         :window-state :shrunk
         :window-border :dialog-box
         :left-attachment nil
         :top-attachment nil
         :right-attachment nil
         :bottom-attachment nil
         :user-movable nil
         :user-resizable nil
         :user-closable t
         :user-shrinkable t
         :user-scrollable nil
         :overlapped nil
         :background-color light-grey
         :pop-up-p t
         :window-interior
         (make-box (+ (box-left (window-interior mymain-window)) 57)
            (+ (box-top (window-interior mymain-window)) 64)
            (- (box-right (window-interior mymain-window)) 58)
            (- (box-bottom (window-interior mymain-window)) 64)))))

(defun make-bitmapinbanner (&aux pict)
   (setq *bitmapinbanner*
      (open-stream 'bitmap-window
         *bannerdialog*
         :io
         :name :bitmap-window-1
         :title ""
         :font (make-font :swiss :system 16 '(:bold))
         :window-state nil
         :window-border nil
         :left-attachment nil
         :top-attachment nil
         :right-attachment nil
         :bottom-attachment nil
         :user-movable nil
         :user-resizable nil
         :user-closable nil
         :user-shrinkable nil
         :user-scrollable nil
         :overlapped nil
         :background-color light-grey
         :pop-up-p nil
         :window-interior (make-box 20 30 97 244)))
   (setq pict (copy-pixels-to-stream-from-file
               "picture2.bmp"
               *bitmapinbanner*))
   (redisplay-window pict))

(defun bannershow ()
   (make-bannerdialog)
   (make-bitmapinbanner)
   (pop-up-dialog *bannerdialog*))

(defun closebanner (dialog-item-dialog widget var)
   (return-t-from-pop-up-dialog dialog-item-dialog widget var))

(defun start-it (&aux pict)
   (create-mymain-window)
   (bannershow))

(start-it)

This was my first attempt using 'copy-pixels-to-stream-from-file'. Then I
tried the following version with 'load-pixmap' and 'copy-pixels-to-stream'.
The behavior is exactly the same.

(in-package :common-lisp-user)

(defvar mymain-window)

(defvar *bannerdialog*)
(defvar *bitmapinbanner*)

(defvar box)
(defvar texture-info)
(defvar pixmap)
(defvar boxb)
(defvar texture-infob)
(defvar pixmapb)

(defclass main-window (bitmap-window)())
(defclass main-pane (bitmap-pane)())
(defmethod default-pane-class ((stream main-window)) 'main-pane)

(defun create-mymain-window ()
   (setq mymain-window
      (open-stream
         'main-window
         *screen*
         :io
         :title "Induktives Denken"
         :window-border :frame
         :window-state nil
         :user-movable t
         :user-resizable nil
         :user-closable t
         :user-shrinkable nil
         :user-scrollable nil
         :overlapped nil
         :background-color
         (make-rgb :red 192 :green 192 :blue 192)
         :pop-up-p nil
         :window-interior (make-box 1 19 506 427)))
   (multiple-value-setq (pixmap texture-info)
      (load-pixmap "grund.bmp"))
   (setq box (make-box 0 0 (texture-info-width texture-info)
                (texture-info-height texture-info)))
   (set-palette mymain-window
      (open-palette *screen* (texture-info-colors texture-info) nil))
   (copy-pixels-to-stream mymain-window pixmap texture-info box box 204))

(defun make-bannerdialog ()
   (setq *bannerdialog*
      (open-dialog
         (list
            (make-dialog-item
               :widget 'default-button
               :name :default-button-1
               :title "OK"
               :box (make-box 170 218 270 238)
               :3d-border t
               :tabstop nil
               :groupstart nil
               :set-value-fn 'closebanner
               :font (make-font nil :arial 16 '(:bold))))
         'dialog mymain-window
         :name :bannerdialog
         :title "Dialog 1"
         :font (make-font :swiss :system 16 '(:bold))
         :window-state :shrunk
         :window-border :dialog-box
         :left-attachment nil
         :top-attachment nil
         :right-attachment nil
         :bottom-attachment nil
         :user-movable nil
         :user-resizable nil
         :user-closable t
         :user-shrinkable t
         :user-scrollable nil
         :overlapped nil
         :background-color light-grey
         :pop-up-p t
         :window-interior
         (make-box (+ (box-left (window-interior mymain-window)) 57)
            (+ (box-top (window-interior mymain-window)) 64)
            (- (box-right (window-interior mymain-window)) 58)
            (- (box-bottom (window-interior mymain-window)) 64)))))

(defun make-bitmapinbanner (&aux pict)
   (setq *bitmapinbanner*
      (open-stream 'bitmap-window
         *bannerdialog*
         :io
         :name :bitmap-window-1
         :title ""
         :font (make-font :swiss :system 16 '(:bold))
         :window-state nil
         :window-border nil
         :left-attachment nil
         :top-attachment nil
         :right-attachment nil
         :bottom-attachment nil
         :user-movable nil
         :user-resizable nil
         :user-closable nil
         :user-shrinkable nil
         :user-scrollable nil
         :overlapped nil
         :background-color light-grey
         :pop-up-p nil
         :window-interior (make-box 20 30 97 244)))
   (multiple-value-setq (pixmapb texture-infob)
      (load-pixmap "banner.bmp"))
   (setq boxb (make-box 0 0 (texture-info-width texture-infob)
                (texture-info-height texture-infob)))
   (set-palette *bitmapinbanner*
      (open-palette *screen* (texture-info-colors texture-infob) nil))
   (copy-pixels-to-stream *bitmapinbanner* pixmapb texture-infob boxb boxb
      204))

(defun bannershow ()
   (make-bannerdialog)
   (make-bitmapinbanner)
   (pop-up-dialog *bannerdialog*))

(defun closebanner (dialog-item-dialog widget var)
   (return-t-from-pop-up-dialog dialog-item-dialog widget var))

(defun start-it (&aux pict)
   (create-mymain-window)
   (bannershow))

(start-it)

Must developers be confronted with such stupid problems? I have read the
documentation and the Allegro CL FAQs. I can't understand how I can solve
the problem.

I will appreciate your help! Thanks.

Felix Studer

________________________________________________
Felix STUDER, Dr. phil.
Institute for Special Education
University of Fribourg
Canisius 21
CH-1700 Fribourg/Switzerland
Phone:  +41 26 300 77 00
Fax:     +41 26 300 97 49
E-Mail: <unifr.ch at Felix.Studer>
WWW URL http://pedcurmac13.unifr.ch/CogStrat.html
________________________________________________