Получить прямоугольник изображения JPG и создать миниатюру в прямоугольнике

Я пытаюсь объяснить: у меня есть изображение JPG (img A).

Этот A.jpg имеет содержимое -цвета, это изображение людей- и еще один маленький белый прямоугольник (цвет белый; голова человека - белый прямоугольник). Мне нужно получить положение прямоугольника в A.jpg.

Затем у меня есть еще одно изображение B.jpg, еще меньше; и я создам миниатюру B.jpg с размерами прямоугольника (белого прямоугольника в A.jpg).

Наконец, я сгенерирую новое изображение: C.jpg, будет иметь A.jpg и B.jpg в прямоугольнике A.jpg.

любые предложения, любой пример кода? Я использую vs 2008, .net 3.5, только GDI+.


person Kiquenet    schedule 19.08.2010    source источник
comment
По сути, вы хотите поместить новое лицо B к человеку на изображении A.   -  person Eric    schedule 20.08.2010


Ответы (2)


Для задачи А вы можете подсчитать количество белых пикселей в каждом столбце и каждой строке. Столбцы/строки с наибольшим количеством белых пикселей находятся там, где находятся границы вашего прямоугольника. (Предполагая, что стороны прямоугольника параллельны сторонам изображения)

Для B и C подсказка должна начинаться с

Bitmap aImage; // Initialize with your images
using (Graphics g = Graphics.FromImage(aImage))
{
    // Do stuff
}

А затем вы можете найти и перегрузить Graphics.DrawImage для масштабирования и наложения изображений друг на друга.

Для подсчета количества пикселей вы можете использовать GetPixel< /а> метод.

// Sketchy code
// Calculate each column in sum[x]
[x,y] = b.Size;
for(x ...)
    for(y ..)
        if (aImage.GetPixel(x, y) == Color.White)
            sum[x]++;
person Albin Sunnanbo    schedule 19.08.2010

Вот фрагмент наложения изображения поверх другого изображения. (Нет кредита я взял это отсюда)

Bitmap bmp = Bitmap.FromFile(initialFileName);

// This draws another image as an overlay on top of bmp in memory.
// There are additional forms of DrawImage; there are ways to fully specify the
// source and destination rectangles. Here, we just draw the overlay at position (0,0).

using (Graphics g = Graphics.FromImage(bmp))
{
   g.DrawImage(Bitmap.FromFile(overlayFileName), 0, 0);
}
bmp.Save(saveAsFileName, System.Drawing.Imaging.ImageFormat.Png);

Теперь о том, как найти большой белый прямоугольник внутри изображения? Этот бит немного сложнее.

Существует библиотека , которая может сделать это за вас.

person Eric    schedule 20.08.2010