استفاده از GetBitmapBits و SetBitmapBits در دلفی
عین همین عنوان رو تو گوگل کلی گشتم ولی موردی پیدا نکردم که دقیقاً توی دلفی و روی یک شیء، تابع SetBitmapBits اعمال شده باشه.
به همین خاطر این مطلب ناقابل رو اینجا میذارم:
کد php:
procedure TForm1.Button1Click(Sender: TObject);
var
Bits: array of Byte;
NewLength: Integer;
begin
imgOriginal.Picture.Bitmap.PixelFormat := pfDevice;
imgDraw.Width := imgOriginal.Picture.Width;
imgDraw.Height := imgOriginal.Picture.Height;
imgDraw.Canvas.Create;
NewLength := imgOriginal.Picture.Width * imgOriginal.Picture.Height * 4;
SetLength(Bits, NewLength);
GetBitmapBits(imgOriginal.Picture.Bitmap.Handle, NewLength, Addr(Bits[0]));
//Modify Bits here;
SetBitmapBits(imgDraw.Picture.Bitmap.Handle, NewLength, Addr(Bits[0]))
end;
جان مطلب توی 4 خط ابتدای برنامه است:
ـ تعیین PixelFormat برای مبدأ
ـ تعیین طول و عرض برای مقصد
ـ مقداردهی اولیه به Canvas مقصد قبل از اعمال SetBitmapBits
مورد آخر (یعنی Initialize کردن Canvas مقصد) رو امروز فهمیدم و کلی شاد شدم.
بین GetBitmapBits و SetBitmapBits هم که باید تغییرات مورد نیاز رو با یک یا چند حلقه ی تکرار روی آرایه مون اعمال کنیم. یعنی RGB رو به طور دلخواه تغییر بدیم.
پ.ن: شیء مبدأ (imgOriginal) حاوی یک تصویر است.