Saya sudah lama tidak menulis apa pun, bukan karena saya menderita banyak tomat dan telur di postingan saya sebelumnya, tetapi karena saya benar-benar tidak punya sesuatu yang nyata untuk ditulis untuk referensi semua orang. Namun baru-baru ini ketika saya sedang membantu seorang teman dalam sebuah proyek, saya menemukan proses sederhana pemrosesan gambar di Delphi, jadi saya terus mencari informasi di Internet dan melihat melalui postingan csdn sebelumnya. Dari hasil pencarian saya, saya menemukan banyak orang apakah saya akan menemui masalah pemrosesan gambar serupa di berbagai proyek, tetapi sebagian besar jawabannya sepertinya tidak lengkap (karena banyak yang belum diposting, atau mungkin karena kebiasaan pribadi. Haha, saya harap setelah membaca artikel ini milik saya, semua orang dapat mulai mengerjakannya di rumah. Jadi saya menulis masalah dan solusi yang saya temui di bawah ini untuk referensi Anda. Pada saat yang sama, Anda dipersilakan untuk terus membuat batu bata.
Saya perlu menuliskan masalah yang ingin saya selesaikan sebelum konten formal, dan juga memberikan posisi yang baik kepada pembaca agar mereka tidak terganggu oleh buruknya penanganan saya terhadap masalah tersebut. Masalah utama yang harus diselesaikan di sini adalah memutar gambar yang dipindai dengan pemindai 90 derajat di Delphi untuk mendapatkan gambar yang sesuai untuk digunakan, dan karena ukuran gambar tidak dapat ditangkap dengan benar, gambar hanya perlu diperbesar skalanya. Dan solusi saya sepenuhnya didasarkan pada persyaratan ini, karena saya tidak terlalu memikirkan efisiensi dan kejelasan setelah pemrosesan gambar, dan keuntungannya adalah programnya terlihat sangat sederhana.
Pertama-tama, saya tidak memiliki pemindai, jadi saya tidak tahu format gambar apa yang diperoleh dengan menggunakan pemindai (sudah disediakan), dan di bantuan Delphi tertulis "Bitmap adalah objek grafis yang kuat yang digunakan untuk membuat , memanipulasi (menskalakan, menggulir, memutar, dan melukis), dan menyimpan gambar dalam memori dan sebagai file pada disk", jadi langkah pertama saya adalah mengubah irisan saya menjadi TBitmap untuk diproses. Saat mengonversi format, saya mengubah ukuran sebenarnya gambar agar sesuai dengan kebutuhan pemilihan bagian gambar nanti. Fungsinya adalah sebagai berikut:
Prosedur TMainForm.ChangeImageFormate;
var Bitmap : TBitmap;
Perbesar: Bilangan Bulat;
mulai
Bitmap := TBitmap.Buat;//1
mencoba
dengan ImageCert dimulai
Bitmap.Assign(Gambar.Grafik);//2
Gambar := nihil;//3
Zoom := Maks(Lebar div Bitmap.Lebar, Tinggi div Bitmap.Tinggi)+1;//4
Lebar := Bitmap.Lebar div Zoom;//5
Tinggi := Bitmap.Tinggi div Zoom;//6
Canvas.StretchDraw(Persegi(0,0,Lebar,Tinggi),Bitmap);//7
akhir;
Akhirnya
Bitmap.Gratis;
akhir;
akhir;
Menurut saya kode ini tidak terlalu rumit. ImageCert adalah kontrol TImage yang ditempatkan pada Formulir. Satu-satunya hal yang mungkin asing adalah kalimat kedelapan, tetapi Anda bisa mendapatkan banyak penjelasan dari bantuan Delphi . (Saran saya adalah membaca bantuan lebih lanjut). Pada saat yang sama, perlu diperhatikan bahwa kalimat ketiga sangat penting. Jika Anda menghapus kalimat ini dan format gambar Anda bukan bmp, kesalahan "Hanya bitmap yang dapat dimodifikasi" akan muncul.
Langkah kedua adalah mewujudkan rotasi gambar, karena program hanya memerlukan rotasi 90 derajat setiap kali, sehingga lebih mudah untuk ditangani di sini. Cara pengolahannya adalah dengan mengganti sesuai piksel. Proses implementasinya adalah sebagai berikut:
prosedur TMainForm.RotateImage;
var x,y : Bilangan bulat;
TmpBitMap : TBitmap;
mulai
TmpBitMap := TBitmap.Buat;
mencoba
TmpBitMap.Assign(ImageCert.Picture.Graphic);
dengan ImageCert dimulai
Gambar.Bitmap.Tinggi := TmpBitMap.Lebar;
Gambar.Bitmap.Lebar := TmpBitMap.Tinggi;
untuk x:=0 hingga Tinggi do
untuk y:=0 hingga Lebar lakukan
Canvas.Pixels[TmpBitMap.Height-x,y] := TmpBitMap.Canvas.Pixels[y,x];
Tinggi := TmpBitMap.Lebar;
Lebar := TmpBitMap.Tinggi;
akhir;
Akhirnya
TmpBitMap.Gratis;
akhir;
akhir;
Tidak banyak yang perlu dibicarakan dalam program ini, tetapi beberapa pengaturan tinggi dan lebar membuat saya sangat kesal. Saya selalu merasa perlu melakukan sesuatu yang lebih, tetapi saya tidak dapat menghapus baris apa pun cobalah. Akan lebih baik jika Anda memberi tahu saya hasilnya. Dan dalam hal ini, karena TImage dan TBitmap memiliki kanvasnya sendiri, mana yang akan digunakan mungkin layak untuk dipelajari, namun karena keterbatasan waktu, saya belum mencobanya.
Sedangkan untuk bagian proses pengambilan gambar, saya menggunakan TShape, lalu mengatur gaya kuas menjadi bsclear, dan mengatur posisi TShape di onMouseMove dari ImageCert. Ini tidak terlalu sensitif karena ketika mouse berada di TShape Tidak akan mempunyai dampak apa pun, namun untungnya dampaknya kecil. Pada saat yang sama, saya mengambil beberapa gambar di bawah TShape di acara OnMouseDown TShape. Saat ini, jika gambar Anda belum diperbesar, Anda akan menemukan bahwa gambar yang dihapus tidak sesuai dengan posisi yang kita lihat (tentu saja, ketika TImage tidak menampilkan ukuran gambar dengan benar).