Lekciya 11
.pdfLekciya-11. GUI ortalıǵında grafikalıq imkaniyatlar. Tuwrı sızıq hám hár túrli geometriyalıq
figuralardı sızıw komponentaları.
Jobası:
1.Visual C++ tiń grafik múmkinshilikleri
2.Graphics klası usılları tiykarında grafiklerdi dúziw
3.Tuwrı sızıq hám hár qıylı geometriyalıq figuralardı sızıw komponentaları
Gilt sózler: Qıya sızıq túrindegi massiv, striń, strlen(), sizeof(), strcpy(), strcat(), strstr(), strchr(), assign(), append(), resize(), insert(), delete(), add().
Visual C++ ózi grafikalıq strukturalı ortalıq bolıp esaplanadı. Grafikalıq degende qálegen zattı kompyuterde piksellerde payda etiw túsiniledi. Pikselde eki argumentleri bar, yaǵnıy koorlinatalari A (x, al) kórinisinde. Hár qanday IDE ortalıqlarda grafika menen islew múmkinshiligi bar. Olar túrlishe atalıwı múmkin. Biraq, olardıń ruchkası (qálemi) hám qálemi boladı. GUI kóriniste islew tolıq grafika menen baylanıslı bolıp, texnikanıń grafikalıq rejimde islewin támiyinleydi. Házirde derlik barlıq paydalanıwshılar grafikalıq múmkinshiliklerinen paydalanıp isleydi.
Visual C++tiń grafikalıq imkaniyatları. Grafikalıq múmkinshilikke iye bolǵan sistemalarǵa tiykarlanıp, noqat, sızıq, tórtmúyeshlik, sheńber, kóp múyesh sıyaqlı sırtqı kórinislerdi óz ishine aladı. GUI tiykarındaǵı barlıq elementlerge dıqqat menen qarasańız sol grafik strukturalardan ibarat boladı.
Visual C++ tiń imkaniyatların kóriw ushın Graphics klasına baylanısamız. Bul klasstıń atlar keńisligi System. Drawiń hám kitapxanası System. Drawiń. Common. dll bolıp esaplanadı.
Sızıw ushın GDI+ moduldı inkapsulyatsiya etedi jáne bul klasstan miyrasxor alıw múmkin emes. Bul klass MarshalByRefObject, IDisposable, System::Drawiń::IdeviceContextga tiykarlanǵan bolıp, Object → MarshalByRefObject → Graphics klasınıń miyrasxorı esaplanadı.
Grafika klası ekranǵa suwretlerdi sızıw usılların óz ishine alǵan. Grafika arnawlı bir qurılmanı kontekst penende xızmet etedi.
Grafikalıq obyekt járdeminde kóp túrli forma hám sızıqlar sızıw múmkin. Sızıqlar hám sırtqı kórinisler sızıw ushın arnawlı DrawGraphicalElement usıllardı úyreniw kerek. Bul usıllar DrawLine, DrawArc, DrawClosedCurve, DrawPolygon hám DrawRectańle óz ishine aladı. Sızıqlar hám sırtqı kórinisler sızıw ushın qálem járdeminde hám sırtqı kórinislerdi toltırıw ushın qálem járdeminde ámelge asırıladı.
1
Grafika klası imkaniyatları onıń qásiyetleri hám usıları arqalı kórsetip ótemiz. Sonıń jańa parametri kelse, oǵan da toqtalıp ótiledi.
12.1- Keste. Grafika klası qásiyetleri.
Qásiyeti |
Wazıypası |
|
|
|
|
|
Grafikanıń sızılǵan shegarasın shekleytuǵın shegaranı aladı |
|
Clip |
yamasa ornatadı. |
|
|
||
|
|
|
|
Grafikanıń kesiw shegarasın shegaralaytuǵın RectańleF |
|
ClipBounds |
dúzilisin aladı. |
|
|
||
|
|
|
CompositińM |
Kompozit súwretler sızıw jaǵdayın aladı yamasa ornatadı. |
|
ode |
|
|
|
Grafikaǵa sızılǵan kompozitsion súwretlerdiń kórsetiw |
|
CompositińQ |
sapasın ornatadı. |
|
uality |
||
|
||
|
|
|
DpiX |
Bul grafikanıń gorizontal ólshemin aladı. |
|
|
|
|
DpiY |
Bul grafikanıń vertikal ólshemin aladı. |
|
|
|
|
|
Bul grafikalar menen baylanıslı interpolyatsiya rejimin aladı |
|
Interpolation |
yamasa ornatadı. |
|
Mode |
||
|
||
|
|
|
|
Bul grafika kesiw salasın bos yamasa joq ekenligin kórsetip, |
|
IsClipEmpty |
bir baha aladı. |
|
|
||
|
|
|
|
Bul grafika anıq kesiw salasın bos yamasa joq ekenligin |
|
IsVisibleClip |
kórsetip, bir baha aladı. |
|
Empty |
||
|
||
|
|
|
|
Bul grafika ushın bet moduli hám birlik modulı ortasında |
|
PageScale |
shegarasın sazlaw. |
|
|
||
|
|
|
|
Bul grafika bet koordinataları ushın isletiletuǵın ólshem |
|
PageUnit |
birligi sazlaw. |
|
|
||
|
|
|
|
Bul grafika kórsetiw waqtında Piksel ofset qanday |
|
PixelOffsetM |
kórsetilgen baha sazlaw. |
|
ode |
||
|
||
|
|
|
RenderińOrig |
Bul grafika kórsetiw rejimin ornatadı. |
|
in |
|
|
SmoothińMo |
Grafikalar ushın kórsetiw sapasın aladı yamasa ornatadı. |
|
de |
|
|
TextContrast |
Tekst kórsetiw ushın gamma ma`nisin belgilew. |
|
|
|
2
|
Bul grafika menen baylanıslı tekst ushın kórsetiw rejimin |
|
TextRenderiń |
ornatadı. |
|
Hint |
||
|
||
|
|
|
|
Grafikalar ushın geometriyalıq ózgeriwiniń nusqasın aladı |
|
Transform |
yamasa ornatadı. |
|
|
||
|
|
|
|
Grafikdıń anıq kesiw salasın tegislew ushın tórtmúyúshlik |
|
VisibleClipB |
aladı. |
|
ounds |
||
|
||
|
|
Grafika klası usıları tómendegilerden ibarat:
1.AddMetafileComment(Byte[]) - Súwret metafaylına túsindirme qosadı. Bunda Byte[] Belgili massiv bolıp, <System::Byte> ^ data Tipiinde anıqlanadı hám mısalı, array<Byte>^metaCom = {(Byte)'T',(Byte)'e',(Byte)'s',(Byte)'t'}; sıyaqlı anıqlanıwı múmkin.
2.BeginContainer() - Grafikanıń házirgi jaǵdayı menen grafikalıq konteynerdi saqlaydı hám jańa grafikalıq konteynerdi ashadı hám isletedi.
BeginContainer(Rectańle, Rectańle, GraphicsUnit) - Grafikalıq ámeldegi jaǵdayı
menen bir grafikalıq konteyner saqlaydı, belgileńen parametrli ózgertiw menen jańa grafikalıq konteynerden paydalanadı hám ashadı. Bunda Rectańle tórtmúyesh bolıp,
Rectańle(0,0,200,200) sıyaqlı anıqlanadı. Birinshi tórtmúyesh konteyner ushın shkalanı hám ekinshisi konteyner ushın tarawdıń ózgeriwirin anıqlaydı. GraphicsUnit - konteyner ushın ólshem birligin anıqlaw ushın isletiledi.
Úshmúyeshlik sızıw. Bunda komponentanıń berilgen ornında, reńli sızıqlar arqalı úshmúyeshlik sızıwdı kóremiz. Onıń ushın 1 komponenta, 1 túyme hám 6 textBox komponentaların aynaǵa qolaylı etip jaylastıramız. Sebebi 3 sızıqtı birlestirsek, úshmúyeshlik payda boladı.
1- Qádem. Aynanıń Form1_Load Hádiysesinde tómendegi algoritmdı jaylastıramız.
this->Text = "DrawLine - úshmúyeshlik sızıw";
button1->Text = "SÍZÍW";
2-qádem. Komponenta hám textBox qásiyetlerin sazlaw ámellerdi orınlaw
Múmkin.
3-qádem. Sızıq sızıw ushın noqatlarǵa int myPoint[6]; ózgeriwshisin alamız.
4-qádem. Komponentanıń Paint degen hádiysesine tómendegu algoritmdi jaylastıramız.
3
myPoint[1], myPoint[2], myPoint[3], myPoint[4]); e->Graphics->DrawLine(System::Drawing::Pens::Black,
myPoint[3], myPoint[4], myPoint[5], myPoint[6]); e->Graphics->DrawLine(System::Drawing::Pens::Blue,
Ellips sızıw. Bunda komponentanıń berilgen ornında, reńli ellipis sızıwdı kóremiz. Onıń ushın 1 komponenta, 1 túyme hám 4 textBox komponentaların aynaǵa qolaylı etip jaylastıramız.
1-adım. Aynanıń Form1_Load hádiysesinde algoritmdi jaylastıramız.
this->Text = "Ellipse - sızıw";
button1->Text = "SÍZÍW";
2-adım. Komponenta hám textBox qásiyetlerin sazlaw ámellerdi orınlaw múmkin.
3-adım. Sızıq sızıw ushın noqatlarǵa int myPoint[4]; Ózgeriwshisin alamız.
4-adım. Komponentanıń Paint degen hádiysesine
jaylastıramız.
Pen ^ pen = gcnew Pen(Color::Black);
myPoint[1], myPoint[2], myPoint[3], myPoint[4]);
1- Súwret. DrawEllipse sızıw nátiyjesi.
Joqarıda keltirilgen sızıwlar arqalı basqa qálegen sırtqı kórinislerdi de sızıw múmkin. Túrli sırtqı kórinislerdi sızıp boyawdı kóremiz.
4
Túrli sırtqı kórinislerdi boyaw. Bunda komponentanıń berilgen ornında, boyalǵán formalardı sızıwdı kóremiz. Onıń ushın Brush – qálemnen paydalanıp, 1 komponenta, 1 label hám 1 Combox komponentaların aynaǵa qolaylı etip jaylastıramız.
1-adım. Aynanıń Form1_Load hádiysesinde tómendegi algoritmdı jaylastıramız.
this->Text = " Formanı boyaw "; label1->Text = " Kerekli formanı saylań:";
comboBox1->Text = " Sırtqı kórinisler ";comboBox1->Items->Add("Tórtmúyeshlik");
comboBox1->Items->Add("Ellipis"); comboBox1->Items->Add("Sheńber");
comboBox1->Items->Add("Sheńber");
2-adım. |
Komponenta |
va |
ComboBox qásiyetlerin Sazlaw |
ámellerin |
orınlaw múmkin. |
|
|
3-adım. |
ComboBox |
|
komponentasınıń |
comboBox1_SelectedIndex Changed hádiysesine tómendegi algoritmdi jaylastıramız.
Graphics ^grp = pictureBox1->CreateGraphics(); Brush ^ brsh = gcnew SolidBrush(Color::Green); grp->Clear(SystemColors::Control);
switch (comboBox1->SelectedIndex){ case 0:
grp->FillRectangle(brsh,50,50,150,150); break; case 1:
grp->FillEllipse(brsh,50,50,300,150); break; case 2:
grp->FillEllipse(brsh,50,50,150,150); break; case 3:
grp->FillPie(brsh,50,50,150,150,150,100); break;
5
2- Súwret. Túrli sırtqı kórinislerdi boyaq nátiyjesi.
Hádiyseler arqalı forma sızıw. Hámme "Paint" sıyaqlı programmalardı onıń eń
ájayıp qásiyetlerinen biri tıshqansha menen sızıqlar sızıw bolıp tabıladı. Bunı ámelge asırıw ushın komponenttiń tıshqansha menen islew "MousDown", ""MausUp" hám
"MouseMove" Hádiyselerinen paydalanıw múmkin. Programmanıń algoritmi ideyası tómendegishe: paydalanıwshı tıshqanshanıń shep túymesin basqanda kursor arqasına júdá kóp kishi kvadratlar sızıla baslaydı. Bul kvadratlar kólemi kodta kórsetilgen. Bunnan tısqarı, "Button" knopkasın suwretke túsiretuǵın formaǵa kóshiriwińiz kerek. Bunda komponentaniń berilgen ornında, tıshqansha hádiyseleri arqalı formalardı sızıwdı kóremiz. Onıń ushın Brush – qálemnen paydalanıp, 1 komponenta, 1 button komponentasın aynaǵa qolaylı etip jaylastıramız.
1-adım. Aynanıń Form1_Load hádiysesinde tómendegi algoritmdi jaylastıramız.
button1->Text = " Tazalaw ";
this->Text = " Forma sızıw ";
2-adım. Komponenta hám |
button qásiyetlerin sazlaw ámellerdi |
|||
orınlaw múmkin. |
|
|
|
|
3-adım. |
Button |
komponentasınıń |
button1_Click |
|
hádiysesinde |
tómendegi algoritmdı jaylastıramız. Bul algoritm |
komponentanı tazalaw ushın isletiledi.
Graphics ^ grp = pictureBox1->CreateGraphics();
grp->Clear(SystemColors::Window);
4-adım. Komponentanıń tıshqansha hádiyselerin qayta islew ushın
Logikalıq bir ózgeriwshi alınadı, onıń ma`nisi [0] bolsın. Bool Drow = false;
5-adım. Tıshqansha komponentanıń ústine kelip logikalıq Ózgeriwshiniń
6
mánisi 1 ge ózgeredi. Sebebi sızıwdı baslaw ushın. Bunı ámelge asırıw ushın
tıshqanshanıń pictureBox1_MouseDown hádiysesine Drow = true; di jazıp
qoyamız.
6-adım. Tıshqansha komponentanıń ústinen ketkende logikalıq ózgeriwshiniń mánisi 0 ge ózgeredi. Sebebi sızıwdı tamamlaw ushın. Bunı ámelge asırıwsh ushın tıshqanshaniń pictureBox1_MouseUp hádiysesine Drow= false; ni jazıp qoyamız.
7-adım. Tıshqansha |
komponentanıń ústinde kelip sızıwı ushın |
tómendegi algoritmdı kiritemiz. |
|
Graphics^ graf = pictureBox1->CreateGraphics(); if (Drow == true){
graf->FillEllipse(Brushes::Violet, e->X, e->Y, 3,3); // Qálem qalıńlıǵı
Algoritmde formalardı payda etiw ushın júdá kishi |
ellipislardan |
paydalanamız.
3- Súwret. Tıshqansha menen túrli sırtqı kórinislerdi sızıw.
Súwretlerdi ózgertiw. Onıń ushın fayllardı júklew openFiledialog hám fayllardı saqlaw saveFiledialog komponentalarınan paydalanamız. Onıń ushın
Brush - qáelemnen paydalanıp, 1 komponenta, 3 button komponentasın Aynaǵa qolaylı etip jaylastıramız. Buttonlardıń birinshisi, súwretti redaktorlawdı
7
tazalawdı ámelge asıradı, ekinshisi, redaktorlawdan súwretti saqlaw ushın, úshinshisi, súwretti redaktorlaw ushın júklewdi ámelge asıradı. using namespace System::Drawing::Drawing; di qosıp qoyıw kerek.
1-adım. Súwretlerdi ózgertiw ushın isletiletuǵın ózgeriwshilerdi járiyalaymız.
private: Bitmap ^ bmp_for_draw;
private: Point start_point; private: bool Draw; public: Pen^ pen_for_draw;
private: String ^ full_name_of_image;
2-adım. Programma aynasınıń Form1_Load hádiysesine dáslepki sazlamalardı ornatamız.
this->Text = " Súwretti redaktorlaw "; button1->Text = " Tazalaw "; button2->Text= " Súwretti saqlaw "; button3->Text = " Súwretti júklew ";
pen_for_draw = gcnew Pen(Color::Black, 4);
Bunda komponentalardı sazlaw hám bir qálemdi jaratıp alıw, onıń StartCap, EndCap qásiyetlerin ornatıw ámelge asırıladı.
3-adım. Komponenttegi súwretti tazalaw ushın button1_Click hádiysege algoritmdı jazamız.
Graphics^ grp = pictureBox1->CreateGraphics();
grp->Clear(SystemColors::Window);
4-adım. Tıshqansha komponentanıń ústinde kelip sızıwı ushın
pictureBox1_MouseDown Hádiysesine tómendegi algoritmdı kiritemiz
if (e->Button == System::Windows::Forms::MouseButtons::Left){ Draw = true;
start_point = e->Location;
5-adım. Tıshqansha komponentanıń ústine ketkende sızıwdı toqtatıw ushın pictureBox1_MouseUp hádiysesine tómendegi algoritmdı kiritemiz
8
if (e->Button == System::Windows::Forms::MouseButtons::Left){
Draw = false;
6-adım. Komponentaga kerekli |
súwretti júklew ushın |
button3_Click |
|
Hádiysesine tómendegi algoritm jazıladı: |
|
OpenFileDialog ^ open_dialog = gcnew OpenFileDialog();
open_dialog->Filter = "Image Files(*.BMP;*.JPG;*.GIF;*.PNG)|*.BMP;*.JPG;*.GIF;*.PNG|All files (*.*)|*.*";
if (open_dialog->ShowDialog() == System::Windows::Forms::DialogResult::OK){
full_name_of_image = open_dialog->FileName; bmp_for_draw = gcnew Bitmap(open_dialog->FileName);
//pictureBox1->Size = bmp_for_draw->Size;
pictureBox1->SizeMode = PictureBoxSizeMode::StretchImage; pictureBox1->Image = bmp_for_draw;
>Invalidate();
} catch(Exception^ e) {
System::Windows::Forms::DialogResult rezult = MessageBox::Show("Tańlanǵan fayl
Bundagi |
asosi nuqson shundan |
iboratki, agar rasmniń |
o'lchamlari |
komponentaniń ólshemleri menen birdey bolsa, jaqsı sızadı, birdey bolmasa, paydalanıwshı ekranınıń proporsiyasini alıp sızadı.
7-adım. Komponentadaǵı súwretti saqlaw ushın button2_Click hádiysesine tómendegi algoritm jazıladı
9
if (pictureBox1->Image != nullptr){
String ^format = full_name_of_image->Substring(full_name_of_image->Length - 4, 4); SaveFileDialog ^savedialog = gcnew SaveFileDialog();
savedialog->Title = "Rasmni saqlash ..."; savedialog->OverwritePrompt = true; savedialog->CheckPathExists = true;
savedialog->Filter = "Image Files(*.BMP)|*.BMP|Image Files(*.JPG)|*.JPG|Image Files(*.GIF)|*.GIF|Image Files(*.PNG)|*.PNG|All files (*.*)|*.*";
savedialog->ShowHelp = true;
// If selected, save
if (savedialog->ShowDialog() == System::Windows::Forms::DialogResult::OK){ try{
8-adım. Tıshqancha |
komponentanıń ústine kelip sızıwı ushın |
tómendegi algoritmdı kiritemiz:
if (e->Button == System::Windows::Forms::MouseButtons::Left){ Graphics ^graf = Graphics::FromImage(pictureBox1->Image);
graf->DrawLine(pen_for_draw, start_point, e->Location); start_point = e->Location;
>Invalidate();
Programmanı isletkende tómendegi ayna shıǵadı.
10