gpt4 book ai didi

haskell - Haskell 中的 PNG 到 BMP(用于光泽度)

转载 作者:行者123 更新时间:2023-12-02 21:24:29 25 4
gpt4 key购买 nike

我有 PNG 文件和 the Gloss library有一个用于PictureBitmap 构造函数。由于文件类型的原因,我无法使用 loadBMP::FilePath -> IO Picture,因此我正在搜索如何加载 PNG 文件,将其转换为 BMP,并将其提供给 bitmapOfBMP::BMP -> PicturebitmapOfForeignPtr::Int -> Int ->foreignPtr Word8 -> Bool -> PicturebitmapOfByteString::Int -> Int -> ByteString -> bool -> 图片.

<小时/>

使用 JuicyPixels 进行测试

import Data.ByteString as B
import System.IO as A

import Codec.Picture.Png
import Graphics.Gloss.Interface.Pure.Game


main = do
png <- B.readFile "samus.png"
let img = decodePng png
case img of
Left x -> A.putStrLn x
Right x -> do
let bmp = encodeDynamicPng x
case bmp of
Left x -> A.putStrLn x
Right x -> do
let pic = bitmapOfByteString 29 52 x True
game pic

game pic
= play
(InWindow "Test" (700, 500) (10, 10))
white
30
pic
draw
(const id)
(const id)

draw bmp
= bmp

一切都成功了,但图像完全不一样。

最佳答案

这就是我制作 JuicyPixel-repa 的原因。您将图像作为 Repa 数组读取并进行转换,就像我在 gloss-osm 中所做的那样,到图片:

repaToPicture :: Bool -> Array F.F DIM3 Word8 -> (Int, Int, Picture)
repaToPicture b arr =
let fptr = F.toForeignPtr arr
bs = BI.fromForeignPtr fptr 0 len
in (col, row, bitmapOfByteString row col bs b)
where
len = row * col * depth
(Z :. row :. col :. depth) = extent arr

或者,您可以直接使用 JuicyPixels,覆盖 DynamicImage 类型,并从包含的 Image 中获取底层 imgData

关于haskell - Haskell 中的 PNG 到 BMP(用于光泽度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12222728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com