haskell - 文件.BMP:分析和转换
问题描述
我的目标是能够分析和转换专注于颜色矩阵的图形文件。
- 操作 Word8 或 Integer 矩阵更好吗?
- 我们还能如何从 ByteString 切换到二维矩阵?
- 使用的程序是最有效的吗?
?
bmpToMatrix :: FilePath -> IO (Matrix [Integer])
bmpToMatrix input = do
Right bmp <- readBMP input
let rgbas = unpackBMPToRGBA32 bmp
(width, height) = bmpDimensions bmp
integers = BS.foldr ((:) . toInteger) [] rgbas
return $ MT.fromList height width $ SP.chunksOf 4 integers
bmpEdit :: (Matrix [Integer] -> Matrix [Integer]) -> FilePath -> FilePath -> IO ()
bmpEdit f input output = do
matrix <- bmpToMatrix input
let matrix' = f matrix
matrixToBMP output matrix'
matrixToByteString :: Matrix [Integer] -> ByteString
matrixToByteString = BS.pack . L.concatMap (L.map fromIntegral) . MT.toList
matrixToBMP :: FilePath -> Matrix [Integer] -> IO ()
matrixToBMP output mt =
writeBMP output $ packRGBA32ToBMP (ncols mt) (nrows mt) $ matrixToByteString mt
解决方案
推荐阅读
- r - 如何使用 tidyverse map 在 R 中迭代过滤和写入 csv
- javascript - 使用 TestCafe 发出真正的 HTTP 请求
- r - 如何根据列值分配组
- python - 在 Python 版本 2.7.5 中未指定长度的文件记录末尾附加空格
- php - 如何在 PHP 中创建除数数组?
- php - 将字符串数据写入数组
- c# - DOTNET Core 迁移问题
- python - 来自文件路径和标签的 csv 的 Pytorch 数据加载器
- java - 为 NON PLAY STORE APP 创建 CHECK_FOR_UPDATE 机制的最佳方法是什么
- python - 如何在 Pandas DataFrame 中取值两侧的平均值?