对不起,如果标题有点神秘。基本上我在 ac# forms 应用程序中创建了一个缩放控件,这个想法是我可以按因素缩放图像,即。1 倍、2 倍、4 倍、8 倍。我需要图像保持像素化,即。最近的邻居。缩放效果很好,除了当我在处理边界像素时选择 Interp 模式作为最近邻时,它默认为内部颜色。也就是说,外部像素的宽度似乎是内部像素的一半,真正的问题是当我添加一个工具提示来显示当前鼠标悬停像素的 x、y 坐标时,它被抛出离开。需要明确的是,它被丢弃的原因是因为我将当前像素计算为:
void m_pictureBox_MouseMove(object sender, MouseEventArgs e)
{
int x = e.Location.X / m_zoomFactor;
int y = e.Location.Y / m_zoomFactor;
}
并且由于外部像素是宽度的一半……好吧,您得到了图片。
绘图代码很简单:
void m_pictureBox_Paint(object sender, PaintEventArgs e)
{
if (m_pictureBox.Image!=null)
{
e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
e.Graphics.ScaleTransform((float)m_zoomFactor, (float)m_zoomFactor);
e.Graphics.DrawImage(m_pictureBox.Image, 0, 0);
}
}
图片控件托管在我的自定义“ZoomControl”中,该控件本身继承自“面板”控件。
我的问题基本上是,任何人都可以帮助我解决边界像素问题吗?有没有更好的方法来获得缩放功能?