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

Modificar un png a escala de grises
Started by
axesys
, Jan 22 2009 01:07 PM
3 replies to this topic
#1
Posted 22 January 2009 - 01:07 PM
#2
Posted 22 January 2009 - 01:17 PM
Hola
Tal vez te puede servir este truco de cHackAll
Tal vez te puede servir este truco de cHackAll
delphi
//Crear Thumbnails en blanco y negro de archivos JPEG uses jpeg; function jpgToGrayThumbnail(const FileName: string; Width: Integer): TBitmap; var jpg: TJPEGImage; Color: PCardinal; Count, y, x, Gray: Cardinal; begin jpg := TJPEGImage.Create; jpg.LoadFromFile(FileName); Result := TBitmap.Create; Result.Width := Width; with Result do begin Height := (Width * jpg.Height) div jpg.Width; PixelFormat := pf32Bit; Canvas.StretchDraw(Rect(0, 0, Width - 1, Height - 1), jpg); Count := Abs(Cardinal(ScanLine[1]) - Cardinal(ScanLine[0])) div 4; y := Height; repeat Dec(y); Color := ScanLine[y]; x := Count; repeat Dec(x); Gray := (GetRValue(Color^) + GetGValue(Color^) + GetBValue(Color^)) div 3; Color^ := RGB(Gray, Gray, Gray); Inc(Color); until x = 0; until y = 0; // SaveToFile('cache.bmp'); // Opcional end; jpg.Free; end; procedure TForm1.Button1Click(Sender: TObject); begin Image1.Picture.Assign(jpgToGrayThumbnail('e:\Mis imágenes\0002.jpg', 80)); end;[code=delphi:0] Salud OS
#3
Posted 22 January 2009 - 01:20 PM
Gracias egostar lo voy a probar
#4
Posted 22 January 2009 - 02:07 PM
Así me quedo por si alguien lo llega a ocupar
delphi
uses pngimage; function pngToGray(const FileName: string): TBitmap; var png: TPNGImage; Color: PCardinal; Count, y, x, Gray: Cardinal; begin png := TPNGImage.Create; png.LoadFromFile(FileName); png.SaveToFile('cache.png'); Result := TBitmap.Create; Result.Width := png.Width; with Result do begin Height := png.Height; PixelFormat := pf32Bit; Canvas.StretchDraw(Rect(0, 0, Width - 1, Height - 1), png); Count := Abs(Cardinal(ScanLine[1]) - Cardinal(ScanLine[0])) div 4; y := Height; repeat Dec(y); Color := ScanLine[y]; x := Count; repeat Dec(x); Gray := (GetRValue(Color^) + GetGValue(Color^) + GetBValue(Color^)) div 3; Color^ := RGB(Gray, Gray, Gray); Inc(Color); until x = 0; until y = 0; //SaveToFile('cache.bmp'); // Opcional end; png.Assign(Result); png.SaveToFile('cache.png'); png.Free; end; procedure TForm1.Button1Click(Sender: TObject); begin Image1.Picture.Assign(pngToGray('0002.png')); end;