Форум: "Media";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];
ВнизRGB, взять значение пикселя и утановить... Найти похожие ветки
← →
Lefan (2004-07-30 08:40) [0]Приветсвую всех!
Вот хотелось бы попробовать такую штуку sybj...
т.е. загрузить каритнку, взять у нее значение RGB первого пикселя, затем второго и т.д.
а так же в обратную сторону, установить значение RGB первого пикселя ...
куда копать или может уже есть где примерчики?
Заранее благодарен за ответ.
С уважением Алексей.
← →
MegaVolt (2004-07-30 09:31) [1]http://www.delphimaster.ru/articles/pixels/index.html
← →
_Zergey (2004-07-30 09:38) [2]
procedure GlassyBitmapRect(Bmp:TBitmap;R:TRect;
Transparency:byte;TransparentColor:TColor;
GlassyDirection:TGlassyDirection = gdNone);
var
w,h,x,y:integer;
sl:PRGBArray;
b:byte;
tc:COLORREF;
begin
Dec(R.Right);
Dec(R.Bottom);
w:=WidthOf(R);
h:=HeightOf(R);
tc:=ColorToRGB(TransparentColor);
for y:=R.Top to R.Bottom do
begin
sl:=Bmp.ScanLine[y];
for x:=R.Left to R.Right do
with sl[x] do
try
case GlassyDirection of
gdtLR:b:=Round((100-Transparency)/w*x+Transparency);
gdtRL:b:=Round((100-Transparency)/w*(w-x)+Transparency);
gdtTB:b:=Round((100-Transparency)/h*y+Transparency);
gdtBT:b:=Round((100-Transparency)/h*(h-y)+Transparency);
gddLR:b:=Round(Transparency/w*x);
gddRL:b:=Round(Transparency/w*(w-x));
gddTB:b:=Round(Transparency/h*y);
gddBT:b:=Round(Transparency/h*(h-y))
else b:=Transparency
end;
rgbtRed:=((100-b)*GetRValue(tc)+(b*rgbtRed)) div 100;
rgbtGreen:=((100-b)*GetGValue(tc)+(b*rgbtGreen)) div 100;
rgbtBlue:=((100-b)*GetBValue(tc)+(b*rgbtBlue)) div 100
except
end
end
end;
Надеюсь сия процедура просветлит сознание - она создает эффект наблюдения битмапа ч-з цветное стекло...
← →
Анонимщик © (2004-07-30 12:00) [3]Нужно только учитывать, сколько там бит на пиксель. В этом коде предполагается, что 24, видимо.
← →
_Zergey (2004-07-30 12:23) [4]Ладно, если возникли замечания, то скажу, что в самом деле преабразовывать битмап попиксельно удобнее всего при
Bmp.PixelFormat:=pf24bit;
для етого проще всего написать процедурку с преобразованием типа:
procedure DoScanBmp(Bitmap:TBitmap);
var
Temp:TBitmap;
begin
if Bitmap.Empty then Exit;
Temp:=TBitmap.Create;
try
Temp.PixelFormat:=pf24bit;
Temp.Width:=Bitmap.Width;
Temp.Height:=Bitmap.Height;
Temp.Canvas.Draw(0,0,Bitmap);
// process to scan pixels ...
Bitmap.Canvas.Draw(0,0,Temp);
finally
Temp.Free
end
end;
кроме этого могу уточнить, что
type
TGlassyDirection = (gdNone,gdtLR,gdtRL,gdtTB,gdtBT,gddLR,gddRL,gddTB,gddBT);
TRGBArray = packed array [0..0] of TRGBTriple;
PRGBArray = ^TRGBArray;
надеюсь что теперь понятно все :)
← →
Анонимщик © (2004-07-30 12:58) [5]Ну это удобнее, но не всегда допустимо. Впрочем, пусть будет домашним заданием. Здесь в статьях есть что-то вроде быстрого доступа к пикселям, там все написано.
← →
Lefan (2004-07-30 13:26) [6]Спасибо большое... :)
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.034 c