Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

RGB, взять значение пикселя и утановить... [D5, D6, D7, NT4, Win2k, WinXP]


Lefan ©   (2004-07-30 08:40:00) 

Приветсвую всех!
Вот хотелось бы попробовать такую штуку sybj...
т.е. загрузить каритнку, взять у нее значение RGB первого пикселя, затем второго и т.д.
а так же в обратную сторону, установить значение RGB первого пикселя ...

куда копать или может уже есть где примерчики?

Заранее благодарен за ответ.
С уважением Алексей.


Lefan   (2004-07-30 13:26:00) [1]

Спасибо большое...  :)


Анонимщик   (2004-07-30 12:58:00) [2]

Ну это удобнее, но не всегда допустимо. Впрочем, пусть будет домашним заданием. Здесь в статьях есть что-то вроде быстрого доступа к пикселям, там все написано.


_Zergey   (2004-07-30 12:23:00) [3]

Ладно, если возникли замечания, то скажу, что в самом деле преабразовывать битмап попиксельно удобнее всего при
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:00:00) [4]

Нужно только учитывать, сколько там бит на пиксель. В этом коде предполагается, что 24, видимо.


_Zergey   (2004-07-30 09:38:00) [5]

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;

Надеюсь сия процедура просветлит сознание - она создает эффект наблюдения битмапа ч-з цветное стекло...


MegaVolt   (2004-07-30 09:31:00) [6]

http://www.delphimaster.ru/articles/pixels/index.html


Наверх

Титульная страница Поиск, карта сайта Написать письмо