سلام ؛
میخوام پیکسل های سفید رنگ یک تصویر رو حذف کنم و تصویر جدید ایجاد شده رو ذخیره کنم . اینکار توسط چه توابع و کتابخانه هایی امکان پذیره ؟
سلام ؛
میخوام پیکسل های سفید رنگ یک تصویر رو حذف کنم و تصویر جدید ایجاد شده رو ذخیره کنم . اینکار توسط چه توابع و کتابخانه هایی امکان پذیره ؟
شاید روش بهتری هم باشه ولی من این کد رو نوشتم:
procedure TForm1.Button1Click(Sender: TObject);
var
bitmap: TBitmap;
bitmap2: TBitmap;
MyRect: TRect;
I: Integer;
j: Integer;
begin
MyRect.Top := -1;
MyRect.Left := -1;
MyRect.Right := -1;
MyRect.Bottom := -1;
bitmap := TBitmap.Create;
bitmap.LoadFromFile('c:\1.bmp');
for I := 1 to bitmap.Width do
for j := 1 to bitmap.Height do
if bitmap.Canvas.Pixels[I, j] <> bitmap.Canvas.Pixels[I - 1, j] then
if (bitmap.Canvas.Pixels[I, j] = clBlack) and (MyRect.Left = -1) and
(MyRect.Top = -1) then
begin
MyRect.Left := I;
MyRect.Top := j;
end
else if (bitmap.Canvas.Pixels[I, j] = clwhite) then
begin
MyRect.Right := I;
MyRect.Bottom := j;
end;
// end if
// end for
// end for
bitmap2 := TBitmap.Create;
bitmap2.SetSize(MyRect.Right - MyRect.Left,
MyRect.Bottom - MyRect.Top);
bitmap2.SetSize(MyRect.Right - MyRect.Left + 1,
MyRect.Bottom - MyRect.Top + 1);
bitmap2.Canvas.CopyRect
(Rect(-1 * MyRect.Left, -1 * MyRect.Top,MyRect.Right - MyRect.Left,
MyRect.Bottom - MyRect.Top), bitmap.Canvas, MyRect);
bitmap2.SaveToFile('c:\2.bmp');
end;
ممنون ، اما رنگ مستطیل مشخص نیست . فقط پیکسل های سفید رنگ مدنظر ما هستن . برای حل این مسئله باید یکبار تمامی پیکسل های تصویر بررسی شده و موقعیت + رنگ پیکسل هایی که سفید رنگ نیستند در یک آرایه ذخیره بشه . و در نهایت پیکسل های ذخیره شده در همون موقعیت و با همون رنگ در تصویر جدید درج بشن . ضمن اینکه اندازه تصویر هم ثابت و از قبل تعیین شده هست .
خب، پس تکلیف اون پیکسل هایی که سفید بودند، چی میشه؟ اگر قراره سایر پیکلسل ها دقیقا در جای قبلی خودشان قرار داشته باشند، پس اون پیکسل های سفید هم باید با چیزی پر بشند. اگر قرار هست که این پیکسل ها با چیزی پر بشند، پس دیگه لزومی نداره که یک بار آدرس پیکسل های غیر سفید را ذخیره کنید، کافیه در حین اسکن، هر پیکسلی که سفید بود، همانجا رنگش تغییر داده بشه.و در نهایت پیکسل های ذخیره شده در همون موقعیت و با همون رنگ در تصویر جدید درج بشن . ضمن اینکه اندازه تصویر هم ثابت و از قبل تعیین شده هست .
همچنین، به جای اینکه پیکلسل ها را یکی یکی از Bitmap بخونید، از نظر کارایی بهتر هست که متد ScanLine استفاده کنید، و در هر بار فراخوانی، یک سطر از پیکسل ها را بخوانید.
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.