Ошибка: Failed to parse the Currency Converter XML document.
$45 658.20


Ошибка: Failed to parse the Currency Converter XML document.
$19 044.92


Ошибка: Failed to parse the Currency Converter XML document.
$1 412.48


Интерполяция изображений в Delphi

Этот алгоритм увеличивает изображение в произвольное количество раз при помощи билинейной интерполяции. При создании нового изображения каждой его точке с целыми координатами (x,y) сопоставляется точка исходного изображения с дробными координатами (xo, yo), xo=x/dx, yo=y/dy (dx и dy — коэффициенты увеличения). Далее нужно провести поверхность через точки, лежащие вокруг (xo, yo). Цвет здесь рассматривается как третье измерение. На поверхности ищется точка с координатами (xo, yo) и ее цвет понимается за цвет точки (x,y) получаемого изображения.

Этот алгоритм хорошо работает при целых или больших коэффициентах увеличения. Но резкие границы размываются. Для уменьшения изображения этот алгоритм также не подходит.


1. Интерполяция изображения
procedure Interpolate(var bm: TBitMap; dx, dy: single);
var
bm1: TBitMap;
z1, z2: single;
k, k1, k2: single;
x1, y1: integer;
c: array [0..1, 0..1, 0..2] of byte;
res: array [0..2] of byte;
x, y: integer;
xp, yp: integer;
xo, yo: integer;
col: integer;
pix: TColor;
begin
bm1 := TBitMap.Create;
bm1.Width := round(bm.Width * dx);
bm1.Height := round(bm.Height * dy);

for y := 0 to bm1.Height — 1 do begin
for x := 0 to bm1.Width — 1 do begin
xo := trunc(x / dx);
yo := trunc(y / dy);
x1 := round(xo * dx);
y1 := round(yo * dy);

for yp := 0 to 1 do
for xp := 0 to 1 do begin
pix := bm.Canvas.Pixels[xo + xp, yo + yp];
c[xp, yp, 0] := GetRValue(pix);
c[xp, yp, 1] := GetGValue(pix);
c[xp, yp, 2] := GetBValue(pix);
end;

for col := 0 to 2 do begin
k1 := (c[1,0,col] — c[0,0,col]) / dx;
z1 := x * k1 + c[0,0,col] — x1 * k1;
k2 := (c[1,1,col] — c[0,1,col]) / dx;
z2 := x * k2 + c[0,1,col] — x1 * k2;
k := (z2 - z1) / dy;
res[col] := round(y * k + z1 - y1 * k);
end;
bm1.Canvas.Pixels[x,y] := RGB(res[0], res[1], res[2]);
end;
Form1.Caption := IntToStr(round(100 * y / bm1.Height)) + ′%′;
Application.ProcessMessages;
if Application.Terminated then Exit;
end;
bm := bm1;
end;

const
dx = 5.5;
dy = 5.5;

procedure TForm1.Button1Click(Sender: TObject);
const
w = 50;
h = 50;
var
bm: TBitMap;
can: TCanvas;
begin
bm := TBitMap.Create;
can := TCanvas.Create;
can.Handle := GetDC(0);
bm.Width := w;
bm.Height := h;
bm.Canvas.CopyRect(Bounds(0, 0, w, h), can, Bounds(0, 0, w, h));
ReleaseDC(0, can.Handle);
Interpolate(bm, dx, dy);
Form1.Canvas.Draw(0, 0, bm);
Form1.Caption := ′?x: ′? + FloatToStr(dx) +
′ y: ′ + FloatToStr(dy) +
′ width: ′ + IntToStr(w) +
′ height: ′ + IntToStr(h);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
bm: TBitMap;
begin
if OpenDialog1.Execute then
bm.LoadFromFile(OpenDialog1.FileName);
Interpolate(bm, dx, dy);
Form1.Canvas.Draw(0, 0, bm);
Form1.Caption := ′?x: ′? + FloatToStr(dx) +
′ y: ′ + FloatToStr(dy) +
′ width: ′ + IntToStr(bm.Width) +
′ height: ′ + IntToStr(bm.Height);
end;

 

Интересное

Основы работы с базами данных
Умение обращаться с файлами данных — чуть ли не одна из самых важных ступений в обучении программированию на Visual Basic! Здесь я постараюсь выложить только самые основные приёмы работы с...
Подробнее...
Метатэги
Здесь можно расслабиться. :)В противоположность многочисленным утверждениям о важности правильного использования тэгов META, вам предстоит сейчас узнать о том, что это не так уж и важно.
Подробнее...
DNS — доменная система имен
domain name system (dns), что переводится на русский язык как «доменная система имен», позволяет значительно облегчить пользователям процесс работы в Интернете тем, что им уже не нужно запоминать...
Подробнее...
Увеличиваем быстродействие...
Однако, по умолчанию, вне зависимости от установленного объема памяти, Windows XP нерационально использует дополнительный объем памяти, что значительно ограничивает производительность системы в...
Подробнее...
Интернет - трагедия или...
Доброго времени суток, уважаемый читатель. Я бы хотел поведать тебе, да и всем людям, мою точку зрения на влияние Интернета на людей, да и вообще, об Интернете в целом.Естественно, такую тему...
Подробнее...
Java обгоняет по...
Одним из главных недостатков языка Java традиционно считается невысокая скорость работы программ по сравнению с приложениями на языке С++. И для приложений, где переносимость между платформами...
Подробнее...
FAQ по файлу подкачки
F.A.Q. по файлу подкачки.Ответы на вопросы:-Что такое файл подкачки? -Как определить требуемый объем swap-файла? -Где располагать файл подкачки? -Надо-ли фиксировать максимальный размер файла...
Подробнее...
Введение в протокол UDP
UDP (User Datagram Protocol, Протокол дейтаграмм пользователя) предназначен для обмена дейтаграммами между процессами компьютеров, входящих в единую сеть с коммутацией пакетов. В качестве...
Подробнее...
Обзор ОС Windows Server...
Сервер Windows Server 2003 Datacenter Edition разработан специально для удовлетворения потребностей бизнеса в высокой масштабируемости, доступности и надежности и позволяет создавать...
Подробнее...
Delphi и Flash. Совмещение...
Разве возможно совместить Флэш-ролики и Дельфи-приложения. Раньше я думал что НЕТ. Но теперь я знаю не только, что это возможно, но и знаю как это делается!!! И сейчас я вам расскажу об этом....
Подробнее...