سلام
میخوام برنامه ام وقتی عکسی رو اپن می کنه اون را به نه قسمت مساوی تقسیم کنه و هر قسمت را توی یک image قرار بده.
اگه ممکنه دوستان کمک کنند.
اگر فرمت عکس هم مهمه دوستان بهم بگن.
سلام
میخوام برنامه ام وقتی عکسی رو اپن می کنه اون را به نه قسمت مساوی تقسیم کنه و هر قسمت را توی یک image قرار بده.
اگه ممکنه دوستان کمک کنند.
اگر فرمت عکس هم مهمه دوستان بهم بگن.
دوستان اگر کسی می دونه راهنمایی کنه.
می خوام برنامه عکس رو تقسیم کنه و هر قسمت را توی یک image بگذاره.
تاحالا همه حالی رو که وقتی جواب سوالی رو نمیدونند تجربه کردند پس لطفا سریعتر جوب بدهید.
با تشکر
کلاس TBitMap یک تابع داره بنام ScanLine که یک خط را از تصویری که توش لود شده میخونه. هر پیکسل رو در سه بایت میخونه که هر بایتش به ترتیب میزان رنگ قرمز، سبز و آبیه (RGB). مثلاً اگه پهنای تصویر 100 باشه خط اول از تصویر در یه آرایه یک بعدی 300 سلولی ذخیره میشه. حالا شما میتونید خونه های این آرایه رو توی پیکسلهای یه Bitmap جدید قرار بدید. خیلی مختصر گفتم. اگه درست نشد بفرمائید مثالش رو براتون بنویسم.
فرض کنید سطر اول رو توی آرایه P خونده باشیم. در اینصورت اولین پیکسل از تصویر برابر هست با:
Bmp1.Canvas.Pixels[0]=RGB(P[2],P[1],P[0]);
آخرین ویرایش به وسیله Hamid.Kad : سه شنبه 03 آذر 1388 در 23:15 عصر
سلام دوست عزيز؛
از راهنماي دلفي، دستورات BrushCopy و StretchDraw و Draw را نگاه كنيد.
در صورتي كه متوجه نشديد، بگيد تا من يا دوستان، بيشتر توضيح بديم...
يا علي... موفق باشيد...
سلام
یه نگاهی هم به دستور copyrect بنداز برای اینکاری که می خوای انجام بدی ، راحتترین و سریعترینه
موفق باشی
سلام با تشکر
در جواب دوست اول: منظورتون این بود که عکس رو رنگ رنگ می کنه؟ یعنی این کد شما عکس رو رنگ رنگ جدا میکرد؟ راستش درست متوجه نشدم پس اگه ممکنه بیشتر تویح بدید؟
دوستان دیگه هم گفته بودن برم توی Help صادقانه بگم help ارور داد گویا این قسمتش خرابه و نمی تونست بخونه! شانس دیگه!
دوست دیگه ای که برنامه گذاشته بودند هم که عکس رو تیکه کردند. و برای تیکه کردن سایز داده بودن. من که نمی دونم عکس به چه سایزی اپن می شه تازه سوال من این بود که قرار 9 قسمت بشه و هر قسمت توی یک عکس قرار بگیره؟
با تشکر از دوستان.
منتظر پاسخ شما استادان.
یه مثال میزنم امیدوارم کمک کنه. کد زیر رو ملاحظه بفرمائید:در جواب دوست اول: منظورتون این بود که عکس رو رنگ رنگ می کنه؟
P:PByteArray;
for i:=0 to (mainIMG.height div 3) do
begin
p:=MainIMG.ScanLine[I];
for j:=0 to (MainIMG.Width div 3) do
begin
NewIMG.Canvas.Pixels[i,j]:= RGB(p[3*j+2],P[3*j+1],P[3*j]);[
end;
end;
در حقیقت با این دستورات از هر سطر عکس، پیکسلها خونده میشن. مثلاً به ازای اولین پیکسل گوشه سمت چپ بالا سه تا خونه آرایه P پُر میشه. یکی میزان رنگ قرمز، یکی سبز و دیگری هم میزان رنگ آبی این پیکسل رو نشون میدن. حالا توی تصویر جدید (NewIMG) این سه تا رنگ رو با تابع RGB ترکیب کرده و دوباره توی تصویر جدید میریزیم. با اجرای این دستورات اگر فرض کنیم که قرار باشه عکس اصلی به 9 تا عکس (3*3) تبدیل بشه، عکس گوشه سمت چپ بالا استخراج میشه (توی NewIMG)
البته احتمالاً روشهای ساده تری هم وجود داره. چیزی که به ذهن من رسید این روش بود. امیدوارم مفید بوده باشه.
استفاده از روشي كه آقاي حميد.كد گفتند، سرعت كمي داره به خاطر اين كه با پيكسلها كار ميكنه.
در مورد كدي كه دوست خوبم، آقاي/خانم دلفي نوشته بودند، كافيه شما به جاي ابعادي كه ايشون دادند، يه متغير قرار بديد كه مقدار اون را هنگامي كه تصوير را لود ميكنيد، به صورت زير انتساب بديد:
MyWidth := LoadedImage.Width div 3;
MyHeight := LoadedImage.Height div 3;
يا علي... موفق باشيد...
سلام
p:=MainIMG.ScanLine[i];
این خط ارور می ده و من نمی دونم چیکار کنم. یه پازل نوشم که قراره عکس رو باز کنه و توی جاها قرار بده اما تا حالا حتی با اهنمایی های شما موفق نشدم. اگه میشه ارور این خط رو حل کنید.
چه خطایی میده ؟