Karena sebuah proyek, saya harus menyimpan gambar ke database dan membacanya dari database saat diperlukan. Awalnya saya pikir itu sangat sederhana, bukan hanya Stream itu, ada banyak kode, tapi, semuanya jebakan!
Lihatlah sumber TImage. Ada loadfromStream dan SavetoStream di bawah Picture.Graphic. Jika tebakan Anda benar, Anda bisa menggunakan dua fungsi ini
Ada dua TImage dalam demo. TImage1 berisi gambar, dan kemudian kode tersebut digunakan untuk menyimpan gambar TImage1 ke Stream.TImage2 dan kemudian mengambil gambar dari Stream ini.
Ini kode saya.
PicStream:=TMemoryStream.Buat; Self.Image1.Picture.Graphic.SaveToStream(PicStream.Position:=0;
Tapi nyatanya dia membuat kesalahan. Jadi saya mencari di Baidu lagi dan lagi. Hasilnya sama (Saya tidak mengerti mengapa ada begitu banyak kode yang bermasalah di Internet. Apakah karena versinya berbeda?)
Jadi saya lacak TPicture.Assign nya karena kalau langsung pakai TPicture.Assign untuk copy Timage1 tidak ada error.
prosedur TPicture.Assign(Sumber: TPersistent);mulai jika Sumber = nil lalu SetGraphic(nil) lain jika Sumber adalah TPicture maka SetGraphic(TPicture(Source).Graphic) lain jika Sumber adalah TGraphic maka SetGraphic(TGraphic(Source)) else diwarisi Tetapkan(Sumber);akhir;
Ternyata saat dia memanggil Assign, dia akan memanggil SetGraphic untuk membuat objek TGraphic.
Oleh karena itu, jika saya masih ingin menggunakan fungsi Graphic.loadFromStream, saya harus membuat sendiri objek TGraphic secara manual. Jika tidak, pasti ada yang tidak beres. Selain itu, TGraphic harus dibuat dengan memanggil ClassType yang berbeda sesuai dengan format gambar yang berbeda sedikit merepotkan. Dan saya menggunakan objek TJPEGImage, dan memanggil LoadFromStream-nya dapat langsung membaca Stream, jadi saya malas untuk sementara waktu.
Jpg:=TJPEGImage.Create; PicStream:=TMemoryStream.Create; Self.Image1.Picture.Graphic.SaveToStream(PicStream); );
Saya tidak membaca banyak buku. Blog ini aneh. Pembaca, saya akan puas saja. Awalnya saya tidak ingin menulis blog ini. Tetapi saya melihat bahwa kode situs web tidak dapat digunakan di bawah D10 .Jadi aku membodohi diriku sendiri.