|
Вопрос # 3 794/ вопрос открыт / |
|
Здравствуйте! увожаемые эксперты...
ниже приведен код надеюсь вы поможите разобраться... я этот код в нете нашел... суть в следующим... код должен делать изображение более четким... я его как смог одоптировал к своей проге но резутьтата нет... может кто может помочь...
Приложение: Переключить в обычный режим- var i, j, k, re, gr, bl, bmh, bmw, inta, intb, BytesPerScanline: integer;
- sr: array[0..2] of PByte;
- st: array[0..4] of pRGBTriple;
- tr: PByte;
- tt, p: pRGBTriple;
- beta, alpha: Single;
- begin
- Assert((image1.Width > 2) and (image1.Height > 2), 'Bitmap must be at least 3x3');
- Assert((alpha > 0) and (alpha < 6), 'Alpha must be >1 and <6');
- beta := (alpha - 1) / 5;
- intb := round(beta * $10000);
- inta := round(alpha * $10000);
- image1.Picture.Bitmap.PixelFormat := pf24bit;
- image2.Picture.Bitmap.PixelFormat := pf24bit;
- image2.Width := image1.Width;
- image2.Height := image1.Height;
-
- bmw := image1.Width - 2;
- bmh := image1.Height - 2;
- BytesPerScanline := (((bmw + 2) * 24 + 31) and not 31) div 8;
- tr := image1.Picture.Bitmap.ScanLine[0];
- tt := pRGBTriple(tr);
- sr[0] := image1.Picture.Bitmap.ScanLine[0];
- st[0] := pRGBTriple(sr[0]);
- for j := 0 to bmw + 1 do
- begin
- tt^ := st[0]^;
- inc(tt);
- inc(st[0]);
- end;
- sr[1] := PByte(integer(sr[0]) - BytesPerScanline);
- sr[2] := PByte(integer(sr[1]) - BytesPerScanline);
- for i := 1 to bmh do
- begin
- Dec(tr, BytesPerScanline);
- tt := pRGBTriple(tr);
- st[0] := pRGBTriple(integer(sr[0]) + 3); //top
- st[1] := pRGBTriple(sr[1]); //left
- st[2] := pRGBTriple(integer(sr[1]) + 3); //center
- st[3] := pRGBTriple(integer(sr[1]) + 6); //right
- st[4] := pRGBTriple(integer(sr[2]) + 3); //bottom
- tt^ := st[1]^; //1st col unchanged
- for j := 1 to bmw do
- begin
- re := 0; gr := 0; bl := 0;
- for k := 0 to 4 do
- begin
- re := re + st[k]^.rgbtRed;
- gr := gr + st[k]^.rgbtGreen;
- bl := bl + st[k]^.rgbtBlue;
- inc(st[k]);
- end;
- re := (intb * re + $7FFF) shr 16;
- gr := (intb * gr + $7FFF) shr 16;
- bl := (intb * bl + $7FFF) shr 16;
- p := pRGBTriple(st[1]);
- re := (inta * p^.rgbtRed + $7FFF) shr 16 - re;
- gr := (inta * p^.rgbtGreen + $7FFF) shr 16 - gr;
- bl := (inta * p^.rgbtBlue + $7FFF) shr 16 - bl;
- inc(tt);
- if re < 0 then re := 0 else if re > 255 then re := 255;
- if gr < 0 then gr := 0 else if gr > 255 then gr := 255;
- if bl < 0 then bl := 0 else if bl > 255 then bl := 255;
- tt^.rgbtRed := re;
- tt^.rgbtGreen := gr;
- tt^.rgbtBlue := bl;
- end;
- inc(tt);
- inc(st[1]);
- tt^ := st[1]^; //Last col unchanged
- sr[0] := sr[1];
- sr[1] := sr[2];
- Dec(sr[2], BytesPerScanline);
- end;
- Dec(tr, BytesPerScanline);
- tt := pRGBTriple(tr);
- st[1] := pRGBTriple(sr[1]);
- for j := 0 to bmw + 1 do
- begin
- tt^ := st[1]^;
- inc(tt); inc(st[1]);
- end;
 |
Вопрос задал: Fox Nick (статус: Посетитель)
Вопрос отправлен: 20 февраля 2010, 21:33
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 9; последнее сообщение — 21 февраля 2010, 12:11; участников в обсуждении: 3.
|
Егор (статус: 10-ый класс), 20 февраля 2010, 21:54 [#1]:
это весь код? или это код какого-то обработчика? тогда где заголовок процедуры/функции?
а вот здесь:
Цитата (Fox Nick):
var ...
beta, alpha: Single;
begin
Assert((image1.Width > 2) and (image1.Height > 2), 'Bitmap must be at least 3x3');
Assert((alpha > 0) and (alpha < 6), 'Alpha must be >1 and <6');
beta := (alpha - 1) / 5;
intb := round(beta * $10000);
inta := round(alpha * $10000);
...
я вижу попытку работы с неинициализированными переменными
Assert((alpha > 0) and (alpha < 6), 'Alpha must be >1 and <6');
чему равно значение alpha? я думаю, что нулю не важно при этом, чему равен уровень прозрачности картинки
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Fox Nick (статус: Посетитель), 20 февраля 2010, 22:09 [#2]:
вообщем жтот кусок я совсем не понял... я думал что это просто описание параметров для картинки...
код весь... я его просто в кнопку это все вставил...))
и вот еще ошибку временами выдает... как раз по этой строке, с неинициализированными переменными...
|
|
Егор (статус: 10-ый класс), 20 февраля 2010, 22:15 [#3]:
Цитата (Fox Nick):
ошибку временами выдает
правильно выдаёт - переменная альфа по умолчанию равна нулю. код ДОЛЖЕН выдавать сообщение об ошибке, ибо "Alpha must be >1 and <6"
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Fox Nick (статус: Посетитель), 20 февраля 2010, 23:10 [#4]:
да но это не самое важное важнее было бы разобратся почему когда ошибок не выдает с картинкой всеравно нечего не происходит... или это
|
|
Fox Nick (статус: Посетитель), 20 февраля 2010, 23:11 [#5]:
из за Alpha...))
|
|
Fox Nick (статус: Посетитель), 20 февраля 2010, 23:14 [#6]:
может есть идеи как все это до ума довести... для начала надо из этого кода все лишнее убрать или понять что зачем нужно...
|
|
min@y™ (статус: Доктор наук), 21 февраля 2010, 09:41 [#7]:
Имхо, надо сначала разобраться, как работает код, а не тупо копипастить его к себе в программу.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Егор (статус: 10-ый класс), 21 февраля 2010, 10:29 [#8]:
Цитата (Fox Nick):
понять что зачем нужно
вот это - умная мысль
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Fox Nick (статус: Посетитель), 21 февраля 2010, 12:11 [#9]:
так я подумал мне помогут разобрать его...))
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|