Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
14-1096633204
QuasiLamo
2004-10-01 16:20
2004.10.24
Формат CSV


14-1096880228
Sour
2004-10-04 12:57
2004.10.24
Где найти алгоритмы методов краткосрочного прогнозирования


1-1096986327
Поручик
2004-10-05 18:25
2004.10.24
Record To File


11-1081970724
Михаил
2004-04-14 23:25
2004.10.24
Работа с датой и временем


1-1097330321
CoolMan
2004-10-09 17:58
2004.10.24
Скрытый поиск по маске с копированием





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский