Birkaç sorunları:
- Birinci ve en önemlisi: Sen
PictureBox.Image
(a Mülkiyet) arasındaki ilişki hakkında karıştı ediliyor ve Graphics
sen PictureBox
'ın yüzeye ile ilişkilendirmek. Control.CreateGraphics
'dan aldığınız Graphics
nesnesi yalnızca kontrolün yüzeyine boyayabilir; genellikle ne istediğini değil; Bunu ne zaman ve hatta, genellikle kodunuzu çalışmak görünüyor ederken
nedenle, sadece yüzeye kalıcı olmayan pikseller boyalar .. e.Graphics
kullanarak Paint
olay bunu yapmak istiyorum. Küçült/maksimize ve kalıcı olmayan ne anlama geldiğini göreceksiniz ..! size Bitmap
atayabilirsiniz
g.DrawImage(sourceBitmap, targetArea, sourceArea, GraphicsUnit.Pixel);
Bundan sonra:
Graphics g = Graphics.FromImage(bmp);
Şimdi bunu içine çizebilirsiniz:
böyle bir
Grahics
nesnesi ile ilişkilendirilecek gereken bir
Bitmap
bmp değiştirmek için
Image
TargetPicBox
Mülkiyetinin Mülkiyeti.
Son olarak Graphics
, ya da daha iyisi, bir using
yan tümce tümce tümce tümce tümcesinde ..
rectCropArea
anlamlı değerler vermeyi başardınız varsayalım.
Ayrıca kaynak bit eşlem kopyalamak yolu bir hata var olduğuna dikkat: Tam görüntü istiyorsanız, kullanabilirim onunSize
(*), değil PictureBox
biri !!
Ve aynı hatayla bir hedef dikdörtgen oluşturmak yerine, TargetPicBox.ClientRectangle
'u kullanın! İşte
kırpma Düğmesi için bir örnek kod şudur:
// a Rectangle for testing
Rectangle rectCropArea = new Rectangle(22,22,55,99);
// see the note below about the aspect ratios of the two rectangles!!
Rectangle targetRect = TargetPicBox.ClientRectangle;
Bitmap targetBitmap = new Bitmap(targetRect.Width, targetRect.Height);
using (Bitmap sourceBitmap = new Bitmap(SrcPicBox.Image,
SrcPicBox.Image.Width, SrcPicBox.Image.Height))
using (Graphics g = Graphics.FromImage(targetBitmap))
g.DrawImage(sourceBitmap, targetRect, rectCropArea, GraphicsUnit.Pixel);
if (TargetPicBox.Image != null) TargetPicBox.Dispose();
TargetPicBox.Image = targetBitmap;
Doğru fare olaylarda Dikdörtgen hazırlanmış olması gerekirdi Tabii
- !
- Burada sonucun en boy oranında karar vermek istersiniz; muhtemelen sonucu deforme etmek istemezsiniz! Bu yüzden kaynak kırpma dikdörtgenini mi yoksa hedef dikdörtgeni mi genişletip genişletmeyeceğine karar vermelisiniz ..!
Not I atadıklarından o targetBitmap
TargetPicBox.Image
için sana mecbur asla değil dipose! Bunun yerine, yeni bir Image
'u atamadan önce, ilk önce Dispose
numaralı telefonu kullanıyorum.