Feature Requests item #2803280, was opened at 2009-06-08 20:40 Message generated for change (Tracker Item Submitted) made by eyerwolf You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=536848&aid=2803280&group_id=73133
Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Interface Improvements (example) Group: Next Release (example) Status: Open Priority: 5 Private: No Submitted By: Daniel Mundra (eyerwolf) Assigned to: Nobody/Anonymous (nobody) Summary: Image processing using wxHaskell Initial Comment: I liked wxHaskell, its quite useful for a lot of stuff. I wanted to use the getPixelArray to read in an image and then run a function on pixels to affect it and create a new image. The below examples blurs the image. {----------------------------------------------------------------------------------------- Author: Daniel M Description: Uses wxhaskell a gui widget program written in haskell. This program takes in an image and calls a function on its pixels and then creates a new image. We get the pixels in the form of an array wxHaskell: http://haskell.org/haskellwiki/WxHaskell -----------------------------------------------------------------------------------------} module Main where import Graphics.UI.WX import Graphics.UI.WXCore import System import Array import Text.Regex.Posix -- Needs 'start' to run the gui and handles for images main :: IO () main = do args <- getArgs let fname = head args start $ imageViewer fname -- Loads a image and transforms the pixels using changeImg -- Creates a new image chg_test.jpg with the changed pixels imageViewer fname = do f <- frame [text := "Working!"] let img = image fname arr <- loadImageArr img w <- imageGetWidth img h <- imageGetHeight img let newArr = changeImgArr arr w h newImg <- imageCreateFromPixelArray newArr imageSaveFile newImg ("chg_" ++ fname) 1 let msg = "Done!" print msg close f -- Returns a Array of pixels as (Point,Color) loadImageArr img = do arr <- imageGetPixelArray img return arr -- Takes a array of pixels and width, height of an image -- and a creates a new array where pixel color has been affected -- to blur the image. The code will ignore all the edge pixels. changeImgArr arr w h = array b ([( point x y, arr!(point x y) ) | x <- [0..w-1], y <- [0..h-1], x==0 || y==0] ++ [( point x y, recChgImg arr x y ) | x <- [1..w-2], y <- [1..h-2]] ++ [( point x y, arr!(point x y) ) | x <- [0..w-1], y <- [0..h-1], x==(w-1) || y==(h-1)]) where b = bounds arr -- Gets the color of current pixel and its neighbors (up,down,left,right) -- Algorithm: -- newX = (Xi,j + Xi-1,j + Xi+1,j + Xi,j-1 + Xi,j+1) / 5 recChgImg arr x y = newCol where col = arr!(point x y) colUp = arr!(point (x-1) y) colDown = arr!(point (x+1) y) colLeft = arr!(point x (y-1)) colRight = arr!(point x (y+1)) newColR = (colorRed col + colorRed colUp + colorRed colDown + colorRed colLeft + colorRed colRight) `div` 5 newColG = (colorGreen col + colorGreen colUp + colorGreen colDown + colorGreen colLeft + colorGreen colRight) `div` 5 newColB = (colorBlue col + colorBlue colUp + colorBlue colDown + colorBlue colLeft + colorBlue colRight) `div` 5 newCol = rgb newColR newColG newColB The above program works but it is quite slow for big images. You can see I have to call colorRed, colorBlue, ... for each pixel to get the color value. I think that's where it is really slow because it is calling that function so many times. I wonder maybe for the next version whether having a Color constructor would be useful to pattern match on. I am new to haskell and wxHaskell was the few libraries that actually can give me pixel values. Thanks Daniel ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=536848&aid=2803280&group_id=73133 ------------------------------------------------------------------------------ Crystal Reports - New Free Runtime and 30 Day Trial Check out the new simplified licensing option that enables unlimited royalty-free distribution of the report engine for externally facing server and web deployment. http://p.sf.net/sfu/businessobjects _______________________________________________ wxhaskell-devel mailing list wxhaskell-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wxhaskell-devel