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

Вниз

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 вся ветка

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

Наверх




Память: 0.45 MB
Время: 0.038 c
14-1096286314
Delpher
2004-09-27 15:58
2004.10.24
Изменение значений


14-1096614449
Babay
2004-10-01 11:07
2004.10.24
Книги по Delph 8. Поделитесь впечатлениями.


9-1087849883
MrAngel
2004-06-22 00:31
2004.10.24
Иерархия данных форматов.


1-1097156631
vikoz
2004-10-07 17:43
2004.10.24
Манифест не работает


14-1097138065
malkolinge
2004-10-07 12:34
2004.10.24
Предлагаю обсудить статью про разработку ВЕБ сервисов в Д8





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский