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

Вниз

sepia   Найти похожие ветки 

 
Crazy_Diman ©   (2005-10-30 13:25) [0]

function bmptosepia(const bmp: TBitmap; depth: Integer): Boolean;
var
p0:pbytearray;

color,color2:longint;
r,g,b,rr,gg:byte;
Gray,h,w:integer;
begin
 for h := 0 to bmp.height-1 do
 begin
   p0:=bmp.scanline[h];

   for w := 0 to bmp.width-1 do
   begin

//first convert the bitmap to greyscale
    Gray:=Round(p0[w*3]*0.3+p0[w*3+1]*0.59+p0[w*3+2]*0.11);
    p0[w*3]:=Gray;
     p0[w*3+1]:=Gray;
     p0[w*3+2]:=Gray;
//then convert it to sepia
   color:=colortorgb(bmp.Canvas.pixels[w,h]);
   r:=getrvalue(color);
   g:=getgvalue(color);
   b:=getbvalue(color);
   rr:=r+(depth*2);
   gg:=g+depth;
   if rr <= ((depth*2)-1) then
   rr:=255;
   if gg <= (depth-1) then
   gg:=255;
   bmp.canvas.Pixels[w,h]:=RGB(rr,gg,b);
   end;
 end;
end;


нашол пример в Интернете  он  мне понравился решил я отемизировать  
получилась У меня так
function bmptosepiaa(const bmp: TBitmap; depth: Integer): Boolean;
var
p0:pbytearray;

color,color2:longint;
r,g,b,rr,gg:byte;
Gray,h,w:integer;
begin
 for h := 0 to bmp.height-1 do
 begin
   p0:=bmp.scanline[h];

   for w := 0 to bmp.width-1 do
   begin

//first convert the bitmap to greyscale
    Gray:=Round(p0[w*3]+0.81);
    p0[w*3]:=Gray;
     p0[w*3+1]:=Gray;
     p0[w*3+2]:=Gray;
//then convert it to sepia
   color:=colortorgb(bmp.Canvas.pixels[w,h]);
   r:=getrvalue(color);
   g:=getgvalue(color);
   b:=getbvalue(color);
   rr:=r+(depth*2);
   gg:=g+depth;
   if rr <= ((depth*2)-1) then
   rr:=255;
   if gg <= (depth-1) then
   gg:=255;
   bmp.canvas.Pixels[w,h]:=RGB(rr,gg,b);
   end;
 end;
end;
но он мне выдает не тот результат   на рисунке

помогите найти Ошибку


 
Antonn ©   (2005-10-30 15:02) [1]

замени bmp.canvas.Pixels[w,h] сканлайном

procedure PrepareBitmapSerpia(_B_out:Tbitmap);
const
 Pixels = MaxInt div SizeOf(TRGBTriple);
type
 PRGBArray = ^TRGBArray;
 TRGBArray = array[0..Pixels-1] of TRGBTriple;
var x, y: Integer; RowOut: PRGBArray;
   _r,_b,_g:integer;
begin
 _B_out.PixelFormat:=pf24bit;
 for y:=0 to _B_out.Height-1 do begin
    RowOut:= _B_out.ScanLine[y];
   for x:=0 to _B_out.Width-1 do begin
         _r:=trunc( RowOut[x].rgbtRed*0.393+RowOut[x].rgbtGreen*0.769+RowOut[x].rgbtBlue*0.189);
        if _r>255 then _r:=255; if _r<0 then _r:=0;
         _g:=trunc( RowOut[x].rgbtRed*0.349+RowOut[x].rgbtGreen*0.686+RowOut[x].rgbtBlue*0.168);
        if _g>255 then _g:=255; if _g<0 then _g:=0;
         _b:=trunc( RowOut[x].rgbtRed*0.272+RowOut[x].rgbtGreen*0.534+RowOut[x].rgbtBlue*0.131);
        if _b>255 then _b:=255; if _b<0 then _b:=0;
         RowOut[x].rgbtRed:=_r;
         RowOut[x].rgbtGreen:=_g;
         RowOut[x].rgbtBlue:=_b;
   end;
 end
