पर बिटमैप्स लिखना/पढ़ना मैंने खोजा और खोजा है और ऐसा कुछ भी नहीं ढूंढ रहा है जो वर्णन करता है कि मैं डेल्फी कोड में क्या करना चाहता हूं। सोल्यूटीन कभी-कभी नज़दीक होते हैं लेकिन मुझे पता लगाने के लिए पर्याप्त नहीं होते हैं। तो यहां मैं पूछ रहा हूं ..एक tfilestream
मेरे पास कई बिटमैप हैं जो मैं स्क्रीनशॉट से पुनः सहेज रहा हूं। मैं जो कर रहा हूं वह bitmaps_001.bmp पर सहेज रहा है, लेकिन इसमें बहुत अधिक संग्रहण स्थान लगता है, इसलिए मैंने नियमित रूप से bitmaps_001.png के रूप में सहेजने के लिए अपग्रेड किया, और यह और भी अधिक जगह बचाता है, लेकिन अब मैं एक फ़ाइल को सहेजना चाहता हूं, एक tfilestream, और एक tprogressbar का उपयोग कर इसे से पढ़ा है कि मैं स्क्रीन पर छवियों के रूप में बाएं/दाएं खींच सकते हैं।
मूल रूप से, मैं निम्नलिखित पूरा करने के लिए कोशिश कर रहा हूँ:
procedure SaveBMPtoStream(st: tfilestream; bmp: tbitmap);
procedure ReadBMPfrStream(st: tfilestream; bmp: tbitmap; bnum: integer);
अब तक कोड (नीचे)
काम करता है के रूप में है, (यह लिखते हैं और एक tbutton की प्रेस में एक बिटमैप छवि में पढ़ता है), लेकिन मैं केवल एक बिटमैप छवि लिख सकते हैं। मुझे रीयलटाइम में tfilestream के लिए आवश्यक प्रति सत्र जितनी छवियां लिखनी होंगी, संभवतः एक टीटीमर नियंत्रण का उपयोग करके और जब तक मैं स्टॉप tbutton दबाता हूं तब तक इसे कई छवियों को लिखने दें। इसे हल करने के लिए नीचे दिए गए कोड को संशोधित करने के लिए मैं क्या कर सकता हूं? धन्यवाद।
मैं विंडोज एक्सपी चला रहा हूं, एनटीएफएस फाइल सिस्टम के साथ बाहरी यूएसबी 3.0 1 टीबी ड्राइव से जुड़ा हुआ है।
type
TMS = TFileStream;
var
MS: TMS;
pos: int64; // bnum for 0-99,999 images.
sz: integer; // size of the image/stream ?
//write bitmaps to stream
procedure SaveBMPtoStream(ms: TMS; Bmp: TBitmap; bnum: integer);
begin
// create (or append to) stream
if fileexists('d:\streams\s.stm') then MS := TFileStream.Create('d:\streams\s.stm', fmOpenReadWrite)
else MS := TFileStream.Create('d:\streams\s.stm', fmCreate);
//sz:=MS.Size; pos:=ms.Position;
bmp.SaveToStream(MS);
// free stream
ms.free;
end;
//read bitmaps from stream
procedure ReadBMPfrStream(ms: TMS; Bmp: TBitmap; bnum: integer);
begin
// open stream.
MS := TFileStream.Create ('d:\streams\s.stm', fmOpenReadWrite);
// read in bitmap from stream
//sz:=MS.Size; pos:=ms.Position;
bmp.LoadFromStream(MS);
// free stream
ms.free;
end;
आपके पास कुछ प्रतिलिपि/पेस्ट त्रुटियां हैं (?), जैसे प्रकार टीएमएस: TFileStream; '। ;) यदि जानकारी सत्रों में लगातार नहीं रहती है, तो आप शायद बिटमैप नंबर - स्ट्रीम स्थिति/आकार का एक अलग इंडेक्स रख सकते हैं और उस भाग को पढ़ने के लिए अस्थायी स्ट्रीम में कॉपी कर सकते हैं। अन्यथा, आप स्ट्रीम से बिटमैप जानकारी शीर्षलेखों को स्ट्रीम से अग्रेषित करने के लिए स्ट्रीम से अग्रेषित कर सकते हैं और फिर फिर से कॉपी कर सकते हैं, या एप्लिकेशन की शुरुआत में एक ही तरह से इंडेक्स बना सकते हैं। लेकिन उत्तरार्द्ध अधिक काम होगा। –
ओह, वह एक टाइपो था। अभी ठीक किया गया धन्यवाद। – johnm2
जहां आप देखते हैं (//sz:=MS.Size; pos: = ms.Position;) मैं उन्हें कोशिश करते समय विभिन्न स्थानों पर कोड स्निपेट के कुछ हिस्सों का शोध कर रहा था। यह सब मेरे लिए भ्रमित है और मैं इसे समझने के लिए प्रतीत नहीं कर सकता। यह मेरे सिर पर है, लेकिन मुझे इसे सब कुछ समझने की ज़रूरत है, इसलिए मैं अभी भी महीनों में हूं। यही कारण है कि मैं जवाब पाने के लिए यहां आया था। लेकिन अभी भी कोई नहीं। तो, मैं खोज रखता हूँ। कोशिश करने के लिए शुक्रिया। – johnm2