[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Re: inline image for Mule 2



白井@違いのわからない奴、です。

From: Katsumi Yamaoka <yamaoka@jpl.org> さん曰く
Subject: [emacs-w3m:03295] Re: inline image for Mule 2
Message-ID: <yosuelh7ey00.fsf@jpl.org>
Date: Tue, 23 Apr 2002 15:21:18 +0900

山岡さん> overlay に無色透明な face を持たせることによって対策できました。
山岡さん> Emacs 20 での画面の見栄えが、かなり良くなったと思います。:-)

これ、実は。。。

From: Katsumi Yamaoka <yamaoka@jpl.org> さん曰く
Subject: [emacs-w3m:03218] Re: inline image for Mule 2
Message-ID: <yosu662xnixa.fsf@jpl.org>
Date: Fri, 12 Apr 2002 22:30:21 +0900

山岡さん> bitmap の絵の色がいまだ w3m-bitmap-image-face で制御できない、
山岡さん> 
山岡さん> これの原因がわかってかなり驚いたのですが、Emacs 20 では text
山岡さん> property の face がある場所に overlay があると、face が表示に
山岡さん> 反映されなくなってしまいます。例えば *w3m* バッファで以下を評価
山岡さん> すると
山岡さん> 
山岡さん> (make-overlay (point-min) (point-max))

このときから感じていたのですが、なぜか私には全然違いがわからない
のです ^^;;;

# Meadow のせいかな? と思ったんですが、Emacs 20.7/Mule 4.0 でも
# わからなかった。(昔の環境に w3m, w3m.el だけ入れ直したのですが、
# 数年前までこんな遅いマシンを使っていたとは)


で、閑話休題。

(1)  所詮、ON/OFF しか表現できないわけですから、付属のパッチの様
    に、お好みで text の face を bitmap image に継承できるように
    したらどうでしょうか。
    
(2) 古いマシンの convert が 

   % convert -h | head
   Version: @(#)ImageMagick 3.7.4 96/07/01 cristy@dupont.com

とめちゃくちゃ古いので気が付いたのですが、この古い convert で多
値画像データを二値化するときにはディザマトリクスを使った普通のディ
ザ(変な説明)を使います。けど、最近使っている convert 5.4.x だと
誤差拡散処理を使っています。

双方を見比べたところ、個人的にはディザを使った方が見やすいように
感じられたので、付属のパッチの様に convert にあたえる argument
を設定できた方がうれしいです。

# commit しちゃおうかなと思ったんですが、違いがわかっていない男
# なので (1) 関連でとりあえず自粛。


P.S.

しかし、最近の convert にいろいろ option を与えても誤差拡散処理
のままで、ディザ使ってくれないのですが、どなたか『これだ!!』っ
ておわかりになりませんか?

## 普通は error diffusion method のことを dither とは言わないと
## 思うんだけどなぁ。。。> ImageMagick
## % convet --help
## -dither  apply Floyd/Steinberg error diffusion to image

-- 
白井秀行@実は P.S. を一番書きたかったらしい。
Index: w3m-bitmap.el
===================================================================
RCS file: /cvsroot/w3m-shirai/emacs-w3m/w3m-bitmap.el,v
retrieving revision 1.25
diff -u -u -r1.25 w3m-bitmap.el
--- w3m-bitmap.el	23 Apr 2002 06:23:11 -0000	1.25
+++ w3m-bitmap.el	23 Apr 2002 09:45:58 -0000
@@ -235,6 +235,16 @@
   "Face used to highlight bitmap images."
   :group 'w3m-face)
 
+(defcustom w3m-bitmap-convert-arguments nil
+  "*List of the arguments of `convert' from any image to xbm."
+  :group 'w3m
+  :type '(repeat string))
+
+(defcustom w3m-bitmap-image-face-inherit nil
+  "*If non-nil, inherit face of image from the original face."
+  :group 'w3m
+  :type 'boolean)
+
 (defcustom w3m-bitmap-cache-image-hook nil
   "*Hook run with use cached image."
   :group 'w3m
@@ -416,13 +426,15 @@
 			     (insert data)
 			     (apply 'w3m-imagick-start-convert-buffer
 				    handler type "xbm"
-				    (if set-size
-					(list "-geometry"
-					      (concat (number-to-string
-						       (car size))
-						      "x"
-						      (number-to-string
-						       (cdr size)) "!"))))))
+				    (append
+				     (if set-size
+					 (list "-geometry"
+					       (concat (number-to-string
+							(car size))
+						       "x"
+						       (number-to-string
+							(cdr size)) "!")))
+				     w3m-bitmap-convert-arguments))))
 		(when success
 		  (let ((image (w3m-bitmap-image-buffer (current-buffer))))
 		    (push (cons (if set-size (list url size) url)
@@ -432,9 +444,11 @@
 (defun w3m-insert-image (beg end image url)
   "Display image on the current buffer.
 Buffer string between BEG and END are replaced with IMAGE."
-  (let ((properties (text-properties-at beg))
-	(name (buffer-substring beg end))
-	(ovr (w3m-bitmap-image-get-overlay beg)))
+  (let* ((properties (text-properties-at beg))
+	 (name (buffer-substring beg end))
+	 (ovr (w3m-bitmap-image-get-overlay beg))
+	 (face (and w3m-bitmap-image-face-inherit
+		    (nth 1 (memq 'face properties)))))
     (when (equal (nth 1 (memq 'w3m-image properties)) url)
       (w3m-bitmap-image-delete-internal beg ovr (- end beg))
       (w3m-bitmap-image-insert beg image
@@ -442,7 +456,8 @@
 						 'w3m-image-status 'on
 						 'w3m-bitmap-image t
 						 'w3m-image-name name
-						 'face 'w3m-bitmap-image-face)
+						 'face
+						 (or face 'w3m-bitmap-image-face))
 			       ovr))))
 
 (defun w3m-remove-image (beg end)