PDA

View Full Version : سوال: مشکل در نوشتن بر روی عکس



sajioo
دوشنبه 08 آذر 1389, 12:32 عصر
سلام بر همه
دوستان من برای نوشتن مطلبی بر روی یک عکس از کد زیر استفاده می کنم.

image1.canvas.textout(10,10,'text');
این زمانی جواب می ده که عکس من از نوع bmp باشه .
اما الان که از png استفاده می کنم جواب نمیده!:متفکر:
میشه منو راهنمای کنید؟

nilidelphi
دوشنبه 08 آذر 1389, 15:50 عصر
اگه از دلفی 2009 استفاده می کنی میتونی هم از عکس های png و هم JPG استفاده کنی فقط باید یونیتشون رو تو لیست Uses ها اضافه کنی.

Felony
دوشنبه 08 آذر 1389, 17:55 عصر
سلام بر همه
دوستان من برای نوشتن مطلبی بر روی یک عکس از کد زیر استفاده می کنم.

image1.canvas.textout(10,10,'text');
این زمانی جواب می ده که عکس من از نوع bmp باشه .
اما الان که از png استفاده می کنم جواب نمیده!:متفکر:
میشه منو راهنمای کنید؟

باید عکستون رو به BMP تبدیل کنید و بعد روش عملیات ترسیم رو انجام بدید ، مثلا :

var
BMP: TBitmap;
begin
BMP:= TBitmap.Create;
try
BMP.Assign(Image1.Picture.Graphic);
Image1.Picture.Assign(BMP);
Image1.Canvas.Rectangle(0,0,20,20);
finally
BMP.Free;
end;
end;


اگه از دلفی 2009 استفاده می کنی میتونی هم از عکس های png و هم JPG استفاده کنی فقط باید یونیتشون رو تو لیست Uses ها اضافه کنی.
اون کار برای نمایش تصاویری با فرمت jpg یا ... در شئ TImage هست ، ربطی به ترسیم روی اونها نداره ، عملیات ترسیم رو فقط رو عکس هایی که Bitmap هستند میتونید انجام بدید .

Mask
چهارشنبه 12 بهمن 1390, 18:25 عصر
با سلام
یه همچین مشکلی برام پیش اومده. بد جور گیر کردم.
وقتی عکس png تبدیل میشه به bmp میریزه به هم.
چطوری بدون اینکه png به هم بریزه میشه روش نوشت.

arkia
چهارشنبه 12 بهمن 1390, 20:11 عصر
با سلام
وقتی عکس png تبدیل میشه به bmp میریزه به هم.
چطوری بدون اینکه png به هم بریزه میشه روش نوشت.

چطوری به هم میریزه؟ آیا Transparency ش از بین میره؟

تا جایی که من اطلاع دارم باید از Alpha Channel استفاده کنی

Mask
چهارشنبه 12 بهمن 1390, 20:35 عصر
عکسهای png من دارای حالت آلفایی هستند.
نمونه زیر گویای مشکل بنده است.

arkia
چهارشنبه 12 بهمن 1390, 22:47 عصر
خب شما به جای TImage از TPNGObject استفاده کنید من تستش کردم فایل PNG رو خراب نمیکنه خودتونم ببینید

var
PNG: TPNGObject;
begin
png:= TPNGObject. Create;
with png do
begin
LoadFromFile('1.png');
Canvas.TextOut(10,10,'salam');
SaveToFile('abc.png');
png.free;
end;

Mask
پنج شنبه 13 بهمن 1390, 10:01 صبح
ممنون. واقعا عالی بود.
فقط یه مشکل میمونه اونم اینه که متن دارای حاشیه هست. چطوری فقط متن تنها رو بندازیم رو عکس؟

arkia
پنج شنبه 13 بهمن 1390, 13:47 عصر
ممنون. واقعا عالی بود.
فقط یه مشکل میمونه اونم اینه که متن دارای حاشیه هست. چطوری فقط متن تنها رو بندازیم رو عکس؟

خواهش می کنم ،
این کد رو قبل از Textout بزارید درست میشه:


canvas.Brush.Style:=bsClear;