بسبب المشروع، اضطررت إلى حفظ الصور في قاعدة البيانات وقراءتها من قاعدة البيانات عند الحاجة. في البداية، اعتقدت أن الأمر بسيط جدًا، وليس مجرد دفق، بل هو أيضًا بسيط جدًا هناك الكثير من الرموز، ولكن كلها مزالق!
قم بإلقاء نظرة على مصدر TImage. يوجد LoadfromStream وSavetoStream ضمن Picture.Graphic. إذا كنت قد خمنت بشكل صحيح، يمكنك فقط استخدام هاتين الوظيفتين. لذا، قمت بإجراء اختبار تجريبي
هناك صورتان TImages في العرض التوضيحي. يحتوي TImage1 على صورة، ثم يتم استخدام الكود لحفظ صورة TImage1 في Stream.TIImage2 ثم يتم إخراج الصورة من هذا الدفق بشكل طبيعي.
هذا هو الكود الخاص بي.
PicStream:=TMemoryStream.Create; Self.Image1.Picture.Graphic.SaveToStream(PicStream.Position:=0;
ولكن في الواقع، لقد ارتكب خطأً، لذا قمت بالبحث في بايدو مرارًا وتكرارًا وكانت النتيجة هي نفسها (لا أفهم سبب وجود الكثير من الرموز الإشكالية على الإنترنت. هل هذا بسبب الإصدارات المختلفة؟)
لذلك قمت بتتبع TPicture.Assign الخاص به لأنه إذا استخدمت TPicture.Assign مباشرة لنسخ Timage1، فلن يكون هناك خطأ.
الإجراء TPicture.Assign(Source: TPersistent);ابدأ إذا كان المصدر = nil ثم SetGraphic(nil) وإلا إذا كان المصدر هو TPicture ثم SetGraphic(TPicture(Source).Graphic) وإلا إذا كان المصدر TGraphic ثم SetGraphic(TGraphic(Source)) آخر موروث تعيين(مصدر);نهاية;
اتضح أنه عندما يستدعي Assign، فإنه سيتصل بـ SetGraphic لإنشاء كائن TGraphic.
لذلك، إذا كنت لا أزال أرغب في استخدام وظيفة Graphic.loadFromStream، فيجب أن أقوم بإنشاء كائن TGraphic يدويًا، وإلا فسيحدث خطأ ما بالتأكيد. علاوة على ذلك، يجب إنشاء TGraphic عن طريق استدعاء أنواع مختلفة وفقًا لتنسيقات الصور المختلفة إنه أمر مزعج أكثر من ذلك بقليل. لقد استخدمت كائن TJPEGImage، ويمكن للاتصال بـ LoadFromStream قراءة الدفق مباشرة، لذلك كنت كسولًا لفترة من الوقت.
Jpg:=TJPEGImage.Create; );
أنا لا أقرأ الكثير من الكتب. هذه المدونة غريبة أيها القراء، سأكتفي بها. لم أرغب في كتابة هذه المدونة في البداية، لكنني رأيت أنه لا يمكن استخدام رمز الموقع تحت D10 لذلك جعلت من نفسي أحمق.