Try the attached project:Hi @Johan Schoeman, how is it possible to add just a rectangular bitmap ajustable border, please?
Thanks
Patrick
#Region Project Attributes
#ApplicationLabel: RoundBitmapWithBorder
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: landscape
#CanInstallToExternalStorage: False
#End Region
#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region
Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
Dim nativeMe As JavaObject
End Sub
Sub Globals
'These global variables will be redeclared each time the activity is created.
'These variables can only be accessed from this module.
Dim bm, bm1, bm2 As Bitmap
Private ImageView1 As ImageView
Private ImageView2 As ImageView
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("main")
nativeMe.InitializeContext
Dim borderWidth1 As Int = 50
Dim borderColor1 As Int = Colors.White
ImageView1.Bitmap = Null
bm.Initialize(File.DirAssets,"pluto.jpg")
bm1 = nativeMe.RunMethod("getRoundBitmap",Array(bm,borderColor1, borderWidth1))
ImageView1.Bitmap = bm1
' Dim borderWidth2 As Int = 50
' Dim borderColor2 As Int = Colors.White
' ImageView2.Bitmap = Null
' bm.Initialize(File.DirAssets,"stitch.jpg")
' borderColor2 = Colors.ARGB(255,200,0,0)
' bm2 = nativeMe.RunMethod("getRoundBitmap",Array(bm,borderColor2, borderWidth2))
' ImageView2.Bitmap = bm2
Dim borderWidth2 As Int = 15
Dim borderColor2 As Int = Colors.Magenta
ImageView2.Bitmap = Null
bm.Initialize(File.DirAssets,"stitch.jpg")
borderColor2 = Colors.ARGB(255,200,0,0)
bm2 = nativeMe.RunMethod("addSquareBorder",Array(bm, borderWidth2, borderColor2))
ImageView2.Bitmap = bm2
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
#If Java
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.Path.FillType;
import android.graphics.Paint;
import android.graphics.Color;
import android.view.View;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.BitmapShader;
import android.graphics.Shader;
import android.graphics.PorterDuffXfermode;
import android.graphics.PorterDuff.Mode;
public static Bitmap getRoundBitmap(Bitmap scaleBitmapImage, int borderColor, int borderWidth) {
int targetWidth = 1000;
int targetHeight = 1000;
int radius = Math.min((targetHeight - 5)/2, (targetWidth - 5)/2);
Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, targetHeight,
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(targetBitmap);
Path path = new Path();
path.addCircle(((float) targetWidth - 1) / 2,
((float) targetHeight - 1) / 2,
(Math.min(((float) targetWidth), ((float) targetHeight)) / 2),
Path.Direction.CCW);
canvas.clipPath(path);
Bitmap sourceBitmap = scaleBitmapImage;
canvas.drawBitmap(sourceBitmap, new Rect(0, 0, sourceBitmap.getWidth(),
sourceBitmap.getHeight()), new Rect(0, 0, targetWidth,
targetHeight), null);
Paint p = new Paint();
p.setAntiAlias(true);
// canvas.drawBitmap(sourceBitmap, 4, 4, p);
p.setXfermode(null);
p.setStyle(Paint.Style.STROKE);
p.setColor(borderColor);
p.setStrokeWidth(borderWidth);
canvas.drawCircle((targetWidth / 2) , (targetHeight / 2) , radius, p);
return targetBitmap;
}
public static Bitmap addSquareBorder(Bitmap bmp, int borderSize, int bordercolor) {
Bitmap bmpWithBorder = Bitmap.createScaledBitmap(bmp, bmp.getWidth() + borderSize * 2, bmp.getHeight() + borderSize * 2, false);
Canvas canvas = new Canvas(bmpWithBorder);
canvas.drawColor(bordercolor);
canvas.drawBitmap(bmp, borderSize, borderSize, null);
return bmpWithBorder;
}
#End If
JavaObject - 2.02What version of the JavaObject library do you have (see post #1) and what version of B4A are you using?
This is where I differ slightly from your project. I'm not loading the image, instead I'm passing a bitmap to a function in which I have added your code.You say you have copy and pasted. Have you got the pics in the Files folder of the B4A project?
iv.Bitmap = AddBorder(LoadBitmapSample(Main.Imagespath, filename, 320, 200))
Sub AddBorder(bm As Bitmap) As Bitmap
Dim bm2 As Bitmap
Dim borderWidth2 As Int = 15
Dim borderColor2 As Int = Colors.Magenta
nativeMe.InitializeContext
'iv.Bitmap = Null
'bm.Initialize(File.DirAssets,"stitch.jpg")
bm.Initialize3(bm)
borderColor2 = Colors.ARGB(255, 200, 0, 0)
bm2 = nativeMe.RunMethod("addSquareBorder", Array(bm, borderWidth2, borderColor2))
Log(bm2.Height)
Return bm2
End Sub
If you download the project in post #3 above - does it work when you run it?This is where I differ slightly from your project. I'm not loading the image, instead I'm passing a bitmap to a function in which I have added your code.
B4X:iv.Bitmap = AddBorder(LoadBitmapSample(Main.Imagespath, filename, 320, 200))
B4X:Sub AddBorder(bm As Bitmap) As Bitmap Dim bm2 As Bitmap Dim borderWidth2 As Int = 15 Dim borderColor2 As Int = Colors.Magenta nativeMe.InitializeContext 'iv.Bitmap = Null 'bm.Initialize(File.DirAssets,"stitch.jpg") bm.Initialize3(bm) borderColor2 = Colors.ARGB(255, 200, 0, 0) bm2 = nativeMe.RunMethod("addSquareBorder", Array(bm, borderWidth2, borderColor2)) Log(bm2.Height) Return bm2 End Sub
When I run the above I don't get back the bitmap. The Java error I was referring to was when I add the code within #If Java tag.
Thanks
Unfortunately, no. I get an error.If you download the project in post #3 above - does it work when you run it?
B4A version: 5.50
Parsing code. (0.00s)
Compiling code. (0.01s)
Compiling layouts code. (0.02s)
Generating R file. (0.05s)
Compiling generated Java code. Error
javac 1.7.0_45
src\JHS\getRoundedCornerBitmap\main.java:14: error: package android.annotation does not exist
import android.annotation.SuppressLint;
^
1 erro
Unfortunately, no. I get an error.
B4X:B4A version: 5.50 Parsing code. (0.00s) Compiling code. (0.01s) Compiling layouts code. (0.02s) Generating R file. (0.05s) Compiling generated Java code. Error javac 1.7.0_45 src\JHS\getRoundedCornerBitmap\main.java:14: error: package android.annotation does not exist import android.annotation.SuppressLint; ^ 1 erro
Rather ZIP and upload your project - much easier to see what you are doing and where you have put what code than to guess with the code that you have posted.It works! However, my function version doesn't seem to work. Can you take a quick look at my function and check that I haven't missed something?
Thanks