如何将SD卡上的PNG图像加载到Canvas上以在Android中绘图?

发布于 2024-12-01 01:47:45 字数 1578 浏览 2 评论 0原文

我的应用程序是一个基本的绘图应用程序。用户可以在画布上绘图并将图像保存为 PNG 格式。他可以加载之前绘制的图像并对其进行编辑。

我能够完成第一部分。也就是说,用户可以绘制图像并将其保存在SD卡上。我在将保存的 png 文件加载到画布上并在其上绘图时遇到问题。

这是我的 SurfaceView 类中的 run 方法。

public void run() {
            Canvas canvas = null;
            while (running) {
                try {
                    canvas = holder.lockCanvas(null);
                    synchronized (holder) {
                        if(mBitmap == null){
                            mBitmap =  Bitmap.createBitmap (1, 1, Bitmap.Config.ARGB_8888);;
                        }
                        final Canvas c = new Canvas (mBitmap);
                        c.drawColor(Color.WHITE);

                        //pad.onDraw(canvas);

                        Paint p = new Paint();
                        p.setColor(Color.GRAY);

                        for(double x = 0.5;x < c.getWidth();x += 30) {
                            c.drawLine((float)x, 0, (float)x, c.getHeight(), p);
                        }

                        for(double y= 0.5;y < c.getHeight();y += 30) {
                            c.drawLine(0, (float)y, c.getWidth(), (float)y, p);
                        }

                        pad.onDraw(c);

                        canvas.drawBitmap (mBitmap, 0,  0, null);
                    }
                } finally {
                    if (canvas != null) {
                        holder.unlockCanvasAndPost(canvas);
                    }
                }
            }
        }

我尝试将 png 加载到“mBitmap”,但没有成功。 任何帮助表示赞赏。

谢谢你!

My app is a basic drawing app. User can draw on a Canvas and save the image as a PNG. He can load the earlier drawn images and edit them.

I was able to do the first part. that is, the user can draw and save the image on the sdcard. I'm having trouble loading the saved png file on to the Canvas and drawing on it.

here is the run method in my SurfaceView class.

public void run() {
            Canvas canvas = null;
            while (running) {
                try {
                    canvas = holder.lockCanvas(null);
                    synchronized (holder) {
                        if(mBitmap == null){
                            mBitmap =  Bitmap.createBitmap (1, 1, Bitmap.Config.ARGB_8888);;
                        }
                        final Canvas c = new Canvas (mBitmap);
                        c.drawColor(Color.WHITE);

                        //pad.onDraw(canvas);

                        Paint p = new Paint();
                        p.setColor(Color.GRAY);

                        for(double x = 0.5;x < c.getWidth();x += 30) {
                            c.drawLine((float)x, 0, (float)x, c.getHeight(), p);
                        }

                        for(double y= 0.5;y < c.getHeight();y += 30) {
                            c.drawLine(0, (float)y, c.getWidth(), (float)y, p);
                        }

                        pad.onDraw(c);

                        canvas.drawBitmap (mBitmap, 0,  0, null);
                    }
                } finally {
                    if (canvas != null) {
                        holder.unlockCanvasAndPost(canvas);
                    }
                }
            }
        }

I tried loading the png to the 'mBitmap', but it didn't work.
Any help appreciated.

thank you!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

红ご颜醉 2024-12-08 01:47:45

在您的代码中,您根本没有从 SD 卡加载图像,这是故意的吗?这是打开 SD 卡图像的方法:

mBitmap = BitmapFactory.decodeFile("/sdcard/test.png");

In your code you are not loading the image from sd card at all, is this intentional? This is how you open an image form SD card:

mBitmap = BitmapFactory.decodeFile("/sdcard/test.png");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文