انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: Bloordokani3412 در 24 مهر 1395، 12:50 قظ
-
سلام دوستان
در تلاشم که یک دکمه ی "undo redo" با gtk3 به زبان c ایجاد کنم. مثلا فرض کنیم یک تصور اندازه شو تغییر دادیم می خوایم به کمک دکمه ی "undo redo"به وضعیت قبلی برگردیم. می تون دکمه هاشو درست کنم ولی اون قسمت اصلی که باید به ماشین حالی کنم که مثلا اگه روی دکمه فشار دادم یه دونه به وضعیت قبلیت برگرده رو نمی تون کدشو بنویسم!!! ولی چون من تو این زمینه تازه کارم نمی تونم کدشو بنویسم. اگه کسی تو این زمینه کد یا منبع خوبی رو داره برام معرفی کنه.
ممنون
-
خب این چیزی که نیست که بصورت کلی باشه و بشه راه حل کلی واسش داد؛ به زبان و کتابخونهّایی هم که استفاده میکنی ربطی نداره
باید قبل از انجام هرکاری یه نسخه از وضعیت پروژه رو بافر کنی؛ و با هر بار آندو آخرین وضعیت رو نشنون کاربر بدی..
فکر هم نمیکنم چیزی واسه اینکا وجود داشته باشه؛ چون ماهیت هر پروژه با هم متفاوت هستش
-
یه چیزی مثل نرم افزار پینت می خوام درست کنم. مثلا یه تصویری رو که فراخوانی کردیم سایزشو تغییر بدیم و بعد از تغییر سایزش به کمک دکمه های آندو-ردو دوباره اونو به حالت قبلیش برگردونیم.
ولی چون من تازه کار هستم نمی تونم کدشو با جی تی کا و به زبان سی بنویسم.
من یه کدی رو شروع کردم که بنویسم ولی تا حالا موفق نشدم.
img1buffer تصویر اصلی است و img1buffer_resized تصویر بعد از تغییر سایزش است. حالا من می خوام با کمک دکمه ی آندو-ردو بین این دو تصویر جابه جایی بذارم:
void undo(GtkWidget *widget, gpointer data)
{
GdkPixbuf *img1buffer = NULL;
GdkPixbuf *img1buffer_resized = NULL;
if (img1buffer = NULL) {
gdk_pixbuf_save(img1buffer, "Raw X-Ray Image.png", "png", NULL, NULL);
return;
}
else if (img1buffer_resized = NULL) {
GdkPixbuf *img1buffer_resized = gdk_pixbuf_scale_simple(img1buffer, width, height, GDK_INTERP_NEAREST);
gdk_pixbuf_save(img1buffer_resized, "Raw X-Ray Image.png", "png", NULL, NULL);
return;
}
}
-
یه چیزی بگین که مشکل تون چیه که نمیتونین کامپایل کنین
چه اروری دریافت میکنین چی میشه که نمیتونین بنویسیدش.متاسفانه اعضای انجمن علم غیب ندارند
چگونه هوشمندانه بپرسیم (https://wiki.ubuntu.ir/wiki/Smart_Questions)
یه مشکلی که دیدم اینه که توی if باید به جای = از == یا === استفاده کنین
درضمن شما که دوخط بالاتر NULL میکنین چرا بعدش شرط گذاشتین که اگه NULL بود؟ ;D
void undo(GtkWidget *widget, gpointer data)
{
GdkPixbuf *img1buffer = NULL;
GdkPixbuf *img1buffer_resized = NULL;
if (img1buffer == NULL) {
gdk_pixbuf_save(img1buffer, "Raw X-Ray Image.png", "png", NULL, NULL);
return;
}
else if (img1buffer_resized == NULL) {
GdkPixbuf *img1buffer_resized = gdk_pixbuf_scale_simple(img1buffer, width, height, GDK_INTERP_NEAREST);
gdk_pixbuf_save(img1buffer_resized, "Raw X-Ray Image.png", "png", NULL, NULL);
return;
}
}
-
اگه مقدار یا رشته کار می کنی، تو یه فایل تکست ذخیره کنش. هر بار هم فایل رو خالی کن که قاطی نشه. مث این البته برا بش:
#!/bin/bash
rm log.txt
read txt
$txt >log.txt
حالا دفعه بعد ببینه چی زده
cat log.txt
حالا میشه یک نرم افزار، با حافظه کش.
-
کد کامل
#!/bin/bash
echo enter image name and address
read $img
Cash=$( identify -format '%wx%h' $img)
$Cash >log.txt
echo enter x value
read xvalue
echo enter y value
read yvalue
convert -resize $xvalueX$yvalue $img dest.jpg
بسته imagemagic باید نصب باشه
-
ببخشید خرابه ](*,) ](*,)
-
@Mmjafari: ممنون از راهنماییت. ولی من تو توضیحاتم در بالا گفتم که یه چیزی مثل نرم افزار پینت هستش. من وقتی یک عکس رو فراخوانی میکنم و سایزشو کم یا زیاد می کنم با دکمه آندو-ردو بتون حالت رفت و برگشت رو ایجاد کنم.
img1buffer تصویر اصلی است و img1buffer_resized تصویر بعد از تغییر سایزش است.
توضیحات بالا رو ببینید.
لازمه که کد مربوط به تغییر سایز رو هم بذارم؟؟؟