获取位图并将其绘制成图像
Get bitmap and draw it into image
我正在尝试将我的绘图从 picturebox 保存到位图中并将该位图绘制到图像中。到目前为止,最终图像中什么都没有出现,但在调试时我只能说,原始位图不为空并且 with/height 是正确的。但是画成图后什么都没有
我这样将我的绘图保存为位图:
GraphicsPath path = RoundedRectangle.Create(x, y, width, height, corners, RoundedRectangle.RectangleCorners.All);
g.FillPath(Brushes.LightGray, path);
g.SetClip(path);
using (Font f = new Font("Tahoma", 9, FontStyle.Bold))
g.DrawString(mtb_hotspotData.Text, f, Brushes.Black, textX, textY);
g.ResetClip();
bitmap = new Bitmap(width, height, g);
然后保存:
hs.bitmap = new Bitmap(bitmap);
最后使用它:
for (int i = 0; i < imageSequence.Count; i++) {
Graphics g = Graphics.FromImage(imageSequence[i]);
//g.CompositingMode = CompositingMode.SourceOver;
//hotspot.bitmap.MakeTransparent();
int x = hotspot.coordinates[i].X;
int y = hotspot.coordinates[i].Y;
g.DrawImage(hotspot.bitmap, new Point(x, y));
}
return imageSequence;
到目前为止我在这个解决方案中找不到任何问题,因此我不知道故障出在哪里。
您似乎误解了 Bitmap
和 Graphics
对象的关系。
一个Graphics
对象不包含任何图形;它是一种用于将 绘制成 某种位图的工具。
您正在使用的 Bitmap constructor (public Bitmap(int width, int height, Graphics g)
) 不是 connect Bitmap
和 Graphics
对象。它仅使用 Graphics
.
中的 dpi
分辨率
您没有说明 Graphics
是如何创建的。如果你想绘制到 Bitmap
(而不是控件的表面),最直接的方法是:
Bitmap bitmap = new Bitmap(width, height);
bitmap.SetResolution(dpiX, dpiY); // optional
using (Graphics G = Graphics.FromImage(bitmap ))
{
// do the drawing..
// insert all your drawing code here!
}
// now the Bitmap can be saved or cloned..
bitmap.Save(..);
hs.bitmap = new Bitmap(bitmap); // one way..
hs.bitmap = bitmap.Clone(); // ..or the other
// and finally disposed of (!!)
bitmap.Dispose();
我正在尝试将我的绘图从 picturebox 保存到位图中并将该位图绘制到图像中。到目前为止,最终图像中什么都没有出现,但在调试时我只能说,原始位图不为空并且 with/height 是正确的。但是画成图后什么都没有
我这样将我的绘图保存为位图:
GraphicsPath path = RoundedRectangle.Create(x, y, width, height, corners, RoundedRectangle.RectangleCorners.All);
g.FillPath(Brushes.LightGray, path);
g.SetClip(path);
using (Font f = new Font("Tahoma", 9, FontStyle.Bold))
g.DrawString(mtb_hotspotData.Text, f, Brushes.Black, textX, textY);
g.ResetClip();
bitmap = new Bitmap(width, height, g);
然后保存:
hs.bitmap = new Bitmap(bitmap);
最后使用它:
for (int i = 0; i < imageSequence.Count; i++) {
Graphics g = Graphics.FromImage(imageSequence[i]);
//g.CompositingMode = CompositingMode.SourceOver;
//hotspot.bitmap.MakeTransparent();
int x = hotspot.coordinates[i].X;
int y = hotspot.coordinates[i].Y;
g.DrawImage(hotspot.bitmap, new Point(x, y));
}
return imageSequence;
到目前为止我在这个解决方案中找不到任何问题,因此我不知道故障出在哪里。
您似乎误解了 Bitmap
和 Graphics
对象的关系。
一个
Graphics
对象不包含任何图形;它是一种用于将 绘制成 某种位图的工具。您正在使用的 Bitmap constructor (
public Bitmap(int width, int height, Graphics g)
) 不是 connectBitmap
和Graphics
对象。它仅使用Graphics
. 中的
dpi
分辨率
您没有说明 Graphics
是如何创建的。如果你想绘制到 Bitmap
(而不是控件的表面),最直接的方法是:
Bitmap bitmap = new Bitmap(width, height);
bitmap.SetResolution(dpiX, dpiY); // optional
using (Graphics G = Graphics.FromImage(bitmap ))
{
// do the drawing..
// insert all your drawing code here!
}
// now the Bitmap can be saved or cloned..
bitmap.Save(..);
hs.bitmap = new Bitmap(bitmap); // one way..
hs.bitmap = bitmap.Clone(); // ..or the other
// and finally disposed of (!!)
bitmap.Dispose();