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
Comenzado por
axesys
, ene 22 2009 01:07
3 respuestas en este tema
#1
Escrito 22 enero 2009 - 01:07
#2
Escrito 22 enero 2009 - 01:17
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
Escrito 22 enero 2009 - 01:20
Gracias egostar lo voy a probar
#4
Escrito 22 enero 2009 - 02:07
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;