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

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 20 августа 2010

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

Для 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]++;
1 голос
/ 20 августа 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);

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

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

...