如何仅获取图像最后一行的像素并将其显示在图片框中。C#

如何仅获取图像最后一行的像素并将其显示在图片框中。C#,c#,C#,我有一个问题,我们如何只获取图像最后一行的像素,并在C#application的picturebox中显示该行。可能不是最快的方法,但应该可以: public Bitmap LastRow(Bitmap source) { int y = source.Height - 1; Bitmap newSource = new Bitmap(source.Width, 1); for (int x = 0; x < source.Width; x++) {

我有一个问题,我们如何只获取图像最后一行的像素,并在C#application的picturebox中显示该行。

可能不是最快的方法,但应该可以:

public Bitmap LastRow(Bitmap source)
{
   int y = source.Height - 1;
   Bitmap newSource = new Bitmap(source.Width, 1);
   for (int x = 0; x < source.Width; x++)
   {
       NewSource.SetPixel(x, y, Source.GetPixel(x, y));
   }
   return newSource;
}
        Bitmap image1 = new Bitmap(@"picture.bmp");
        Bitmap image2 = new Bitmap(image1.Width, 1, image1.PixelFormat);
        for (int i = 0; i < image1.Width; i++)
        {
            image2.SetPixel(i, 0, image1.GetPixel(i, image1.Height - 1));
        }
        pictureBox1.Image = image2;
Bitmap image1=新位图(@“picture.bmp”);
位图image2=新位图(image1.Width,1,image1.PixelFormat);
对于(int i=0;i
我所看到的最简单(但也是最快)的方法是将以下重载与/类似地结合使用

static Bitmap GetLastRow(Bitmap source)
{
    var data = source.LockBits(new Rectangle(0, source.Height - 1, source.Width, 1), ImageLockMode.ReadOnly, source.PixelFormat);
    try { return new Bitmap(data.Width, data.Height, data.Stride, data.PixelFormat, data.Scan0); }
    finally { source.UnlockBits(data); }
}
通常,只需更改
新矩形(…)
部分,即可使用此代码裁剪位图的任何矩形部分

更新:事实证明,甚至还有一个预定义的方法-,因此代码可以简单地

Bitmap source = ...;
var lastRow = source.Clone(new Rectangle(0, source.Height - 1, source.Width, 1), source.PixelFormat);

当GetPixel/SetPixel不太慢时,这可能是罕见的情况之一。。但是DrawImage采用了两个矩形,这可能会更快。。
Bitmap source = ...;
var lastRow = source.Clone(new Rectangle(0, source.Height - 1, source.Width, 1), source.PixelFormat);