मैं एक पीएनजी फ़ाइल लोड करने की कोशिश कर रहा हूं, असंपीड़ित आरजीबीए बाइट्स प्राप्त करें, फिर उन्हें gzip या zlib संकुल में भेजें।मैं एक आलसी बाइटस्ट्रिंग में एक (StorableArray (Int, Int) Word8) को कैसे परिवर्तित कर सकता हूं?
pngload पैकेज छवि डेटा को एक (StorableArray (Int, Int) Word8) देता है, और संपीड़न पैकेज आलसी बाइटस्ट्रिंग लेते हैं। इसलिए, मैं एक (StorableArray (Int, Int) Word8 -> बाइटस्ट्रिंग) फ़ंक्शन बनाने का प्रयास कर रहा हूं।
import qualified Codec.Image.PNG as PNG
import Control.Monad (mapM)
import Data.Array.Storable (withStorableArray)
import qualified Data.ByteString.Lazy as LB (ByteString, pack, take)
import Data.Word (Word8)
import Foreign (Ptr, peekByteOff)
main = do
-- Load PNG into "image"...
bytes <- withStorableArray
(PNG.imageData image)
(bytesFromPointer lengthOfImageData)
bytesFromPointer :: Int -> Ptr Word8 -> IO LB.ByteString
bytesFromPointer count pointer = LB.pack $
mapM (peekByteOff pointer) [0..(count-1)]
यह स्मृति से बाहर चलाने के लिए ढेर का कारण बनता है, तो स्पष्ट रूप से मैं कुछ बहुत गलत कर रहा हूँ:
अब तक, मैं निम्नलिखित की कोशिश की है। पीआरटी और विदेशी पीआरटी के साथ मैं और अधिक चीजें कोशिश कर सकता हूं, लेकिन वहां बहुत सारे "असुरक्षित" कार्य हैं।
यहां कोई भी सहायता की सराहना की जाएगी; मैं काफी स्टंप हूँ।
यह बहुत अच्छी तरह से काम करता है। सहायता के लिए धन्यवाद! –