رفتن به مطلب
  • 0

حفظ کیفیت تصاویر در اندازه های مختلف گوشی


ostad

سوال

با سلام و خسته نباشید من عکس خودم را به سایز های مختلف دراوردم و در داخل پوشه resource برنامه با سایز های مختلف گذاشتم و برای دادن عکس به ایمیج ویو از کد زیر استفاده کردم:

Dim xml As XmlLayoutBuilder

("bd = xml.GetDrawable("language.9

ImageView1.Bitmap=bd.Bitmap

اما با ارور زیر مواجه شدم:


android.content.res.Resources$NotFoundException: Resource ID #0x0
    at android.content.res.Resources.getValue(Resources.java:1123)
    at android.content.res.Resources.getDrawable(Resources.java:698)
    at anywheresoftware.b4a.object.XmlLayoutBuilder.GetDrawable(XmlLayoutBuilder.java:67)
    at com.citysoftwere.EnglishKit.home._load(home.java:425)
    at com.citysoftwere.EnglishKit.home._activity_create(home.java:350)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:169)
    at com.citysoftwere.EnglishKit.home.afterFirstLayout(home.java:102)
    at com.citysoftwere.EnglishKit.home.access$000(home.java:17)
    at com.citysoftwere.EnglishKit.home$WaitForLayout.run(home.java:80)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5001)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
    at dalvik.system.NativeStart.main(Native Method)

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

13 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

دوست عزیز با کتابخونه androidresourse میتونید این کارو بکنید

ساب زیر رو نوشتم شما فقط ویو و اسم فایل رو بهش بدین خودش انجام میده

Sub setimg(view As View,filnam As String)
Dim andr As AndroidResources
view.Background=andr.GetApplicationDrawable(filnam)
End Sub

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

این کد من :      ( " setimg(ImageView1,"exam.9

با خطای زیر مواجه شدم:

(java.lang.RuntimeException: Object should first be initialized (ImageView

لینک ارسال
به اشتراک گذاری در سایت های دیگر

تصصحیح میکنم مشکل از این بود که تابع شما رو تو تابع دیگه تعریف کردم ولی الان عکس من لود نشده یهنی هیچ چیزی رو نشون نداد

("setimg(ImageView1,"exam.9 من عکس هایم رو از سایتی که ناین پچ کرد درون پوشه ریسورس ساختم و توی اپم بهش دسترسی دادم:AdditionalRes: ..\resource#

لینک ارسال
به اشتراک گذاری در سایت های دیگر

عکسها باید توی پوشه drawble باشن.

عکسهای معمولی بزارین نه 9patch 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ببخیشد الان عکس های ناین پچ  رو بذارم تو ادرس زیر:Objects\res\drawable

بعد از سایتی که گرفتم یکسری پوشه داره پوشه ها رو هم بزارم؟

ببخشد فرمت عکس هایی که این سایت میده ناین پچه

https://romannurik.github.ioAndroid Asset Studio

Simple nine-patch generator

لینک ارسال
به اشتراک گذاری در سایت های دیگر

دوست عزیز ناین پچ استفاده نکنید عکس معمولی بزارید با سایزهای مختلف خیلی بهتره

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ببخشید که وقتتتون رو میگیریم شما سایتی رو در این زمینه میشناسید که عکس ها رو به سایز های مختلف تبدیل کنه؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

نیاز به سایت ندارین. با paint ویندوز هم میشه این کارو کرد. 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

 با تشکر از راهمایی شما

من توسط همون سایت رفتم و عکس رو هم لود کردم منتها عکسم با افت کیفیت مواجه شد ایا به دلیل این است که به ایمیج ویو سایز ثابت دادم 96x96 اگر مشکل این است باید سایز ایمیج ویو را چطور مقدار دهی کنم؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

توپوشه ریسورس پوشه های زیر رو درست کنید

drawable-hdpi

drawable-mdpi

drawable-ldpi

ldpi مال گوشی هایی هست که سایزشون کوچیکه mdpi واسه متوسطا و hdpi هم واسه سایز بزرگا

شما باید به ترتیب واسه هر کدوم یه سایز بزارید

مثلا از 48*48 واسه کوچیکا از 72*72 واسه متوسطا و از 128*128 هم واسه بزرگا

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 13 ساعت قبل، ostad گفته است :

با سلام و خسته نباشید من عکس خودم را به سایز های مختلف دراوردم و در داخل پوشه resource برنامه با سایز های مختلف گذاشتم و برای دادن عکس به ایمیج ویو از کد زیر استفاده کردم:

Dim xml As XmlLayoutBuilder

("bd = xml.GetDrawable("language.9

ImageView1.Bitmap=bd.Bitmap

اما با ارور زیر مواجه شدم:


android.content.res.Resources$NotFoundException: Resource ID #0x0
    at android.content.res.Resources.getValue(Resources.java:1123)
    at android.content.res.Resources.getDrawable(Resources.java:698)
    at anywheresoftware.b4a.object.XmlLayoutBuilder.GetDrawable(XmlLayoutBuilder.java:67)
    at com.citysoftwere.EnglishKit.home._load(home.java:425)
    at com.citysoftwere.EnglishKit.home._activity_create(home.java:350)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:169)
    at com.citysoftwere.EnglishKit.home.afterFirstLayout(home.java:102)
    at com.citysoftwere.EnglishKit.home.access$000(home.java:17)
    at com.citysoftwere.EnglishKit.home$WaitForLayout.run(home.java:80)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5001)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
    at dalvik.system.NativeStart.main(Native Method)

 

سلام به نظر من بهترینش این تابع هست

Sub ResizeImage(original As Bitmap, TargetX As Int, TargetY As Int) As Bitmap
Try
    Dim origRatio As Float = original.Width / original.Height
    Dim targetRatio As Float = TargetX / TargetY
    Dim scale As Float
    
    If targetRatio > origRatio Then
        scale = TargetY / original.Height
    Else
        scale = TargetX / original.Width
    End If
    
    Dim c As Canvas
    Dim b As Bitmap
    b.InitializeMutable(TargetX, TargetY)
    c.Initialize2(b)
    'set the background
    c.DrawColor(Colors.Gray)
    Dim r As Rect
    Dim w = original.Width * scale, h = original.Height * scale As Int
    r.Initialize(TargetX / 2 - w / 2, TargetY / 2 - h / 2, TargetX / 2 + w / 2, TargetY / 2+ h / 2)
    c.DrawBitmap(original, Null, r)
    Return b
	
	Catch
	Log(LastException)
End Try
End Sub



و فراخوانی تابع به صورت زیر توجه اول باید ویو رو اضافه بعد که ویو لود شد این کد قرار بدهید


image1.SetBackgroundImage(ResizeImage(LoadBitmap(File.DirAssets,"1.png"),image1.Width,image1.Height))

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

این بهترین راه نیست دوست عزیز

شما همه برنامه های حرفه ای مثل واتساپ یا تلگرام و امثالهم. میبینید که یا از ناین پچ استفده کردن یا از ایمیج با سایزهای مختلف. بهترین راه همینه در واقع.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...