struct RGBA {
uint8_t b,g,r,a;
};
void restoreTransparency(TBitmap* bm, const TRect& r)
{
int w = r.Width();
if (w <= 0)
return;
for (int y = r.top; y < r.bottom; ++y) {
RGBA* p = reinterpret_cast<RGBA*>(bm->ScanLine[y]) + r.left;
RGBA* end = p + w;
for (; p != end; ++p) {
p->a = 0xFF;
}
}
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
enum {
FRAME_WIDTH = 15,
SIZE_DELTA = FRAME_WIDTH * 2
};
TBitmap* bmIn = new TBitmap;
bmIn->LoadFromFile("in.bmp");
TBitmap* bmOut = new TBitmap;
bmOut->PixelFormat = bmIn->PixelFormat;
bmOut->SetSize(bmIn->Width + SIZE_DELTA, bmIn->Height + SIZE_DELTA);
// Зальём, например, синим
bmOut->Canvas->Brush->Color = clBlue;
bmOut->Canvas->Brush->Style = bsSolid;
bmOut->Canvas->FillRect(Bounds(0, 0, bmOut->Width, bmOut->Height));
// У Windows.BitBlt и её обёртки CopyRect есть ошибка:
// она стирает всю прозрачность вокруг.
bmOut->Canvas->CopyRect(
Bounds(FRAME_WIDTH, FRAME_WIDTH, bmIn->Width, bmIn->Height),
bmIn->Canvas,
Bounds(0, 0, bmIn->Width, bmIn->Height));
// Поэтому придётся восстановить эту самую прозрачность
if (bmOut->PixelFormat == pf32bit) {
restoreTransparency(bmOut, Bounds(0, 0, bmOut->Width, FRAME_WIDTH));
restoreTransparency(bmOut, Bounds(0, bmOut->Height - FRAME_WIDTH, bmOut->Width, FRAME_WIDTH));
restoreTransparency(bmOut, Bounds(0, FRAME_WIDTH, FRAME_WIDTH, bmIn->Height));
restoreTransparency(bmOut, Bounds(bmOut->Width - FRAME_WIDTH, FRAME_WIDTH, FRAME_WIDTH, bmIn->Height));
}
bmOut->SaveToFile("out.bmp");
delete bmOut;
delete bmIn;
}
На множестве натуральных чисел деление тоже определено.
Вот только это не глюк - это нормальное поведение, как написано в документации.
на четвертом шаге 1101 следовало бы представить в виде кода - 0 - (-2)
NAT, как я уже написал, корректирует адресанта и какое-то поле (например, исходящий порт) для исходящих пакетов, и адресата и входящий порт для входящих.
Прокс — это вообще часть прикладного протокола. NAT стандартизировали в 1994 году, конверсия Арпанета в Интернет произошла десятилетием раньше, и тогдашние протоколы позволяли давать IP-адрес шлюза, подключённого как к Интернету, так и к внутренней сети. Для HTTP, например, технология называлась «прокси-сервер», для почты — «серверы SMTP/POP», IRC в принципе распределённая технология.