| 
| 
 | Вопрос # 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]:так я подумал мне помогут разобрать его...)) |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |