23 Ağustos 2017 Çarşamba

Bitmap Sınıfı

Giriş
Şu satırı dahil ederiz.
using System.Drawing;
Image Sınfından kalıtır.

Constructor
Boş bitmap şöyle tanımlanır.
Bitmap bitmap = new Bitmap(1,1);
Constructor - width + height
Şöyle yaparız.
Rectangle facerectangle = ...;
Bitmap target = new Bitmap(facerectangle.Width, facerectangle.Height);
Şöyle yaparız.
Bitmap memoryImage = new Bitmap(1366, 768);
Constructor - width + height + pixel format
Şöyle yaparız.
int width = ...;
int height = ...;

Bitmap bmp = new Bitmap (width, height,PixelFormat.Format24bppRgb);
Constructor - From Stream
Şöyle yaparız.
byte[] img = ...;
MemoryStream ms = new MemoryStream();
ms.Write(img, 0, img.Length);
Bitmap bitmap = new Bitmap(ms);
Constructor  - From Bitmap
Şöyle yaparız.
var bitmap1 = new Bitmap(...);
Bitmap bitmap2 = new System.Drawing.Bitmap(bitmap1);
Constructor - From File
Image sınıfı ile de Bitmap okunabilir. Ben bu yöntemi pek sevmiyorum.
Bitmap source = Image.FromFile("/my/path/to/myimage.png") as Bitmap;
Constructor - From Path
Açıklaması şöyle
Bitmap(String): Initializes a new instance of the Bitmap class from the specified file.
Clone metodu
Şöyle yaparız.
Bitmap bitmap = ...;
Bitmap copy = bitmap.Clone();
Dispose metodu
Bitmaple işimiz bitince Dispose edilmelidir.
Bitmap bitmap =...;...
bitmap.Dispose();
FromStream metodu
Şöyle yaparız.
Stream stream = new MemoryStream(Data); // Data is byte array 
Image img = Image.FromStream(stream);
GetPixel metodu
Bir Color nesnesi döner. Açıklaması şöyle
Bitmap data is stored in an unmanaged GDI object. Every time you call GetPixel the system needs to access this object. You can speed it up by using LockBits to directly access the raw image data.
Örnek
Şöyle yaparız.
bitmap.GetPixel(i, j);
Örnek
Şöyle yaparız
double GetImageValue(Bitmap Image)
{
  double ImageValue = 0;

  for (int X = 0; X < Image.Width; X++)
  {
    for (int Y = 0; Y < Image.Height; Y++)
    {
      Color CurrentPixel = Image.GetPixel(X, Y);

      ImageValue += CurrentPixel.A + CurrentPixel.B + CurrentPixel.G + CurrentPixel.R;
    }
  }
  return ImageValue;
}
LockBits metodu
Bitmap'in sadece veri kısmına erişmemizi sağlar. Bitmap'in header kısmını atlar.  LockBits ile kilitlenen BitmapData sınıfı daha sonra iş bitince unlock edilmeli.
Bitmap bitmap = ...;
BitmapData bmData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height),
ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
unsafe
{...}
bmp.UnlockBits(bmData);
Bu örnekte ReadOnly olarak kilitleniyor ve farklı bir Bitmap'in format kullanılıyor.
BitmapData bmpdata = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), 
ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
int numbytes = bmpdata.Stride * bitmap.Height;
byte[] bytedata = new byte[numbytes];
IntPtr ptr = bmpdata.Scan0;

Marshal.Copy(ptr, bytedata, 0, numbytes);

bitmap.UnlockBits(bmpdata);
Save metodu - Dosya
Bitmap dosyaya şöyle kaydedilir.
Bitmap bitmap =...;
bitmap.Save(@"C:\Test\screenshot.png");
bitmap.Dispose();
Dosyaya farklı bir formatta şöyle kaydedilir.
bitmap.Save(@"C:\Coke\res1.png", System.Drawing.Imaging.ImageFormat.Png);
Save metodu - Stream
Bitmap bir stream'e de kaydedilebilir.
bitMap.Save(OutputStream, ImageFormat.Jpeg);
JPEG olarak şöyle kaydederiz.
byte[] imagebuffer;
using (Image img = Image.FromFile(@"c:\temp_10\sample.gif"))
using (MemoryStream ms = new MemoryStream())
{
  img.Save(ms, ImageFormat.Jpeg);
  imagebuffer = ms.ToArray();
}
//write to fs (if you need...)
File.WriteAllBytes(@"c:\temp_10\sample.jpg", imagebuffer);
Png olarak şöyle kaydederiz.
Image img = ...;
byte[] byteArray = ;
using(MemoryStream stream = new MemoryStream())
{
  img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
  stream.Close();

  byteArray = stream.ToArray();
}
Gif olarak şöyle kaydederiz.
img.Save(stream, System.Drawing.Imaging.ImageFormat.Gif);
SetPixel metodu
Bir pixel'e renk şöyle atanır.
int red, int green, int blue;
bitmap.SetPixel(x, y, Color.FromArgb(red, green, blue));
SetResolution metodu
Şöyle yaparız.
Bitmap imgPhoto = ...;
int width = ...;
int height = ...;

Bitmap bmPhoto = new Bitmap(width, height, PixelFormat.Format24bppRgb);
bmPhoto.SetResolution(imgPhoto.HorizontalResolution,
                      imgPhoto.VerticalResolution);
Width Alanı
Bitmap nesnesinin boyutlarına şöyle erişilir.
bitmap.Width, bitmap.Height



Hiç yorum yok:

Yorum Gönder