Класе за рад са сликама¶
У програмском језику C#, рад са сликама и графиком олакшан је GDI+ библиотеком, која пружа класе за манипулацију сликама, њихово приказивање и уређивање. Две кључне класе у овој области су:
класа
Image, апстрактна класа која дефинише основни модел за рад са сликама, икласа
Bitmap, поткласа класеImage, која омогућава рад са растерским сликама.
Апстрактна класа Image¶
Класа Image представља основну апстракцију за рад са сликама у .NET-у. Као
апстрактна класа, не може се инстанцирати директно, већ се користи као основа
за друге класе, попут класа Bitmap и Metafile. Класа Image садржи више
метода и својстава за рад са сликама, међу којима су најзначајнији:
Width, враћа ширину слике у пикселима,Height, враћа висину слике у пикселима,Size, враћа димензије слике (ширина × висина),Save(), чува слику у датом формату (JPEG, PNG, BMP итд),FromFile(), учитава слику из фајла и враћаImageобјекат,RotateFlip(), ротира и/или обрће слику,Clone(), креира копију слике и др.
Сва својства и методе класе Image из именског простора
System.Drawing
можеш пронаћи у
званичној документацији.
Она пружа основну функционалност за учитавање, чување и манипулацију сликама у
различитим форматима, као што су BMP, JPEG, PNG, GIF и TIFF. Учитавање слика
могуће је из датотека, стримова или других ресурса. Подржава добијање основних
информација о слици, као што су висина, ширина, формат, резолуција и др.
Омогућава и промену формата слике и чување у различитим форматима, а подржава
основне трансформације слика, попут ротирања и промена величине.
Пошто класа Image имплементира интерфејс IDisposable, њене објекте је
потребно ослободити након употребе. То можеш урадити ручно позивањем Dispose()
методе или коришћењем using блока, што је препоручен начин.
Пример коришћења класе Image може да буде Windows Forms апликација којом се
учитава и приказује слика из фајла slika.jpg на форми:
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics g = e.Graphics;
using (Image img = Image.FromFile("slika.jpg"))
{
g.DrawImage(img, 10, 10, img.Width, img.Height);
}
}

Метод FromFile() баца изузетак ако фајл не постоји, па је добро у реалним
програмима користити обраду изузетака.
Класа Bitmap¶
Класа Bitmap је конкретна имплементација класе Image и омогућава рад са
растерским сликама. Ова класа омогућава приступ и манипулацију појединачним
пикселима слике и омогућава измену садржаја слике:
SetPixel(), на датој координати поставља пиксел одређене боје,GetPixel(), враћа боју пиксела на датој координати,Clone(), креира копију дела слике,LockBits()иUnlockBits(), омогућава бржи приступ пикселима коришћењем меморијског закључавања (закључавања у системској меморији) и др.
Сва својства и методе класе Bitmap из именског простора
System.Drawing
можеш пронаћи у
званичној документацији.
И објекти класе Bitmap користе системске ресурсе, па је препоручљиво
користити using или ручно позвати Dispose() за ослобађање ресурса:
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
using (Bitmap bmp = new Bitmap(300, 300))
{
for (int x = 0; x < 300; x++)
{
for (int y = 0; y < 300; y++)
{
int red = (x * 255) / 300;
int green = (y * 255) / 300;
bmp.SetPixel(x, y, Color.FromArgb(red, green, 128));
}
}
e.Graphics.DrawImage(bmp, 50, 50);
}
}

У овом примеру се креира градијент боја где се интензитет црвене и зелене
компоненте мења у зависности од координата пиксела, док је плава фиксирана.
За веће слике и интензивну обраду пиксела, методе SetPixel() и GetPixel()
могу да буду веома споре. У таквим случајевима ефикасније је користити методе
LockBits() и UnlockBits() за директан приступ меморији слике.
Значи, класа Bitmap јесте одлична класа за рад са растерском графиком у
програмском језику C#, која омогућује манипулацију сликама, обраду пиксела и
цртање, али захтева пажљиво управљање меморијом због коришћења системских
ресурса.