Constructor
Şöyle yaparız.
Açıklaması şöyle.
Şöyle yaparız.
Bitmap bitmap = ...;
BitmapData bmData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height),
ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
Scan0 Alanı
Açıklaması şöyle.
Scan0 returns an address of the first pixel data. Stride is the width of single row of pixels (scan line) in bytes (with optional padding to make it dividable by 4).Şöyle yaparız.
byte* p = (byte*)(void*)bmData.Scan0.ToPointer();
Belli bir satıra gitmek için şöyle yaparız.byte* p = (byte*)(void*)bmData.Scan0.ToPointer();
byte* row = p + y * bmData.Stride;
Tümünü dolaşmak için şöyle yaparızdouble GetImageValue(Bitmap image)
{
double imageValue = 0;
// Lock the bitmap's bits.
var rect = new Rectangle(0, 0, image.Width, image.Height);
var bmpData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly,
System.Drawing.Imaging.PixelFormat.Format24bppRgb);
// Get the address of the first line.
var ptr = bmpData.Scan0;
// Declare an array to hold the bytes of the bitmap.
var bytes = Math.Abs(bmpData.Stride) * image.Height;
var values = new byte[bytes];
// Copy the RGB values into the array.
System.Runtime.InteropServices.Marshal.Copy(ptr, values, 0, bytes);
// Add the rgb values to ImageValue
for (int y = 0; y < image.Height; y++)
{
int lineStart = y * Math.Abs(bmpData.Stride);
for (int x = 0; x < image.Width * 3; x++)
{
imageValue += values[lineStart + x];
}
}
// Unlock the bits.
image.UnlockBits(bmpData);
return imageValue;
}
Hiç yorum yok:
Yorum Gönder