GDI+ - Antarmuka Perangkat Grafis Generasi Berikutnya
Semua aplikasi antarmuka pengguna grafis (GUI) berinteraksi dengan perangkat keras (monitor, printer, pemindai), yang dapat direpresentasikan sebagai data yang dapat dibaca. Namun, aplikasi tidak berkomunikasi langsung dengan perangkat, jika tidak, kode antarmuka pengguna yang berbeda harus ditulis untuk setiap perangkat. Untuk menghindari duplikasi pekerjaan ini, kita dapat menggunakan komponen ketiga antara aplikasi dan perangkat. Komponen ini akan mengkonversi dan mentransfer data yang dikirim ke perangkat, dan data yang dikirim oleh perangkat ke program. Dan komponen ini adalah GDI+. GDI+ adalah pintu masuk untuk berinteraksi dengan perangkat grafis di .NET Framework. GDI+ adalah sekumpulan kelas C++ yang terletak di perpustakaan kelas bernama Gdiplus.dll. Gdiplus.dll adalah komponen bawaan pada sistem operasi Windows XP dan Windows Server 2003. Oke, saya tidak akan membuang banyak waktu untuk membicarakan hal-hal akademis di sini. Mari kita gunakan GDI+ untuk menggambar di Formulir Web.
Anda pasti pernah melihat gambar seperti ini. Tentu saja gambar ini tidak standar. Kodenya diposting di sini.
ruang nama Sky_MsdnDataGrid
{
menggunakan Sistem;
menggunakan Sistem.Koleksi;
menggunakan Sistem.ComponentModel;
menggunakan Sistem.Data;
menggunakan Sistem.Gambar;
menggunakan System.Drawing.Imaging;
menggunakan Sistem.Web;
menggunakan Sistem.Web.SessionState;
menggunakan Sistem.Web.UI;
menggunakan Sistem.Web.UI.WebControls;
menggunakan Sistem.Web.UI.HtmlControls;
/// <ringkasan>
/// Ringkasan deskripsi AspxChart.
/// </ringkasan>
AspxChart kelas publik : Sistem.Web.UI.Page
{
bitmap Bitmap pribadi;
grafik grafis pribadi;
pribadi int[] arrValues;
string pribadi[] arrValueNames;
private void Page_Load(pengirim objek, System.EventArgs e)
{
arrValues = int baru[6];
arrValueNames = string baru[6];
arrValues[0] = 100;
arrValues[1] = 135;
arrNilai[2] = 115;
arrNilai[3] = 125;
arrNilai[4] = 75;
arrValues[5] = 120;
arrValueNames[0] = "Januari";
arrValueNames[1] = "Februari";
arrValueNames[2] = "Maret";
arrValueNames[3] = "April";
arrValueNames[4] = "Mei";
arrValueNames[5] = "Juni";
ini.Init_Bitmap();
ini.Draw_Rectangle();
ini.Draw_Pie();
//Simpan gambar yang digambar dalam format Gif ke aliran keluaran respons halaman saat ini
bitmap.Simpan(ini.Respon.OutputStream,ImageFormat.Gif);
}
/// <ringkasan>
/// Melakukan tindakan awal pada bitmap yang akan digambar (dapat dibayangkan sebagai kanvas)
/// </ringkasan>
kekosongan pribadi Init_Bitmap()
{
bitmap = Bitmap baru(400.200);
grafik = Grafik.FromImage(bitmap);
grafis.Jelas(Warna.Putih);
grafis.DrawString("Penjualan Perusahaan
}
#region Kode dihasilkan oleh alat desain Formulir Web
ganti void OnInit yang dilindungi (EventArgs e)
{
//
// CODEGEN: Ini adalah panggilan yang diperlukan oleh alat desain Formulir Web ASP.NET.
//
Inisialisasi Komponen();
base.OnInit(e);
}
/// <ringkasan>
/// Metode ini diperlukan untuk dukungan alat desain - jangan gunakan editor kode untuk memodifikasinya
/// Isi dari metode ini.
/// </ringkasan>
kekosongan pribadi InitializeComponent()
{
this.Load += Sistem baru.EventHandler(ini.Page_Load);
}
#wilayah akhir
/// <ringkasan>
/// Gambarlah sebuah persegi panjang di kanvas
/// </ringkasan>
kekosongan pribadi Draw_Rectangle()
{
ke dalam aku;
Simbol PointFKaki = PointF baru(335,20);
DescLeg PointF = PointF baru(360,16);
untuk (i = 0; i < arrValueNames.Panjang; i++)
{
grafis.FillRectangle(SolidBrush baru(GetColor(i)),symbolLeg.X,symbolLeg.Y,20,10);
grafis.DrawRectangle(Pena.Hitam,simbolLeg.X,simbolLeg.Y,20,10);
grafis.DrawString(arrValueNames[i].ToString(),Font baru("Badan Detil Baru",8),Brushes.Black,descLeg);
simbolKaki.Y += 15;
descLeg.Y += 16;
}
untuk (i = 0; i < arrValues.Panjang; i++)
{
grafis.FillRectangle(SolidBrush baru(GetColor(i)),(i*35) + 15.200 - arrValues[i],20,arrValues[i]);
grafis.DrawRectangle(Pena.Hitam,(i*35) + 15.200 - arrValues[i],20,arrValues[i]);
}
}
/// <ringkasan>
/// Gambarlah bentuk pai di kanvas
/// </ringkasan>
kekosongan pribadi Draw_Pie()
{
ke dalam aku;
// currentangle mewakili sudut saat ini totalangle mewakili sudut maksimum nilai total mewakili penjualan maksimum
float sglCurrentAngle = 0, sglTotalAngle = 0, sglTotalValues = 0;
// Hitung penjualan maksimum
untuk (i = 0; i < arrValues.Panjang; i++)
sglTotalValues += arrValues[i];
untuk (i = 0; i < arrValues.Panjang; i++)
{
// Nilai sudut bulan ini: penjualan bulan ini / penjualan maksimum * 360
sglCurrentAngle = arrValues[i] / sglTotalValues * 360;
grafis.FillPie(SolidBrush baru(GetColor(i)),240,95,100,100,sglTotalAngle,sglCurrentAngle);
grafis.DrawPie(Pena.Hitam,240,95,100,100,sglTotalAngle,sglCurrentAngle);
sglTotalAngle += sglCurrentAngle;
}
}
Fungsi Pembantu #region
Warna GetColor pribadi (int indeks item)
{
Warna warna;
beralih (Indeks item)
{
kasus 0:
warna = Warna.Biru;
merusak;
kasus 1:
warna = Warna.Merah;
merusak;
kasus 2:
warna = Warna.Kuning;
merusak;
kasus 3:
warna = Warna.Ungu;
merusak;
kasus 4:
warna = Warna.Oranye;
merusak;
kasus 5:
warna = Warna.Coklat;
merusak;
bawaan:
warna = Warna.Biru;
merusak;
}
mengembalikan warna;
}
#wilayah akhir
}
}