From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: joakim@verona.se Newsgroups: gmane.emacs.devel Subject: Re: Drawing in images? Date: Thu, 17 Sep 2009 23:46:34 +0200 Message-ID: References: <87bpm028zk.fsf@stupidchicken.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: ger.gmane.org 1253224022 28011 80.91.229.12 (17 Sep 2009 21:47:02 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 17 Sep 2009 21:47:02 +0000 (UTC) Cc: emacs-devel@gnu.org To: MON KEY Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Sep 17 23:46:54 2009 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1MoOoX-0004Sq-4d for ged-emacs-devel@m.gmane.org; Thu, 17 Sep 2009 23:46:54 +0200 Original-Received: from localhost ([127.0.0.1]:49563 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MoOoW-0008A6-It for ged-emacs-devel@m.gmane.org; Thu, 17 Sep 2009 17:46:52 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MoOoP-00087d-Pk for emacs-devel@gnu.org; Thu, 17 Sep 2009 17:46:45 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MoOoL-00085U-07 for emacs-devel@gnu.org; Thu, 17 Sep 2009 17:46:45 -0400 Original-Received: from [199.232.76.173] (port=53413 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MoOoK-00085R-Tz for emacs-devel@gnu.org; Thu, 17 Sep 2009 17:46:40 -0400 Original-Received: from proxy1.bredband.net ([195.54.101.71]:55919) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MoOoK-0003nV-8A for emacs-devel@gnu.org; Thu, 17 Sep 2009 17:46:40 -0400 Original-Received: from iph2.telenor.se (195.54.127.133) by proxy1.bredband.net (7.3.140.3) id 49F5A152038791AA for emacs-devel@gnu.org; Thu, 17 Sep 2009 23:46:37 +0200 X-SMTPAUTH-B2: joakvero X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvFaADJLskpT44qWPGdsb2JhbACbIQEBAQE3uH6EHAWBWIJ0 X-IronPort-AV: E=Sophos;i="4.44,405,1249250400"; d="el'?scan'208";a="43634061" Original-Received: from ua-83-227-138-150.cust.bredbandsbolaget.se (HELO exodia) ([83.227.138.150]) by iph2.telenor.se with ESMTP; 17 Sep 2009 23:46:37 +0200 Original-Received: from localhost.localdomain (DIR-655.lan [192.168.200.113]) (authenticated bits=0) by exodia (8.14.3/8.14.3) with ESMTP id n8HLkYRb003602 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Thu, 17 Sep 2009 23:46:35 +0200 In-Reply-To: (MON KEY's message of "Thu, 17 Sep 2009 15:13:18 -0400") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (gnu/linux) X-detected-operating-system: by monty-python.gnu.org: Genre and OS details not recognized. X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:115438 Archived-At: --=-=-= MON KEY writes: > On Wed, Sep 16, 2009 at 3:04 PM, wrote: >> >> Here's an attempt. Its hardly industrial strength, but seems to work. >> Test with m-x dragbox-start, enter an image file name compatible with >> svg, I tried png. Then set the corner coords for the box with LMB and RMB. >> > > Joakim thanks for taking a shot at this. This is very exciting. > Unfortunately I can't evaluate. After invoking the `dragbox-start' > comman with both .png and .jpg image-file types the *dragbox* buffer > returns some svg data and a message: Thanks for testing. I added the requires you mention, and cleaned up the code a little bit for readability. Still not industrial strength, but works here(but I only tested it on a single png file). Looking forward to your further comments. > => "Invalid image type `svg'" > > Not sure if the local w32 builds are compiled with libsvg support out > of the box. > I've not been able to get svg functionality to evaluate on the > following w32 systems. > > - 23.1.50.1 (i386-mingw-nt5.1.2600) of 2009-06-30 on LENNART-69DE564 (patched); > - 23.0.91.1 (i386-mingw-nt5.1.2600) of 2009-02-26 on SOFT-MJASON; > - 23.1.1 (i386-mingw-nt5.1.2600) of 2009-07-30 on SOFT-MJASON; > > Can these functions be evaluated successfully on a non CVS emacs? > Likewise, if so, can these functions be evaluated on a non CVS emacs on w32? > > Also, as a side note in lieu of a future dragbox package; in a fresh > environment when evaluating these functions on the two 23.* > SOFT-MJASON builds referd above the key bindings on > image-mode-mode-map of `dragbox-lmb-click-handler' and > `dragbox-rmb-click-handler' didn't take until after a (require > 'image-mode). Additionally, I needed a (require 'xml) to get the > invocation of `xml-print' in `dragbox-update-box' to evaluate. > > Just to make sure I also tried evaluating CYD's svg example here: > (URL `http://lists.gnu.org/archive/html/emacs-devel/2009-07/msg01166.html') > I know this works on a GNU box but on the w32 systems get: > => "Invalid image type `svg'" > > Any advice as to what needs to be done to get supprot for `svg' on w32? > > I look forward to testing the dragbox functions on a GNU box later this evening. > > s_P -- Joakim Verona --=-=-= Content-Disposition: inline; filename=dragbox-test.el ;;; dragbox-test.el --- dragbox - draw a bounding box interactively ;;; Commentary: ;; draw a bounding box on an image. ;; needs an Emacs with svg support compiled in. ;; Author: Joakim Verona, (C) FSF 2009, GPL ;;; History: ;; (require 'image-mode) (require 'xml) (if (not (image-type-available-p 'svg)) (error "No svg available!")) ;;arbitrary image size, for testing ;;; Code: (setq dragbox-image-width 744) (setq dragbox-image-height 1052) ;;initial bounding box (setq dragbox-x1y1 '(0 . 0)) (setq dragbox-x2y2 '(100 . 100)) (setq dragbox-image-url "") (defun dragbox-start (image-file) "Start here with an IMAGE-FILE suitable for svg embedding." (interactive "fImage file:") (get-buffer-create "*dragbox*") (switch-to-buffer "*dragbox*") (setq dragbox-image-url (concat "file://" (expand-file-name image-file))) (dragbox-update-box-from-state)) (defun dragbox-make-svg-data (x y width height image-url) "Return svg describing a image file with a bounding box ontop. X Y WIDTH HEIGHT describes the box, IMAGE-URL which image to draw on." `((svg ((xmlns:dc . "http://purl.org/dc/elements/1.1/") (xmlns:cc . "http://creativecommons.org/ns#") (xmlns:rdf . "http://www.w3.org/1999/02/22-rdf-syntax-ns#") (xmlns:svg . "http://www.w3.org/2000/svg") (xmlns:xlink . "http://www.w3.org/1999/xlink") (xmlns . "http://www.w3.org/2000/svg") (width . ,(number-to-string dragbox-image-width)) (height . ,(number-to-string dragbox-image-height)) (id . "svg2")) (g ((id . "layer1")) (rect ((style . "fill:#cfcfcf;fill-opacity:1") (width . ,(number-to-string dragbox-image-width)) (height . ,(number-to-string dragbox-image-height)) (x . "0") (y . "0"))) (image ((y . "0") (x . "0") (width . ,(number-to-string dragbox-image-width)) (height . ,(number-to-string dragbox-image-height)) (xlink:href . ,image-url) )) (rect ((style . "color:#000000;fill:#000000;fill-opacity:0.5;fill-rule:nonzero;stroke:#000000;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-opacity:0.5") (id . "dragbox") (width . , (number-to-string width) ) (height . ,(number-to-string height)) (x . ,(number-to-string x)) (y . ,(number-to-string y)))) )))) (defun dragbox-lmb-click-handler () "Set upper left coords for bounding box." (interactive) (setq dragbox-x1y1 (dragbox-extract-event-coords last-input-event)) (dragbox-update-box-from-state) ) (defun dragbox-rmb-click-handler () "Set lower right coords for bounding box." (interactive) (setq dragbox-x2y2 (dragbox-extract-event-coords last-input-event)) (dragbox-update-box-from-state) ) (defun dragbox-extract-event-coords (event) "Get the coordinates from click EVENT." (caddr(cadr last-input-event)) ) ;;bind the handlers to lmb and rmb (define-key image-mode-map [down-mouse-1] 'dragbox-lmb-click-handler) (define-key image-mode-map [down-mouse-2] 'dragbox-rmb-click-handler) (defun dragbox-update-box (x y width height) "Redraw the bounding box, given X Y WIDTH and HEIGHT ontop of the image." ;;this implementation doest seem very efficient (fundamental-mode) (erase-buffer) (xml-print (dragbox-make-svg-data x y width height dragbox-image-url)) (image-mode) ) (defun dragbox-update-box-from-state () "Redraw bounding box from global state ontop of image." (let* ((x1 (car dragbox-x1y1)) (y1 (cdr dragbox-x1y1)) (x2 (car dragbox-x2y2)) (y2 (cdr dragbox-x2y2)) (w (- x2 x1)) (h (- y2 y1))) (message "(%d %d) (%d %d) w:%d h:%d" x1 y1 x2 y2 w h) (dragbox-update-box x1 y1 w h))) (provide 'dragbox-test) ;;; dragbox-test.el ends here --=-=-=--