2015-09-04 1 views
1

Хорошо, у меня есть pictureBox с изображением с размером, установленным в: StretchImage,
Теперь я хочу получить пиксель, который я нажимаю. (Bitmap.GetPixel (х, у)).
Но когда изображение растянуто от нормального размера, я получаю исходный пиксель. как в пикселе, который был бы там до StrechC# Как получить пиксель из растянутого растрового изображения/изображения

Мой код (если это имеет смысл?):

Private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { 
    Bitmap img = (Bitmap)pictureBox1.Image; 
    var color = img.GetPixel(e.X, e.Y) 
} 

Заранее спасибо

ответ

3

Там должен быть способ, чтобы компенсировать растяжение фактор вызванный полем изображения. Я подумываю о том, чтобы растянуть ширину и высоту из окна изображения, а также ширину и высоту исходного изображения, вычислив коэффициент растяжения и умножив их на координаты e.X и e.Y. Может быть что-то вроде:

Bitmap img = (Bitmap)pictureBox1.Image; 
float stretch_X = img.Width/(float)pictureBox1.Width; 
float stretch_Y = img.Height/(float)pictureBox1.Height; 
var color = img.GetPixel((int)(e.X * stretch_X), (int)(e.Y * stretch_Y)); 
+0

Спасибо, Работали как очарование! :) – Flipsanta

0

Вы можете сохранить исходное изображение и оставить это нетронутым. Это было бы проще, чем изменение размера растянутого изображения и получение заданных пиксельных слов. Убедитесь, что e.X и e.Y не выходят за рамки исходного растрового изображения.

private Bitmap _img; 

    public void LoadImage(string file) { 
     // Get the image from the file. 
     pictureBox1.Image = Bitmap.FromFile(file); 
     // Convert it to a bitmap and store it for later use. 
     _img = (Bitmap)pictureBox1.Image; 

     // Code for stretching the picturebox here. 
     // ... 
    } 

    private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { 
     var color = _img.GetPixel(e.X, e.Y); 
    } 

EDIT: игнорировать. Ответ Максимилиана лучше.

1

Разделите e.X и e.Y с коэффициентом растяжения. Вот растянутое изображение заполняет весь блок изображения.

Bitmap img = (Bitmap)pictureBox1.Image; 
float factor_x = (float)pictureBox1.Width/img.Width; 
float factor_y = (float)pictureBox1.Height/img.Height; 
var color = img.GetPixel(e.X/factor_x, e.Y/factor_y) 

Поступая таким образом, мы уверены, что e.X и e.Y не будет выходить за пределы исходного изображения.