Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.17;
Скачать: CL | DM;

Вниз

Сдвиг Red канала на X, Y пикселей   Найти похожие ветки 

 
h8394E   (2006-05-04 02:10) [0]

Доброго времени суток. А как сдвинуть канал Red на определённое число пикселей?


 
antonn ©   (2006-05-04 07:02) [1]

если в TBitmap, то воспользоваться scanline()


 
Jeer ©   (2006-05-04 10:06) [2]

h8394E   (04.05.06 02:10)


> как сдвинуть канал Red


В какую сторону, смотря.


 
antonn ©   (2006-05-04 15:12) [3]

procedure Sdvig_chanal(_B_out:Tbitmap; _x,_y:integer; c:byte);
var x, y, x_cor,y_cor,x_corS,y_corS: Integer; RowOut,RowIn: PRGBArray;
   _r,_b,_g:integer; rc1, bc1, gc1:byte;
   _Rect:TRect; BT:Tbitmap;
begin
_Rect.Left:=_x;  _Rect.Top:=_y;
_Rect.Right:=_B_out.Width+_x;  _Rect.Bottom:=_B_out.Height+_y;
if _Rect.Left<0 then _Rect.Left:=0;
if _Rect.Top<0 then _Rect.Top:=0;
if _Rect.Right>_B_out.Width then _Rect.Right:=_B_out.Width;
if _Rect.Bottom>_B_out.Height then _Rect.Bottom:=_B_out.Height;

BT:=TBitmap.Create;
try
 BT.Assign(_B_out);
 BT.PixelFormat:=pf24bit;
_B_out.PixelFormat:=pf24bit;
 for y:=_Rect.Top to _Rect.Bottom-1 do begin
    RowOut:= _B_out.ScanLine[y];
    RowIn:= BT.ScanLine[y-_y];
   for x:=_Rect.Left to _Rect.Right-1 do begin
        case c of
         0: RowOut[x].rgbtRed:=RowIn[x-_x].rgbtRed;
         1: RowOut[x].rgbtGreen:=RowIn[x-_x].rgbtGreen;
         2: RowOut[x].rgbtBlue:=RowIn[x-_x].rgbtBlue;
        end;
   end;
 end;
finally
 Bt.Free;
end;
end;


немного коряво, но работает...
последний параметр - выбирает канал (0-R, 1-G, 2-B), картинка преобразуется в pf24bit.
для сдвига альфаканала можно доработать самому.


 
antonn ©   (2006-05-04 15:13) [4]

ах да, к предыдущему посту:
const
 Pixels = MaxInt div SizeOf(TRGBTriple);
type
 PRGBArray = ^TRGBArray;
 TRGBArray = array[0..Pixels-1] of TRGBTriple;



Страницы: 1 вся ветка

Текущий архив: 2006.12.17;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.042 c
15-1164759080
vasIzmax
2006-11-29 03:11
2006.12.17
Как быть?


1-1162460119
NeyroSpace
2006-11-02 12:35
2006.12.17
Как узнать что компьютер простаивает n минут?


5-1145023755
SMAC
2006-04-14 18:09
2006.12.17
Binary component


2-1164689108
Silica
2006-11-28 07:45
2006.12.17
Рисование многоугольников в Delphi


15-1164797826
Empleado
2006-11-29 13:57
2006.12.17
Задачи с незапоминающимися решениями