Ir al contenido


Foto

Modificar un png a escala de grises


  • Por favor identifícate para responder
3 respuestas en este tema

#1 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 22 enero 2009 - 01:07

Como puedo modificar una imagen png que esta en colores para que se vea en escala de grises. Esto lo quiero hacer para poner las imagenes de escala de grises en un imagelist conectado a un actionmanager para cuando los controles esten deshabilitados.


Saludos
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 22 enero 2009 - 01:17

Hola

Tal vez te puede servir este truco de cHackAll



delphi
  1. //Crear Thumbnails en blanco y negro de archivos JPEG
  2. uses jpeg;
  3.  
  4. function jpgToGrayThumbnail(const FileName: string; Width: Integer): TBitmap;
  5. var
  6. jpg: TJPEGImage;
  7. Color: PCardinal;
  8. Count, y, x, Gray: Cardinal;
  9. begin
  10. jpg := TJPEGImage.Create;
  11. jpg.LoadFromFile(FileName);
  12. Result := TBitmap.Create;
  13. Result.Width := Width;
  14. with Result do
  15.   begin
  16.   Height := (Width * jpg.Height) div jpg.Width;
  17.   PixelFormat := pf32Bit;
  18.   Canvas.StretchDraw(Rect(0, 0, Width - 1, Height - 1), jpg);
  19.   Count := Abs(Cardinal(ScanLine[1]) - Cardinal(ScanLine[0])) div 4;
  20.   y := Height;
  21.   repeat Dec(y);
  22.     Color := ScanLine[y];
  23.     x := Count;
  24.     repeat Dec(x);
  25.     Gray := (GetRValue(Color^) + GetGValue(Color^) + GetBValue(Color^)) div 3;
  26.     Color^ := RGB(Gray, Gray, Gray);
  27.     Inc(Color);
  28.     until x = 0;
  29.   until y = 0;
  30. //  SaveToFile('cache.bmp'); // Opcional
  31.   end;
  32. jpg.Free;
  33. end;
  34.  
  35. procedure TForm1.Button1Click(Sender: TObject);
  36. begin
  37.   Image1.Picture.Assign(jpgToGrayThumbnail('e:\Mis imágenes\0002.jpg', 80));
  38. end;[code=delphi:0]
  39.  
  40. Salud OS


  • 0

#3 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 22 enero 2009 - 01:20

Gracias egostar lo voy a probar
  • 0

#4 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 22 enero 2009 - 02:07

Así me quedo por si alguien lo llega a ocupar


delphi
  1. uses pngimage;
  2.  
  3. function pngToGray(const FileName: string): TBitmap;
  4. var
  5.   png: TPNGImage;
  6.   Color: PCardinal;
  7.   Count, y, x, Gray: Cardinal;
  8. begin
  9.   png := TPNGImage.Create;
  10.   png.LoadFromFile(FileName);
  11.   png.SaveToFile('cache.png');
  12.   Result := TBitmap.Create;
  13.   Result.Width := png.Width;
  14.   with Result do
  15.   begin
  16.     Height := png.Height;
  17.     PixelFormat := pf32Bit;
  18.     Canvas.StretchDraw(Rect(0, 0, Width - 1, Height - 1), png);
  19.     Count := Abs(Cardinal(ScanLine[1]) - Cardinal(ScanLine[0])) div 4;
  20.     y := Height;
  21.     repeat Dec(y);
  22.       Color := ScanLine[y];
  23.       x := Count;
  24.       repeat Dec(x);
  25.         Gray := (GetRValue(Color^) + GetGValue(Color^) + GetBValue(Color^)) div 3;
  26.         Color^ := RGB(Gray, Gray, Gray);
  27.         Inc(Color);
  28.       until x = 0;
  29.     until y = 0;
  30.     //SaveToFile('cache.bmp'); // Opcional
  31.   end;
  32.   png.Assign(Result);
  33.   png.SaveToFile('cache.png');
  34.   png.Free;
  35. end;
  36.  
  37. procedure TForm1.Button1Click(Sender: TObject);
  38. begin
  39.   Image1.Picture.Assign(pngToGray('0002.png'));
  40. end;


  • 0




IP.Board spam blocked by CleanTalk.