Я хочу обрезать изображение одним цветом, действующим как прозрачная маска, и я хотел бы создать маленькую коробку, которая будет содержать изображение.Создание ограничивающей рамки в изображении с прозрачностью
картину того, что я имею в виду будет объяснить это лучше точно:
RGB-(255.0.255) является прозрачной маской и зеленые кадры представляют нужную рамку.
Я уже разобрался в верхней строке ограничивающего параллелепипеда:
int nAlloc = (128 * 128) * 4;
unsigned char* buf = new unsigned char[nAlloc];
GetBitmapBits(hBMP, nAlloc, buf);
for(int i = 0; i < nAlloc; i += 4)
{
if(buf[i] == 255 && buf[i + 1] == 0 && buf[i + 2] == 255)
{
continue;
}
// If I hit a first non-transparent pixel,
// I can then calculate the row where is that pixel located.
else if(set_pixel == false)
{
set_pixel = true;
index = ceil((float)(i/4.0/128.0));
}
... // Converting non-transparent pixels to Black&White
}
//I'm then drawing the bitmap to window like so:
TransparentBlt(hdc, 5, 305 - index, 128, 128, hDC, 0, 0, 128, 128, RGB(255, 0, 255));
Я думаю, я знаю, как определить последнюю строку, как хорошо, но я не уверен, с этим и не имеют ни малейшего представления как узнать стороны ограничительной рамки.
Возможно, вы можете использовать алгоритм [flood fill] (https://www.wikiwand.com/en/Flood_fill#/The_algorithm) (эта проблема является видом обратной заливки заливки). –
@JonathanPotter Это не дает мне ограничительных линий, не так ли? Я не хочу влиять на какие-либо пиксели, я просто хочу получить боксерский ящик. Это слишком сложно для этой проблемы, я считаю. – ProXicT
На самом деле вы не наполнили бы, но рекурсивный алгоритм позволит вам найти края объекта. –