/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Konverter RGB til gråtoner?
Fra : anger


Dato : 28-12-00 00:28

Hej,

Er der nogen som ved hvordan man konvertere RGB til gråtoner?

/ Anger


 
 
xxx (28-12-2000)
Kommentar
Fra : xxx


Dato : 28-12-00 01:19

Hej Anger,

Dette skulle klare jobbet



function RgbToGray(Source: TColor) : TColor;

var Target: Byte;

begin

Target := Round((0.30 * GetRValue(Source)) + (0.59 * GetGValue(Source)) +
(0.11 * GetBValue(Source)));

Result := RGB(Target, Target, Target);

end;

/paf




Rasmus Klitgaard-Nie~ (28-12-2000)
Kommentar
Fra : Rasmus Klitgaard-Nie~


Dato : 28-12-00 16:09

xxx wrote:
>
> Hej Anger,
>
> Dette skulle klare jobbet
>
> function RgbToGray(Source: TColor) : TColor;
>
> var Target: Byte;
>
> begin
>
> Target := Round((0.30 * GetRValue(Source)) + (0.59 * GetGValue(Source)) +
> (0.11 * GetBValue(Source)));

target:=(GetRValue(Source)+GetGValue(Source)+GetBValue(Source)) div 3;
// Er en SMULE hurtigere :)

>
> Result := RGB(Target, Target, Target);
>
> end;
>
> /paf


--
>o ********* PINKY! aka. Rasmus Klitgaard-Nielsen *********
<()> **** Mad Programmer - Commodore Freak - ABP regular ****
^^ "Can't sing. Can't dance. Can handle a sword a little."
-- Victor's resume (Terry Pratchett, Moving Pictures)

Michael Hansen (29-12-2000)
Kommentar
Fra : Michael Hansen


Dato : 29-12-00 00:44

Dette skulle være noget hurtigere end de tidligere (og er, ligesom den
første, RGB korrigeret, dvs ikke bare (Rød+Grøn+Blå) div 3)

Hilsen Michael Hansen.

procedure TForm1.ConvertImage(bitmap: TBitmap);
type
TRGBTripleArray = array [0..32767] of TRGBTriple;
PRGBTripleArray = ^TRGBTripleArray;
var
PBitmap : array of PRGBTripleArray; {Pointere til bitmapbilledet}
SH, x,y,xmax,ymax : integer;
begin
xmax:=bitmap.width-1;
ymax:=bitmap.height-1;
SetLength(PBitmap,ymax);
for y:=0 to ymax do
begin
PBitmap[y]:=Bitmap.Scanline[y]; {adresserer pointer´ne til
bitmapindholdet}
for x:=0 to xmax do
begin
sh:=Round(
(0.30 * PBitmap[y,x].rgbtRed)+
(0.59 * PBitmap[y,x].rgbtGreen)+
(0.11 * PBitmap[y,x].rgbtBlue) );
PBitmap[y,x].rgbtRed:=sh;
PBitmap[y,x].rgbtGreen:=sh;
PBitmap[y,x].rgbtBlue:=sh;
end;
end;
end;

"anger" <anger@kurt.com> wrote in message
news:UVu26.24924$9t1.278751@twister.sunsite.dk...
> Hej,
>
> Er der nogen som ved hvordan man konvertere RGB til gråtoner?
>
> / Anger
>



N/A (12-01-2001)
Kommentar
Fra : N/A


Dato : 12-01-01 01:44



N/A (12-01-2001)
Kommentar
Fra : N/A


Dato : 12-01-01 01:44



Michael Hansen (12-01-2001)
Kommentar
Fra : Michael Hansen


Dato : 12-01-01 01:44

Ingen tvivl om det er hurtigere og så med lidt optimeret inline asm til
gennemløb af data... jo da det ville gå stærkere...

Michael

"Rune Andersen" <emche@ready.dk> wrote in message
news:0xF56.6651$zH2.275959@news000.worldonline.dk...
>
> Hmm, det ser ikke ud til at være særligt hurtigt?
> Og det virker kun hvis det er 24 bit, mon ikke det er hurtigere hvis det
er
> ren integer?
> Fx noget i retning af:
> rød: 1/4 + 1/16 = 0,3125
> grøn: 1/2 + 1/8 = 0,5625
> blå: 1/8 = 0,125
>
> sh=red shr 2 + red shr 4 + green shr 1 + green shr 3 + blue shr 3
>
> Det er selvfølgelig ikke helt samme værdier, men ret sikkert en del
> hurtigere, og man kan jo tilpasse det lidt mere, ved at splitte mere op.
> Ellers kan man gøre noget ala:
>
> sh = (30 * red) div 100 + (59 * green) div 100 + (11 * blue) div 100
>
> Lige bortset fra at man kan få overløb. Men man kan jo putte byte'n over i
> en word, så skulle den være klaret.
>
> 16 bit billeder kræver lidt mere bit roderri, fordi den er repræsenteret
som
> 565, men man kan gøre det samme - men måske smartere fordi man kan gøre
det
> på alle bits samtidig.
>
> blot lidt idéer
>
> mvh
> Rune
>
>
>



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste