14-08-2013, 01:53 AM
حجم الصورة لا يتغير بتحويلها الى أبيض و أسود !!
السبب : عدد البيكسل يبقى ثابت .. ستتغير قيمة البيكسل فقط لكن عدد البيكسل قبل التحويل = عدد البيكسل بعد التحويل => حجم ثابت .
يمكن تحويل ال Bmp الى صورة jpg ثم الى bmp مرة أخرى :
ستحصل على حجم صغير مقارنة بالصورة الأولى بدون تحويلها للأسود و الأبيض .
السبب : عدد البيكسل يبقى ثابت .. ستتغير قيمة البيكسل فقط لكن عدد البيكسل قبل التحويل = عدد البيكسل بعد التحويل => حجم ثابت .
يمكن تحويل ال Bmp الى صورة jpg ثم الى bmp مرة أخرى :
ستحصل على حجم صغير مقارنة بالصورة الأولى بدون تحويلها للأسود و الأبيض .
PHP كود :
procedure ImageGrayScale(var AnImage: TImage);
var
JPGImage: TJPEGImage;
BMPImage: TBitmap;
MemStream: TMemoryStream;
begin
BMPImage := TBitmap.Create;
BMPImage.Width := AnImage.Picture.Bitmap.Width;
BMPImage.Height := AnImage.Picture.Bitmap.Height;
JPGImage := TJPEGImage.Create;
//Size (AnImage.Picture.Bitmap ) = 60 ko
JPGImage.Assign(AnImage.Picture.Bitmap);
JPGImage.CompressionQuality := 100;
JPGImage.Compress;
// JPGImage.Grayscale := True;
BMPImage.Assign(JPGImage);
// BMPImage.Canvas.Draw(0, 0, JPGImage);
{ dont use Canvas.Draw
Use BMPImage.Assign
}
BMPImage.SaveToFile('foo.bmp'); //Size = 24 ko !!
AnImage.Picture.Graphic := BMPImage;
JPGImage.Free;
BMPImage.Free;
end;
Open Your Source .. Open Your Mind

