ズッキーニのプログラミング実験場

プログラミング + アカデミック + 何か面白いこと。 記載されているものは基本的に私が所属する団体とは関係がありません。

   Jul 06

[Haskell]PGMファイルを生成する part2

by zuqqhi2 at 2013年7月6日
Pocket

昨日の続きで
HaskellでPGMファイルを生成してみる。
今日は、乱数列を生成してみた。

import System.IO
import System.Random
import Control.Monad (replicateM)

main = do
    -- PGM Header
    let pgm_type = "P5\n"
    let pgm_comment = "# PGM type grayscale image\n"
    let pgm_size = (255,255)
    let pgm_max_brightness = 255

    let pgm_size_string = (show (fst pgm_size)) ++ " " ++ (show (snd pgm_size)) ++ "\n"
    let pgm_max_brightness_string = (show pgm_max_brightness) ++ "\n"
    let pgm_header = pgm_type ++ pgm_comment ++ pgm_size_string ++ pgm_max_brightness_string
    let pgm_filename = "test.pgm"

    fh <- openFile pgm_filename WriteMode
    hPutStr fh pgm_header

    -- Main
    pixels <- replicateM 255 $ (getStdRandom $ randomR (0,255) :: IO Int)
    hPrint fh pixels
    hClose fh

出力はこんな感じ。

$ghc pgm.hs
$./pgm
$cat test.pgm
P5
# PGM type grayscale image
255 255
255
[167,222,176,132,221,175,81,7,160,123,62,170,122,60,83,148,210,160,61,88,86,192,124,51,56,167,247,234,191,210,146,149,95,37,150,26,174,238,24,165,3,41,226,115,191,62,201,146,230,19,245,148,183,72,45,33,229,240,172,236,89,182,230,65,228,53,56,54,66,75,247,234,224,27,110,31,22,40,133,220,211,243,133,97,179,129,51,183,216,106,188,23,217,99,56,239,143,1,2,31,5,85,234,133,3,106,85,137,75,205,183,141,174,55,58,56,24,163,70,133,78,124,12,84,98,23,230,181,36,232,235,65,182,71,244,53,207,251,77,166,41,62,48,168,112,70,64,206,208,242,213,1,61,177,220,152,41,82,247,16,21,85,209,88,82,23,140,28,179,243,7,254,201,183,194,115,251,130,110,69,35,179,9,58,201,91,145,107,191,72,51,217,135,112,47,173,55,41,246,176,61,86,255,3,237,25,185,161,177,20,33,113,174,14,123,189,82,106,157,149,111,60,236,199,30,75,90,148,146,0,173,99,24,200,108,103,62,93,137,172,158,127,11,56,219,144,185,25,75,75,119,36,47,104,152]

あとは出力形式整えるだけだ!

Related Posts

  • 2013年7月7日 [Haskell]PGMファイルを生成する part3 やりたいこと 昨日まででランダムな配列を作成することが出来るようになったから、 出力の形式を整えてPGMファイルを生成する。 プログラム foldrを使ってこんな感じで書いてみた。 実行するとこんな感じの内容のファイルができる。 […]
  • 2013年7月8日 [Haskell]PGMファイルを読み込む part1 やりたいこと HaskellでPGMファイルを生成することができたから、 今度は入力出来るようにしてみたい。 プログラム とりあえずヘッダーを読み込んで出力するところまで。 実行してみる。 Target I could output […]
  • 2013年7月9日 [Haskell]PGMファイルを読み込む part2 やりたいこと 昨日まででヘッダーは読み込めるようになったため、 今度はピクセルの情報を読みだす。 プログラム プログラムは以下の感じ。 入力画像 出力画像 うまくいっているみたいだ。 What I want to […]
  • 2013年7月5日 [Haskell]PGMファイルを生成する part1 やりたいこと 今後Haskellで画像処理をするためにPGMファイルを生成させてみる。 プログラム まずはヘッダを出力するところまで。 コンパイルして実行してみる。 What I want to do I'll output PGM […]
  • 2014年12月14日 [Haskell][XML][CompleteSuggestionAPI]HaskellでGoogle Complete Suggestion APIのXML形式の戻り値をパースする Target HaskellでGoogle Complete Suggestion APIの結果(XML)をパージングして、候補クエリの配列(の形をした文字列)を取得する。 Environment OSLinux […]
  • 2013年7月13日 [Haskell]画像処理 水平方向のエッジ やりたいこと 水平方向の微分で水平方向のエッジ画像を出力する。 プログラム プログラムはこんな感じ。 結果 入力画像 出力画像 Target Output horizontal edge image. Program […]
Pocket

You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.