Tôi đang sử dụng StretchImage vì hộp có thể thay đổi kích thước bằng bộ tách. Dường như mặc định là một số loại lọc song tuyến trơn tru, làm cho hình ảnh của tôi bị mờ và có các kiểu moire.Làm cách nào để tạo một PictureBox sử dụng tính năng lấy lại vùng lân cận gần nhất?
Trả lời
tôi cần chức năng này cũng thế. Tôi đã tạo một lớp kế thừa PictureBox, ghi đè OnPaint
và thêm thuộc tính để cho phép đặt chế độ nội suy:
/// <summary>
/// Inherits from PictureBox; adds Interpolation Mode Setting
/// </summary>
public class PictureBoxWithInterpolationMode : PictureBox
{
public InterpolationMode InterpolationMode { get; set; }
protected override void OnPaint(PaintEventArgs paintEventArgs)
{
paintEventArgs.Graphics.InterpolationMode = InterpolationMode;
base.OnPaint(paintEventArgs);
}
}
Rất đẹp. Tôi nghĩ PanAndZoomPictureBox của EmguCV cũng vậy. Bạn có biết bất kỳ vấn đề hiệu suất nào đang thực hiện nó không? – Pedro77
Tôi chưa có bất kỳ sự khác biệt về hiệu suất có thể đo lường nào thay đổi chế độ nội suy theo cách này. – JYelton
Humm tốt. Jared Updike nên đánh dấu câu trả lời của bạn! :) – Pedro77
Tôi nghi ngờ bạn sẽ phải thực hiện thay đổi kích thước theo cách thủ công thông qua lớp Image và chức năng DrawImage và trả lời các sự kiện thay đổi kích thước trên PictureBox.
Khi thay đổi kích thước một hình ảnh trong .net, các System.Drawing.Drawing2D.InterpolationMode cung cấp các phương pháp thay đổi kích thước sau:
- Bicubic
- Bilinear
- cao
- HighQualityBicubic
- HighQualityBilinear
- Thấp
- Gần nhấtN eighbor
- Mặc định
Tôi không thấy cách này giải quyết câu hỏi của OP. – JYelton
tôi đã tìm kiếm MSDN và hóa ra đó là một bài viết về vấn đề này, mà không phải là rất chi tiết nhưng vạch ra rằng bạn nên sử dụng sự kiện sơn.
http://msdn.microsoft.com/en-us/library/k0fsyd4e.aspx
tôi sửa một hình ảnh thường có sẵn phóng to ví dụ để sử dụng tính năng này, xem dưới đây
Sửa từ: http://www.dotnetcurry.com/ShowArticle.aspx?ID=196&AspxAutoDetectCookieSupport=1
Hope this helps
private void Form1_Load(object sender, EventArgs e)
{
// set image location
imgOriginal = new Bitmap(Image.FromFile(@"C:\images\TestImage.bmp"));
picBox.Image = imgOriginal;
// set Picture Box Attributes
picBox.SizeMode = PictureBoxSizeMode.StretchImage;
// set Slider Attributes
zoomSlider.Minimum = 1;
zoomSlider.Maximum = 5;
zoomSlider.SmallChange = 1;
zoomSlider.LargeChange = 1;
zoomSlider.UseWaitCursor = false;
SetPictureBoxSize();
// reduce flickering
this.DoubleBuffered = true;
}
// picturebox size changed triggers paint event
private void SetPictureBoxSize()
{
Size s = new Size(Convert.ToInt32(imgOriginal.Width * zoomSlider.Value), Convert.ToInt32(imgOriginal.Height * zoomSlider.Value));
picBox.Size = s;
}
// looks for user trackbar changes
private void trackBar1_Scroll(object sender, EventArgs e)
{
if (zoomSlider.Value > 0)
{
SetPictureBoxSize();
}
}
// redraws image using nearest neighbour resampling
private void picBox_Paint_1(object sender, PaintEventArgs e)
{
e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor;
e.Graphics.DrawImage(
imgOriginal,
new Rectangle(0, 0, picBox.Width, picBox.Height),
// destination rectangle
0,
0, // upper-left corner of source rectangle
imgOriginal.Width, // width of source rectangle
imgOriginal.Height, // height of source rectangle
GraphicsUnit.Pixel);
}
Sự kiện nào được kết nối với phương pháp picBox_Paint_1 của bạn? nó sẽ ở trong một số phần khác của mã của bạn. –
Vâng, đó là mã mẫu thiết kế: this.picBox.Paint + = new System.Windows.Forms.PaintEventHandler (this.picBox_Paint_1); – ardunn
- 1. 'Vùng lân cận gần nhất' zoom
- 2. K Thuật toán lân cận gần nhất
- 3. Vùng lân cận gần nhất Tìm kiếm bằng Python mà không có cây k-d
- 4. Thuật toán nội suy lân cận gần nhất trong MATLAB
- 5. Tìm kiếm lân cận gần nhất trong D3
- 6. Thực hiện C/C++ lân cận lân cận nhất
- 7. Công cụ tìm kiếm lân cận KD-tree gần nhất như thế nào?
- 8. Sử dụng dữ liệu Shapefile để xác định vùng lân cận cho kinh độ/vĩ độ
- 9. Chuyển đổi lat/lon thành zipcode/tên vùng lân cận
- 10. cách tính các nút 'lân cận' với networkx
- 11. Hợp nhất các vùng lân cận trong R (dữ liệu không gian tổng hợp)?
- 12. Làm thế nào để lấy lại hệ số zoom của một PictureBox của WinForms?
- 13. 2D tìm kiếm lân cận gần nhất cho các điểm di chuyển
- 14. Làm cách nào để điều chỉnh kích thước của nhiều vùng văn bản lân cận như trong jsfiddle.net?
- 15. Tìm kiếm lân cận Lucene.net
- 16. Bluetooth LE RSSI để phát hiện lân cận iOS
- 17. Làm cách nào để tôi có thể chọn một picturebox?
- 18. Làm cách nào để "trở lại" tính năng hợp nhất chi nhánh trong Git?
- 19. Cách nào để phát hiện các thiết bị di động lân cận bằng SDK Android?
- 20. Giữ PictureBox tập trung bên trong một vùng chứa
- 21. Giải pháp cho vấn đề người bán hàng đi du lịch sử dụng thuật toán lân cận gần nhất trong một truy vấn LINQ?
- 22. Làm cách nào để API OAuth Netflix sử dụng tính năng gọi lại của tôi?
- 23. Cách tốt nhất để tạo chức năng gọi lại
- 24. Làm thế nào để tìm k lân cận gần nhất với trung bình của n số khác biệt trong thời gian O (n)?
- 25. iPhone - phát hiện các thiết bị bluetooth lân cận
- 26. Hàng xóm gần nhất sử dụng Quaternions
- 27. Làm thế nào để lấy lại mẫu/làm lại phổ?
- 28. Sử dụng API FourSquare để tìm các địa điểm lân cận trong SDK iOS
- 29. Làm cách nào để sử dụng tính năng tiêm phụ thuộc, lấy cấu hình từ nhiều nguồn?
- 30. Thuật toán biểu đồ để tính các giá trị nút dựa trên các nút lân cận
vì vậy không có cách thực tế để làm điều này? trong một số thời trang dễ dàng? – Luiscencio
@Luiscencio: đó là hình thức của nó. Bạn sẽ phải tự mình làm với một Bitmap mới có kích thước phù hợp và sau đó là Graphics.DrawImage –
Bạn nên đánh dấu câu trả lời của JYelton. :) – Pedro77