C# 如何使用getpixel从pictureBox.image和位图bmp创建新图像?

C# 如何使用getpixel从pictureBox.image和位图bmp创建新图像?,c#,C#,我试图使用Graphics.DrawImage,但我得到的是黑色图像,上面是我正在绘制的红点。为什么我会得到黑色的图像 这就是功能: public Bitmap SaveFromPictureBoxToBitMap(Bitmap image1, Image pbox) { Graphics g = Graphics.FromImage(image1); Point p = new Point(pbox.Width,pbox.Hei

我试图使用Graphics.DrawImage,但我得到的是黑色图像,上面是我正在绘制的红点。为什么我会得到黑色的图像

这就是功能:

public Bitmap SaveFromPictureBoxToBitMap(Bitmap image1, Image pbox)
        {

            Graphics g = Graphics.FromImage(image1);
            Point p = new Point(pbox.Width,pbox.Height);
            g.DrawImage(pbox, p);
            image1.Save(@"d:\PictureBoxToBitmap\ptob.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
            return newImage;
        }
image1是在绘制事件中绘制到的bmp变量。pbox只是pictureBox1.Image和im在trackBar1滚动事件中使用此函数

这是我得到的,我在这里添加了一个屏幕截图:

在背景上,而不是黑色,我需要从pictureBox1中获取图像,但它不起作用。为什么?

找到它:

using (Bitmap b = new Bitmap(pictureBox1.Width, pictureBox1.Height))
{
    pictureBox1.DrawToBitmap(b, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));
    b.Save(@"d:\testit.png", System.Drawing.Imaging.ImageFormat.Png);
} 

为什么不将
位图
设置为
PictureBox.Image
属性的一个属性,然后在其上绘制而不使用其他位图?我还想知道为什么要在保存图像之前复制它。此外,您可以通过写入
newImage=newbitmap(image2)来复制位图
SaveFromPictureBoxToBitMap
方法中的其余代码就不需要了。对不起,我不能再多呆一会儿看这个了。这可能不是您问题的根本原因,但可能是一个需要解决的问题。在
SaveFromPictureBoxToBitMap
方法中,指定
newColor
两次,但只使用第二个值。通过写入,您得到的图像是图像的一半,意味着您得到的图像尺寸较小(即原始图像高度的一半)或者只从picturebox获取图像,而不从
bmp
获取附加层?后者似乎会出现,因为您只使用
picturebox1
中的像素颜色。如果要混合使用这两个图像,请查看
Graphics.DrawImage
方法。您可能还需要查看WriteableBitmapExtensions库。它可能有一些您可能会觉得有用的功能。你可能想看看Graphics.DrawImage和它的重载,你在这里重新发明了很多缓慢而不是特别圆的轮子。