Имам снимка, която искам да отпечатам, но е твърде голяма за една страница, така че реших да я разделя на няколко изображения, опитах метод, но сега използвам this (отговор на Талха Ирфан) Опитах и другите решения там, но те също не работеха (напр. bm.Clone(rec, bm.PixelFormat);
)
и ето моят код (това е в клас без форма)
Bitmap bm = new Bitmap(frmPrint.Width, frmPrint.Height);
Rectangle rec = new Rectangle(0, 200, 576, 300);
Bitmap bitmap = cropImg(bm, rec);
frmPrint.DrawToBitmap(bitmap, rec);
frmPrint._img = bitmap;
frmPrint.setImage();
и функция setImage (на някакъв формуляр)
public void setImage()
{
pictureBox3.BackgroundImage = _img;
this.ShowDialog();
}
и cropImg
е същото като cropAtRect
по-долу показва оригиналното изображение (вляво) желания резултат в синия правоъгълник и действителния резултат вдясно
PS действителният ми размер на изображението е (височина = 698, ширина = 576)
Редактиране - както е предложено по-долу
на неформален клас
Rectangle cropRect = new Rectangle(0, 0, 576, 698);
Bitmap target = new Bitmap(cropRect.Width, cropRect.Height, bm.PixelFormat);
frmPrint.setImage(bm, target, cropRect);
target.Dispose();
във форма клас
public void setImage(Bitmap src, Bitmap target, Rectangle cropRect)
{
pictureBox3.Visible = false;
using (Graphics g = Graphics.FromImage(target))
{
g.DrawImage(src, new Rectangle(pictureBox3.Location.X, pictureBox3.Location.Y, target.Width, target.Height),
cropRect,
GraphicsUnit.Pixel);
}
this.ShowDialog();
}