Mega Code Archive

 
Categories / Delphi / Graphic
 

Change the color channels of a bitmap

Title: change the color channels of a bitmap? {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Mit dem folgenden Code kann die Werte der einzelnen Farbkanäle (Rot, Grün, Blau) verändern. So lassen sich leicht fantastische Effekte erzielen. Parameter: - Bitmap: TBitmap Erwartet ein TBitmap auf dem die Änderungen vollzogen werden sollen. - Red: Integer Erwartet einen Integer der den neuen Farbwert bestimmt. Der Wert wird zu dem alten Farbwert addiert. Beträgt der Wert 0, wird keine Änderung am Farbkanal vorgenommen. - Green: Integer; Erwartet einen Integer der den neuen Farbwert bestimmt. Der Wert wird zu dem alten Farbwert addiert. Beträgt der Wert 0, wird keine Änderung am Farbkanal vorgenommen. - Blue: Integer; Erwartet einen Integer der den neuen Farbwert bestimmt. Der Wert wird zu dem alten Farbwert addiert. Beträgt der Wert 0, wird keine Änderung am Farbkanal vorgenommen. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ The following Code allows you to change the value of the RGB-Colorchannels (Red, Green, Blue). So you can simply create fantastic effects on your pictures. Parameters: - Bitmap: TBitmap Needs a TBitmap with a picture to read the old values and draw the changes. - Red: Integer A Integer which set the new value of the Color-channel. The value will be add to the old value. If the value is 0, there will be no change in the Color-channel. - Green: Integer; A Integer which set the new value of the Color-channel. The value will be add to the old value. If the value is 0, there will be no change in the Color-channel. - Blue: integer; A Integer which set the new value of the Color-channel. The value will be add to the old value. If the value is 0, there will be no change in the Color-channel. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Saturday, 2002-09-07 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ } function SetRGBChannelValue(Bitmap: TBitmap; Red, Green, Blue: Integer): Boolean; var i, j: Integer; rgbc: array[0..2] of Byte; c: TColor; r, g, b: Byte; begin //Wenn keine Änderungen vorgenommen werden, Vorgang beenden: //If there is no change, exit: if (Red = 0) and (Green = 0) and (Blue = 0) then begin Result := False; Exit; end; for i := 0 to Bitmap.Height do begin for j := 0 to Bitmap.Width do begin // Get the old Color c := Bitmap.Canvas.Pixels[j, i]; // Splitt the old color into the different colors: rgbc[0] := GetRValue(c); rgbc[1] := GetGValue(c); rgbc[2] := GetBValue(c); //Check that there is no "new" color while the addition //of the values: if not (rgbc[0] + Red and not (rgbc[0] + Red 255) then rgbc[0] := rgbc[0] + Red; if not (rgbc[1] + Green and not (rgbc[1] + Green 255) then rgbc[1] := rgbc[1] + Green; if not (rgbc[2] + Blue and not (rgbc[2] + Blue 255) then rgbc[2] := rgbc[2] + Blue; r := rgbc[0]; g := rgbc[1]; b := rgbc[2]; //set the new color back to the picture: Bitmap.Canvas.Pixels[j, i] := RGB(r, g, b); end; end; Result := True; end; //Beispiel, wie man die Funktion benutzen kann: //Example, how to use it: procedure TForm1.Button1Click(Sender: TObject); begin SetColorValue(Image1.picture.Bitmap, Spinedit1.Value, Spinedit2.Value, Spinedit3.Value); end;