Ver Mensaje Individual
  #5  
Antiguo 14-02-2005
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Reputación: 20
Héctor Randolph Va por buen camino
Cita:
Empezado por Neftalí
Eso me lleva a una pregunta. ¿Está definida esa "escala de sepia"?

Por ejemplo, la escala de Grises se obtiene asignando el mismo valor a los tres colores principales(R,G,B); Variando esos valores (pero siempre iguales en los tres) se obtienen los Grises. ¿Hay algo parecido para la escala de Sepia? ¿debe haber una especificación?
Hola a todos!

Con respecto a esta cuestión sólo quisiera añadir algo, es posible crear una escala de tonos sepia a nuestra conveniencia, es decir asi como hay una escala de 256 tonos de gris podemos crear una escala de 256 tonos en sepia, rojo, amarillo, azul, etc.

Aqui pongo un ejemplo de una escala de 256 tonos en sepia, en realidad solamente tomé un gradiente que comienza con café oscuro y que pasa por amarillos hasta llegar a blanco.

Código Delphi [-]
const
  TSepiaTonos: array[0..255] of TColor=(
  $71730, $71831, $81932, $91A33, $A1B34, $B1C36, $C1D37, $D1E38,
  $E2039, $E213A, $F223C, $10233D, $11243E, $12253F, $132640, $142742,
  $152943, $152A44, $162B45, $172C46, $182D48, $192E49, $1A2F4A, $1B304B,
  $1C324C, $1C334E, $1D344F, $1E3550, $1F3651, $203752, $213854, $223955,
  $233B56, $233C57, $243D58, $253E5A, $263F5B, $27405C, $28415D, $29425E,
  $2A4460, $2A4561, $2B4662, $2C4763, $2D4864, $2E4966, $2F4A67, $304B68,
  $314D69, $314E6A, $324F6C, $33506D, $34516E, $35526F, $365370, $375472,
  $385673, $385774, $395875, $3A5976, $3B5A78, $3C5B79, $3D5C7A, $3E5D7B,
  $3F5F7D, $3F607E, $40617F, $416280, $426381, $436483, $446584, $456685,
  $466886, $466987, $476A89, $486B8A, $496C8B, $4A6D8C, $4B6E8D, $4C6F8F,
  $4D7190, $4D7291, $4E7392, $4F7493, $507595, $517696, $527797, $537898,
  $547A99, $547B9B, $557C9C, $567D9D, $577E9E, $587F9F, $5980A1, $5A81A2,
  $5B83A3, $5B84A4, $5C85A5, $5D86A7, $5E87A8, $5F88A9, $6089AA, $618AAB,
  $628CAD, $628DAE, $638EAF, $648FB0, $6590B1, $6691B3, $6792B4, $6893B5,
  $6995B6, $6996B7, $6A97B9, $6B98BA, $6C99BB, $6D9ABC, $6E9BBD, $6F9CBF,
  $709EC0, $709FC1, $71A0C2, $72A1C3, $73A2C5, $74A3C6, $75A4C7, $76A5C8,
  $77A7CA, $77A7CA, $78A7CA, $79A8CA, $7AA9CB, $7BA9CB, $7CAACC, $7DABCC,
  $7EABCC, $7FACCD, $80ADCD, $81ADCE, $82AECE, $83AFCF, $85B0CF, $86B0CF,
  $87B1D0, $88B2D0, $89B2D1, $8AB3D1, $8BB4D1, $8CB4D2, $8DB5D2, $8EB6D3,
  $8FB7D3, $90B7D4, $91B8D4, $93B9D4, $94B9D5, $95BAD5, $96BBD6, $97BBD6,
  $98BCD7, $99BDD7, $9ABED7, $9BBED8, $9CBFD8, $9DC0D9, $9EC0D9, $A0C1D9,
  $A1C2DA, $A2C2DA, $A3C3DB, $A4C4DB, $A5C5DC, $A6C5DC, $A7C6DC, $A8C7DD,
  $A9C7DD, $AAC8DE, $ABC9DE, $ACC9DF, $AECADF, $AFCBDF, $B0CCE0, $B1CCE0,
  $B2CDE1, $B3CEE1, $B4CEE1, $B5CFE2, $B6D0E2, $B7D0E3, $B8D1E3, $B9D2E4,
  $BBD3E4, $BCD3E4, $BDD4E5, $BED5E5, $BFD5E6, $C0D6E6, $C1D7E7, $C2D7E7,
  $C3D8E7, $C4D9E8, $C5D9E8, $C6DAE9, $C7DBE9, $C9DCE9, $CADCEA, $CBDDEA,
  $CCDEEB, $CDDEEB, $CEDFEC, $CFE0EC, $D0E0EC, $D1E1ED, $D2E2ED, $D3E3EE,
  $D4E3EE, $D5E4EF, $D7E5EF, $D8E5EF, $D9E6F0, $DAE7F0, $DBE7F1, $DCE8F1,
  $DDE9F1, $DEEAF2, $DFEAF2, $E0EBF3, $E1ECF3, $E2ECF4, $E4EDF4, $E5EEF4,
  $E6EEF5, $E7EFF5, $E8F0F6, $E9F1F6, $EAF1F7, $EBF2F7, $ECF3F7, $EDF3F8,
  $EEF4F8, $EFF5F9, $F0F5F9, $F2F6F9, $F3F7FA, $F4F8FA, $F5F8FB, $F6F9FB,
  $F7FAFC, $F8FAFC, $F9FBFC, $FAFCFD, $FBFCFD, $FCFDFE, $FDFEFE, $FFFFFF);


Ahora la cuestión sola es tomar un vector de componentes de color (R,G,B) y aplicar una transformación que convierta a escala de 256 grises como las que han recomendado en este hilo.

Voy a tomar el producto punto como ejemplo:

GRIS=(R,G,B).(0.30,0.59,0.11)=R*0.30+G*0.59+B*0.11

Esto nos dará un valor entre [0..255] correspondiente a un color en la escala de 256 tonos de gris.

Ahora sólo buscamos el equivalente en la escala de 256 tonos sepia que construimos.

NuevoColor=TonosSepia[GRIS]

Un ejemplo de como aplicarlo sería

Código Delphi [-]
type
  TRGBArray = array[0..32767] of TRGBTriple;
  PRGBArray = ^TRGBArray;
procedure TForm1.Button3Click(Sender: TObject);
var
 Row: PRGBArray;
 y,x,Gris: Integer;
begin
  Image1.Picture.Bitmap.PixelFormat := pf24Bit;
  for y := 0 to Image1.Picture.Bitmap.Height - 1 do
  begin
    Row := Image1.Picture.Bitmap.ScanLine[y];
    for x := 0 to Image1.Picture.Bitmap.Width - 1 do
    begin
      Gris           := Round(Row[x].rgbtRed*0.3 + Row[x].rgbtGreen*0.59 + Row[x].rgbtBlue*0.11);
      Row[x].rgbtRed := GetRValue(ColorToRGB(TSepiaTonos[Gris]));
      Row[x].rgbtGreen := GetGValue(ColorToRGB(TSepiaTonos[Gris]));
      Row[x].rgbtBlue := GetBValue(ColorToRGB(TSepiaTonos[Gris]));
    end;
  end;
  Image1.Repaint;
end;

Es tan sólo un ejemplo, la escala de tonos la he creado arbitrariamente y cada quien puede definir su propia escala de acuerdo a su preferencia.

Un saludo y seguimos en contacto
Responder Con Cita