【发布时间】:2015-02-02 16:25:52
【问题描述】:
我通过从另一个中提取 200x200 正方形来创建一个新的位图。我认为源(位图像素)由这两者共享。现在,当我在原始图像上画一个圆圈时,副本上也有一个。但是当我以另一种方式这样做时——在新创建的圆圈上画一个圆圈——原来的圆圈上没有圆圈。为什么会这样?我以为源像素是共享的。
private Bitmap testa(Bitmap bmp)
{
System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, bmp.PixelFormat);
//Create a new bitmap.
Bitmap newBitmap = new Bitmap(200, 200, bmpData.Stride, bmp.PixelFormat, bmpData.Scan0);
bmp.UnlockBits(bmpData);
// Draw the new bitmap.
using (Graphics g = Graphics.FromImage(bmp)) // or: newBitmap
{
g.DrawEllipse(new Pen(Brushes.Red), 1, 1, 100, 100);
}
return newBitmap;
}
【问题讨论】:
-
我认为您实际上并没有“共享”像素。你只复制它们有或没有圆圈。另外:为什么不使用 DrawImage 进行复制?它有一种格式可以做到这一点!
-
@TaW 那么为什么当我先复制图像然后在上面绘制时,两个图像上都会显示圆圈?对于 DrawImage:这只是一个示例,我只有 IntPtr 可以从不整个 Bitmap 复制。
-
我们看到代码了吗?
标签: c# bitmap drawing share pixel