end;


 
Antonn ©   (2005-10-30 15:03) [2]

к [1]
ах да, ее тоже можно оптимизировать:)


 
Crazy_Diman ©   (2005-10-30 15:13) [3]

:)   все переписал   я просто хадел как быстро получиль ху*ня
procedure bmptosepia( Bm:TBitmap;width:Integer);
var
 TargetRow             :pRGBArray;
 r,g,b     :Integer;
 Row,Col     :Integer;

begin
for Row := 0 to Bm.Height - 1 do
     begin
        TargetRow:=Bm.ScanLine[Row];
          for Col := 0 to Bm.Width - 1 do
       begin
         r:=0;g:=0;b:=0;
         r:=trunc( TargetRow[Col].rgbtRed*0.393+TargetRow[Col].rgbtGreen*0.769+TargetRow[Col].rgbtBlue*0.189);
 if r>255 then r:=255;
         g:=trunc( TargetRow[Col].rgbtRed*0.349+TargetRow[Col].rgbtGreen*0.686+TargetRow[Col].rgbtBlue*0.168);
        if g>255 then g:=255;
         b:=trunc( TargetRow[Col].rgbtRed*0.272+TargetRow[Col].rgbtGreen*0.534+TargetRow[Col].rgbtBlue*0.131);
        if b>255 then b:=255;
    TargetRow[Col].rgbtRed  := r;
         TargetRow[Col].rgbtGreen  := g;
         TargetRow[Col].rgbtBlue  := b;
         TargetRow[Col].rgbtRed:=r+(width*2);
      TargetRow[Col].rgbtGreen:=g+width;
      if  TargetRow[Col].rgbtRed <= ((width*2)-1) then
  TargetRow[Col].rgbtRed:=255;
  if TargetRow[Col].rgbtGreen <= (width-1) then
  TargetRow[Col].rgbtGreen:=255;
end;
          end;
           end;


 
Antonn ©   (2005-10-30 16:11) [4]

Crazy_Diman ©   (30.10.05 15:13) [3]
TargetRow[Col].rgbtRed:=r+(width*2);
     TargetRow[Col].rgbtGreen:=g+width;
     if  TargetRow[Col].rgbtRed <= ((width*2)-1) then
 TargetRow[Col].rgbtRed:=255;
 if TargetRow[Col].rgbtGreen <= (width-1) then
 TargetRow[Col].rgbtGreen:=255;

а это зачем?


 
Crazy_Diman ©   (2005-10-31 10:38) [5]

нужно  а твой пример глючит  бывает какуето ху*ню показывает


 
Antonn ©   (2005-10-31 11:17) [6]

Crazy_Diman ©   (31.10.05 10:38) [5]
бывает какуето ху*ню показывает

да ну?


 
Crazy_Diman ©   (2005-10-31 11:35) [7]

смотри www.program2006.narod.ru/2.jpg   зайдив чат поговорим


 
Crazy_Diman ©   (2005-10-31 11:59) [8]

Antonn ©   мне лично похуй каким примером пользовется суравно  буду переписывать   . Спасибо  за точто помог



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

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

Наверх




Память: 0.47 MB
Время: 0.044 c
3-1128493285
Juice
2005-10-05 10:21
2005.11.20
Проблемка с удалением записей из набора данных


2-1128177159
Giga
2005-10-01 18:32
2005.11.20
SMTP сервер


4-1126989851
NikNet
2005-09-18 00:44
2005.11.20
Запрет на выключение/перезагрузки, компьютера


3-1129092338
Anics
2005-10-12 08:45
2005.11.20
Кто-нибудь пробовал в TDBGrid устроить автонумерацию строк?


3-1128684469
Weare
2005-10-07 15:27
2005.11.20
Сервер RPC недоступен





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