请帮忙看看为什么canvas.drawBitmap没能显示出图片

显示图片的代码如下

     public DrawBitmapView(Context context,int width,int height,Bitmap bitmap) {
        super(context);
        initPaint();
        mBitWidth = width;
        mBitHeight = height;
        mBitmap = bitmap;
        mSrcRect = new Rect(0,0,mBitWidth,mBitHeight);
        mDestRect = new Rect(0,0,mBitWidth,mBitHeight);
        Log.e("TAG", "宽"+mBitWidth+"高"+mBitHeight+"mSrcRect"+mSrcRect+"mDestRect"+mDestRect);
        Canvas canvas = new Canvas();
        canvas.drawBitmap(mBitmap,mSrcRect,mDestRect,mBitPaint);
        Log.d("TAG","图片已打印");
        setWillNotDraw(false);
        invalidate();
    }

这是log显示的结果

 05-04 22:04:06.443 15938-15938/com.example.xxx.board_meeting E/TAG: 宽291高295mSrcRectRect(0, 0 - 291, 295)mDestRectRect(0, 0 - 291, 295)
05-04 22:06:41.537 15938-15938/com.example.xxx.board_meeting E/TAG: 图片已打印

选择图片后的 各个值的显示图片说明图片说明

最后想问一下,有没有安卓开发的交流群。。我最近在开发过程中遇到了很多问题,希望能有个地方请教一下大家orz

2个回答

Canvas canvas = new Canvas();
canvas是不可以自己new的你,canvas 必须绑定到对应的View。单纯的canvas好比一张贴画,你必须贴到墙上才能看到,在哪个View里面画图就需要使用该View的canvas.每个View都会有一个onDraw(Canvas canvas)方法,你可以在onDraw方法内加入你的以上代码;
例如 你写的这个DrawBitmapView 类:
@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

……
canvas.drawBitmap();
……
}

mBitmap = bitmap; 这个获取了么?

图片的路径(或者资源名)是否正确

参考 https://blog.csdn.net/tianjian4592/article/details/45031663

qq_42138526
qq_42138526 5555
大约 2 年之前 回复
sinat_32247289
ogiso雪菜 bitmap:“”是没获取到的意思吗? 但是我看下面的Debug里的View Bitmap能看到图片。这样不行吗
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Android的canvas.drawbitmap怎么花一组位图

编译不出错但虚拟机上打不开,还有一个是画一组位图只显示最后一个。 求指点。 public void Bit(){ bg[1]=BitmapFactory.decodeResource(this.getResources(), R.drawable.background); bg[2]=BitmapFactory.decodeResource(this.getResources(), R.drawable.face); bg[3]=BitmapFactory.decodeResource(this.getResources(), R.drawable.face_outline); bg[4]=BitmapFactory.decodeResource(this.getResources(), R.drawable.face_sel); for(int i=1;i<4;i++) Drawbg(bg[i]); } public void Drawbg(Bitmap bmp){ canvas=sfh.lockCanvas(); canvas.drawBitmap(bmp, 0, 0, paint); sfh.unlockCanvasAndPost(canvas); } @Override public void surfaceCreated(SurfaceHolder arg0) { // TODO 自动生成的方法存根 Bit(); }

Android canvas.drawBitmap()画出来的图片是按dp而不是像素?

写一个连连看的游戏,图片素材是50*50的,手机分辨率1080P,结果用这个方法绘制出来的图片 canvas.drawBitmap(piece.getImage().getImage(),piece.getBeginX(), piece.getBeginY(), null); 是按dp的?因为一排只能放个7、8张。不是说默认操作是按像素的吗?

为什么用drawBitmap图片还是显示不出来。

我想做一个画板,现在需要增加一个插入图片功能。 目前能从相册中选取图片,但是因为onDraw方法没被调用,所以显示不出来。 需要怎么做才行?网上查的setWillNotDraw(false);也没用 log显示结果 E/TAG: 宽291高295mSrcRectRect(0, 0 - 291, 295)mDestRectRect(0, 0 - 291, 295) public class DrawBitmapView extends View{ private Paint mBitPaint; private Bitmap mBitmap; private int mBitWidth,mBitHeight; private Rect mSrcRect,mDestRect; public DrawBitmapView(Context context,int width,int height,Bitmap bitmap) { super(context); initPaint(); mBitWidth = width; mBitHeight = height; mBitmap = bitmap; mSrcRect = new Rect(0,0,mBitWidth,mBitHeight); mDestRect = new Rect(0,0,mBitWidth,mBitHeight); Log.e("TAG", "宽"+mBitWidth+"高"+mBitHeight+"mSrcRect"+mSrcRect+"mDestRect"+mDestRect); setWillNotDraw(false); } protected void onDraw(Canvas canvas){ super.onDraw(canvas); canvas.drawBitmap(mBitmap,mSrcRect,mDestRect,mBitPaint); //canvas.drawBitmap(mBitmap,0,0,mBitPaint); } private void initPaint() { mBitPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mBitPaint.setFilterBitmap(true); mBitPaint.setDither(true); } } ``` ``` 下面是在MainActivity.java里的代码 public static final int CHOOSE_PHOTO = 0; private void openAlbum(){ Intent intent = new Intent("android.intent.action.GET_CONTENT"); intent.setType("image/*"); startActivityForResult(intent,CHOOSE_PHOTO); } public void onRequestPermissionsResult(int requestCode,String[] permission,int[] grantResults){ switch(requestCode){ case 1: if(grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){ openAlbum(); } else { Toast.makeText(this,"You denied the permission",Toast.LENGTH_SHORT); } break; default: } } protected void onActivityResult(int requestCode,int resultCode,Intent data){ switch (requestCode){ case CHOOSE_PHOTO: if(resultCode == RESULT_OK){ Bitmap bitmap = null; int mbitWidth,mbitHeight; //判断手机系统版本号 if(Build.VERSION.SDK_INT >= 19){ //4.4及以上系统使用这个方法处理图片 bitmap = ImgUtil.handleImageOnKitKat(this,data); mbitWidth = bitmap.getWidth(); mbitHeight = bitmap.getHeight(); drawBitmapView = new DrawBitmapView(this,mbitWidth,mbitHeight,bitmap); } } break; default: break; } }

canvas.drawBitmap(ivBitmap, null, rectF, null);报错

Canvas canvas = mTextTureView.lockCanvas(); if (canvas != null) { ivBitmap = Util.setOrgetBitmap(1, null); Rect rectF; if (ivBitmap.getWidth() == 1280) { rectF = new Rect(0, 0, mWidth, mHeight); } else { rectF = new Rect(0, 0, mWidth, m640Height); } **_canvas.drawBitmap(ivBitmap, null, rectF, null);_** } mTextTureView.unlockCanvasAndPost(canvas); 有的时候会在canvas.drawBitmap(ivBitmap, null, rectF, null);报错 报错如下: #00 pc 001846e8 /system/lib/libskia.so (S16_opaque_D32_nofilter_DX_neon(SkBitmapProcState const&, unsigned int const*, int, unsigned int*) +480) [armeabi-v7a] 2 #01 pc 00076a30 /system/lib/libskia.so (SkBitmapProcShader::shadeSpan(int, int, unsigned int*, int) +148) [armeabi-v7a] 3 #02 pc 00088aa4 /system/lib/libskia.so (SkARGB32_Shader_Blitter::blitRect(int, int, int, int) +700) [armeabi-v7a] 4 #03 pc 000cef28 /system/lib/libskia.so (SkScan::FillIRect(SkIRect const&, SkRegion const*, SkBlitter*) +368) [armeabi-v7a] 5 #04 pc 000cf020 /system/lib/libskia.so (SkScan::FillRect(SkRect const&, SkRegion const*, SkBlitter*) +152) [armeabi-v7a] 6 #05 pc 000cf18c /system/lib/libskia.so (SkScan::FillRect(SkRect const&, SkRasterClip const&, SkBlitter*) +84) [armeabi-v7a] 7 #06 pc 0009e160 /system/lib/libskia.so (SkDraw::drawRect(SkRect const&, SkPaint const&) const +660) [armeabi-v7a] 8 #07 pc 0009e810 /system/lib/libskia.so (SkDraw::drawBitmap(SkBitmap const&, SkMatrix const&, SkPaint const&) const +1000) [armeabi-v7a] 9 #08 pc 00098938 /system/lib/libskia.so (SkDevice::drawBitmap(SkDraw const&, SkBitmap const&, SkIRect const*, SkMatrix const&, SkPaint const&) +76) [armeabi-v7a] 10 #09 pc 00098d7c /system/lib/libskia.so (SkDevice::drawBitmapRect(SkDraw const&, SkBitmap const&, SkRect const*, SkRect const&, SkPaint const&) +368) [armeabi-v7a] 11 #10 pc 000917a0 /system/lib/libskia.so (SkCanvas::internalDrawBitmapRect(SkBitmap const&, SkRect const*, SkRect const&, SkPaint const*) +828) [armeabi-v7a] 12 #11 pc 00078227 /system/lib/libandroid_runtime.so [armeabi-v7a] 13 #12 pc 0007837d /system/lib/libandroid_runtime.so [armeabi-v7a] 14 #13 pc 000783b1 /system/lib/libandroid_runtime.so [armeabi-v7a] 15 #14 pc 000203cc /system/lib/libdvm.so (dvmPlatformInvoke +112) [armeabi-v7a] 16 #15 pc 00050d8f /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*) +398) [armeabi-v7a] 17 #16 pc 000298a4 /system/lib/libdvm.so [armeabi-v7a] 18 #17 pc 0000623c (null) 19 java: 20 android.graphics.Canvas.native_drawBitmap(Native Method) 21 android.graphics.Canvas.drawBitmap(Canvas.java:1160) 22 com.deeconn.MainFragment.ScenePageActivity.onDraw(ScenePageActivity.java:836) 23 com.deeconn.MainFragment.ScenePageActivity$4.run(ScenePageActivity.java:753) 24 java.lang.Thread.run(Thread.java:841) 25 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390) 26 java.util.concurrent.FutureTask.run(FutureTask.java:234) 27 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 28 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 29 java.lang.Thread.run(Thread.java:841)

[Android]如何在canvas上随机drawBitmap,并且每个bitmap都不会被重叠?

敲android还没多久,对于这种问题真的很苦手 我的思路是,定义一个Position类,里面有left top两个属性,再定义一个ArrayList<Positon>数组,在每次random一个bitmap的坐标后,用Position对象存它的left top值,然后再遍历当前的ArrayList,如果新的坐标值和数组中的坐标值产生冲突(就是坐标在能与现有坐标重叠的范围内),我就返回false,重复上述步骤,一直到找到符合条件的坐标 代码是以下: ``` Position zero = new Position(0, 0); positions.add(zero); Random random = new Random(); int count = 0; while (count<index.length){//这个index是一个int数组 int left = random.nextInt(screen_width-105); int topp = random.nextInt(screen_height-105); Position position = new Position(left, topp); if (position.isEmpty()) { canvas.drawBitmap(activity.imgs[count], left, topp,new Paint()); count++; positions.add(position); } } ``` Position的定义是这样的: ``` class Position{ private int left; private int top; public Position(int left, int top){ this.left = left; this.top = top; } public int getLeft(){return left;} public int getTop(){return top;} public void setLeft(int left){ this.left = left; } public void setTop(int top){ this.top = top; } //获取屏幕的 public boolean isEmpty(){//每张图片大小都是105*105, if (top<438||top>245){return false;}//这里是禁止绘制区域 for (Position p : positions){ if (top<438||top>245){ return false; }else if ( left>(p.left-120)&& left<(p.left+120)&& top>(p.top-120)&& top<(p.top+120) ){ return false; } } return true; } ``` 运行是屏幕一片漆黑,就宛如我这个菜鸟脆弱的心。。。。 其实绘制出来过,但是还是好多重叠,后来我发现条件判断那儿好像不对,就把循环条件给改了,然后就黑了

android 在 view 里我使用一个 自定义的 canvas 画图 出现问题

在 view 里我使用一个 自定义 canvas 画图。先在 canvas 里画出背景, 再画出几个图片。 背景是一个张图片。当触发 onTouchEvent 后,图片移动 canvas 重画背景画出来会有图片移动的痕迹。 如果背景指定了一个颜色就不会有这样的问题。 怎么解决? canvas = new Canvas(bgbitmap); 绘制背景: canvas.drawColor(selectedColor); 如果用 drawBitmap 绘制背景会有问题 // canvas.drawBitmap(bgbitmap, 0, 0, null); // 绘制 图片 for (int i = fbmpCount - 1; i >= 0; i--) { FreeBitmap fb = findFreeBmpByPriority(i); if (fb != null) this.canvas.drawBitmap(fb.getBmp(), fb.getXpoint(), fb.getYpoint(), null); } this.invalidate(); // onDraw 方法。 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawBitmap(bgbitmap, 0, 0, null); }

Android Canvas clipPath 画图锯齿问题

在Canvas上裁剪一个Path,将Bitmap画上去,出现锯齿问题。 Path path = new Path(); path.addCircle(left, top, radius, Path.Direction.CCW); canvas.save(); canvas.clipPath(path); Rect destRect = new Rect(left, top, right, bottom); Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setAntiAlias(true); canvas.drawBitmap(bitmap, srcRect, destRect, paint); canvas.restore();

Android drawbitmap画出的图跟原图相比大了一倍

![图片说明](https://img-ask.csdn.net/upload/201607/28/1469674016_658013.png) 如图 ,原图是200*40大小的,放在mdpi文件夹,用模拟器768*1280的运行,结果图是 ![图片说明](https://img-ask.csdn.net/upload/201607/28/1469674570_739784.png) 用的函数就是canvas.drawBitmap(bitmapStart, 140, 100, paint);,求大神解惑!!!!小弟感激不尽

canvas.toDataURL 处理图片时传递参数 quality 将图片压缩无效

图片转bace64方法如下 ``` function getBase64Image(img) { var dataURL; var canvas = document.createElement("canvas"); canvas.width = img.width; canvas.height = img.height; var ctx = canvas.getContext("2d"); ctx.drawImage(img, 0, 0, img.width, img.height); var ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase(); dataURL = canvas.toDataURL("image/" + ext, 0.5); return dataURL; } ``` 在 canvas.toDataURL 时传 quality 参数,不管传几都没有体现出来压缩,传1图片出来是300k ,传0.1出来也是300k 求解

如何将页面保存为图片(兼容IE),用html2canvas.min.js 不能兼容ie

如何将页面保存为图片(兼容IE),用html2canvas.min.js 不能兼容ie

执行动画后再设置Canvas.Left值不起作用

一个很奇怪的问题,不知道大家遇到过没有: 1、在Canvas中直接设置元素位置,是有效果的,比如 Canvas.SetLeft(box, 50); 2、使用一个StoryBoard或直接BeginAnimation动画改变位置,也是有效果的 (见test1_Click) 3、在使用动画改变元素位置后,再使用Canvas.SetLeft,纹丝不动!!? XAML代码: ``` <Canvas> <Border x:Name="box" Width="100" Height="100" Background="Blue" Canvas.Left="150" Canvas.Top="90"/> <Button x:Name="test1" Content="test1" Height="27" Canvas.Left="441" Canvas.Top="17" Width="57" Click="test1_Click"/> <Button x:Name="test2" Content="test2" Height="27" Canvas.Left="441" Canvas.Top="57" Width="57" Click="test2_Click"/> </Canvas> ``` ![](http://img.bbs.csdn.net/upload/201604/15/1460712412_240933.png) 后台代码: ``` private void test1_Click(object sender, RoutedEventArgs e) { //((Storyboard)this.Resources["move"]).Begin(); KeyTime time_layout = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(200)); Storyboard sb = new Storyboard(); DoubleAnimationUsingKeyFrames da = new DoubleAnimationUsingKeyFrames(); sb.Children.Add(da); Storyboard.SetTarget(da, box); Storyboard.SetTargetProperty(da, new PropertyPath("(Canvas.Left)")); EasingDoubleKeyFrame kf_left = new EasingDoubleKeyFrame { KeyTime = time_layout, Value = 200 }; da.KeyFrames.Add(kf_left); sb.Begin(); } private void test2_Click(object sender, RoutedEventArgs e) { Canvas.SetLeft(box, 50); } ```

如何使得canvas里的图片能够进行旋转,而不导致整个画布的旋转

自定义的布局中,在一个Canvas里绘画了很多图片。现在想使得画布里的 每个图片都进行旋转。我使用了下面的代码 ``` public static void drawPic(Canvas canvas) { mRotation += 10; if (mRotation > 360) { mRotation = mRotation % 360; } synchronized (lockObject) { for (int i = 0; i < particleList.size();i++) { Picture particle = pictureList.get(i); Paint paint=new Paint(); ...... paint.setAlpha(particle.getAlpha()); //rotate the bitmap canvas.save(); Matrix matrix = new Matrix(); matrix.postRotate(mRotation,particle .getPositionX() + particle.getParticleWidth()/2, particle.getPositionY() + particle.getParticleHeight()/2); canvas.drawBitmap(particle.getParticleImage(), matrix, paint); canvas.restore(); } } } ``` 但是上面的代码运行的结果是整个画布旋转,而不是画布里的图片旋转,这是为什么?求高手解答。

android:用Bitmap+Canvas画出来的东西,有的能打印有的不能打印

下面这段代码目的是想把图片、文字等打印在一张创建的背景图上。怎么有的能打印出来有的不能?请问要怎么做才能把要打印的都打印上去? public void DrawImage() { /*建立画布,画笔,位图初始化*/ bitmap = Bitmap.createBitmap(xp_width, xp_height, Bitmap.Config.ARGB_8888); canvas = new Canvas(bitmap); canvas.drawColor(Color.WHITE); paint = new Paint(); paint.setTextSize(5); /*花两边的圆孔 能打印*/ canvas.drawColor(Color.rgb(223, 233, 235)); for (int y = 5; y < xp_height - 5; y++) { canvas.drawOval(10, y, 24, y + 14, paint); canvas.drawOval(495, y, 509, y + 14, paint); y = y + 27; } /*把头部信息打印在背景图上 能打印*/ bitmap_top = BitmapFactory.decodeResource(getResources(), R.drawable.lishua_top); // 指定图片绘制区域 Rect src_top = new Rect(0, 0, bitmap_top.getWidth(), bitmap_top.getHeight()); // 指定图片在屏幕上显示的区域,四个点的坐标 Rect dst_top = new Rect(45, 15, 475, 55); canvas.drawBitmap(bitmap_top, src_top, dst_top, paint); Log.d("xg", "this is do top"); /*把印章信息打印在背景图上 不能打印*/ bitmap_mark = BitmapFactory.decodeResource(getResources(), R.drawable.lakala_top); // 指定图片绘制区域 Rect src_mark = new Rect(0, 0, bitmap_mark.getWidth(), bitmap_mark.getHeight()); // 指定图片在屏幕上显示的区域,四个点的坐标 Rect dst_mark = new Rect(280, 595, 485, 570); //canvas.rotate(); canvas.drawBitmap(bitmap_mark, src_mark, dst_mark, paint); /* 能打印*/ canvas.drawLine(100,100,200,200,paint); /* 不能打印*/ canvas.drawPoint(100,100,paint); imageView.setImageBitmap(bitmap);

canvas.drawPoint不起作用

Paint paint3 = new Paint(); paint3.setAntiAlias(true); paint3.setColor(Color.BLACK); paint3.setStrokeWidth(20); paint3.setStrokeCap(Paint.Cap.ROUND); canvas.drawPoint(centerX, centerY, paint3); canvas.drawCircle() 和 canvas.drawRect()都是可以的,canvas.drawPoint()就不起作用了,why?

java swt canvas.redraw 画图问题

# java swt canvas.redraw 画图问题 最新再用Java swt做桌面应用程序。,遇到一个小问题 问题描述:在地图上标记移动物体的位置,实际上就输在canvas中的图片上画点;由于是移动物体,所以位置时时刻刻都在变动,当把当前时刻物体绘制到canvas中的时候,就需要考虑下一次绘制,这时候我用的是canvas.redraw()来重新加载地图(图片),然后再把物体的绘制上去,这个过程就是用来刷新移动物体在地图上的位置的。问题来了,按照这个方法实际上是绘制的结果一闪而过,新的位置并没有显示到redraw之后的地图上。 求大神解答! 小弟特别感谢! canvas.addPaintListener(new PaintListener(){ @Override public void paintControl(PaintEvent e) { e.gc.drawImage(image, 0, 0); drawGridLine(); } }); ``` //程序某处 使用到canvas.redraw(); for(int j=0; j<aList.size(); j++) { canvas.redraw(); Point aPoint = (Point) aList.get(j); gc.drawImage(imageDot, 0, 0, 54, 53, (int)(aPoint.getX())-5, (int)(aPoint.getY())-5, 10, 10); } ``` ```

android canvas(bitmap)失败

目前使用canvas在surfaceview上画路径 需要对路径进行缩放处理 所以想把canvas画的图放在bitmap上进行缩放处理 但是 使用canvas(bitmap)后,画出来的点,并没有显示在bitmap上是什么原因呀

关于Android 自定义View中的onDraw里的drawBitmap。

关于Android 自定义View中的onDraw里的drawBitmap 有一个半圆的图片,是一个统计图(就是油箱表的那样),还有一个指针的图片要把指针添加到图片里,然后传值让那个指针根据而移动。 找不到什么方法,所以求教下大神 我现在能把指针添加在图片里就是怎么让指针头移动不会做 我的代码是: ``` float getx; float gety; float jiangex,jiangey,yuandianx,yuandiany; protected void onDraw(Canvas canvas) { super.onDraw(canvas); //获取控件的X轴 getx = getX(); //获取控件的Y轴 gety = getY(); //将X轴分成10份 jiangex = getWidth() / 10; //将Y轴分成5份 jiangey = getHeight()/5; //设置一个X轴原点让X轴在中间 yuandianx = getx+jiangex*5; //设置一个Y轴原点 yuandiany = gety+jiangey; //画笔1 Paint paint = new Paint(); paint.setColor(Color.RED); paint.setStrokeWidth(5); paint.setAntiAlias(true); //画笔2 Paint paint1 = new Paint(); paint1.setColor(Color.BLUE); paint1.setStrokeWidth(5); paint1.setAntiAlias(true); //添加图片 Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.zhen); //让图片在控件上显示 canvas.drawBitmap(bitmap, yuandianx,yuandiany-30, paint1); } ``` ```![图片说明](https://img-ask.csdn.net/upload/201905/28/1559023454_575078.png)![图片说明](https://img-ask.csdn.net/upload/201905/28/1559023460_299691.png)![图片说明](https://img-ask.csdn.net/upload/201905/28/1559023476_611632.png)

通过AJAX将canvas.toDataUrl()发送到php

<div class="post-text" itemprop="text"> <p>I am trying to send a canvas.toDataUrl() to a php page via AJAX.</p> <p>Here's is my try:</p> <p>JavaScript code:</p> <pre><code>function showUser() { str = "url="+canvas.toDataUrl(); if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 &amp;&amp; xmlhttp.status==200) { document.getElementById("txtHint").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","file.php?"+str,true); xmlhttp.send(); } </code></pre> <p>php:</p> <pre><code>&lt;?php $url = $_GET['url']; echo "$url"; ?&gt; </code></pre> <p>The code above doesn't seem to be working, although I did the exact same thing but with a String value instead, like the following:</p> <pre><code> function showUser() { str = "url=12345"; if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 &amp;&amp; xmlhttp.status==200) { document.getElementById("txtHint").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","file.php?"+str,true); xmlhttp.send(); } </code></pre> <p>This one works fine, but when I use canvas.toDataUrl() it doesn't work !? why?</p> <p>Is there another way to send canvas.toDataUrl() to php?</p> <p>Thanks</p> </div>

使用html2canvas.js导出图片网页过长图片变黑问题

最近在做项目,需求是把网页转成pdf并导出,我使用的是html2canvas.js和jsPDF.js来实现的。 现在问题在于,如果页面比较少导出的图片是正常的,随之PDF就是正常的。但是 如果页面比较长,导出的图片就是黑色的,PDF也是黑色的,请问哪位大神能帮我解 决一下这个问题,下面是代码: var pdfContainer = document.getElementById("month_smoke_control" + month_smoke_control_vue.smoke_winds[0].id); html2canvas(pdfContainer, { onrendered:function(canvas) { loadPdf(canvas); savePdf(); } }) function loadPdf(canvas) { var contentWidth = canvas.width; var contentHeight = canvas.height; //一页pdf显示html页面生成的canvas高度; var pageHeight = parseInt(contentWidth / 595.28 * 841.89); //未生成pdf的html页面高度 var leftHeight = contentHeight; //pdf页面偏移 var position = 0; //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高 var imgWidth = 555.28; var imgHeight = 555.28/contentWidth * contentHeight; var pageData = canvas.toDataURL('image/jpeg', 1.0); //console.log(pageData); //var pdf = new jsPDF('', 'pt', 'a4'); //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89) //当内容未超过pdf一页显示的范围,无需分页 if (leftHeight < pageHeight) { pdf.addImage(pageData, 'JPEG', 20, 0, imgWidth, imgHeight ); if(addFlag){ pdf.addPage(); } } else { while(leftHeight > 0) { pdf.addImage(pageData, 'JPEG', 20, position, imgWidth, imgHeight) leftHeight -= pageHeight; position -= 841.89; //pdf.addPage(); //避免添加空白页 //pdf.addPage(); if(leftHeight > 0) { pdf.addPage(); } } } } function savePdf(){ pdf.save(build_name +"第" + week_num + title_return +"防烟排烟-"+smoke_type+"检测任务报告.pdf"); $("body").css("overflow", "visible"); document.getElementById("month_smoke_control_pdf").style.display = ""; document.getElementById("month_smoke_control_loading_bg").style.display = "none"; $(".month_smoke_control_page").css('display', ''); } 上面代码中,如果页面过长,html2canvas中生成的图片就是黑色,页面背景我都设置成白色了,但是也没用,还请诸位帮忙解决一下。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

软件测试入门、SQL、性能测试、测试管理工具

软件测试2小时入门,让您快速了解软件测试基本知识,有系统的了解; SQL一小时,让您快速理解和掌握SQL基本语法 jmeter性能测试 ,让您快速了解主流来源性能测试工具jmeter 测试管理工具-禅道,让您快速学会禅道的使用,学会测试项目、用例、缺陷的管理、

基于西门子S7—1200的单部六层电梯设计程序,1部6层电梯

基于西门子S7—1200的单部六层电梯设计程序,1部6层电梯。 本系统控制六层电梯, 采用集选控制方式。 为了完成设定的控制任务, 主要根据电梯输入/输出点数确定PLC 的机型。 根据电梯控制的要求,

捷联惯导仿真matlab

捷联惯导的仿真(包括轨迹仿真,惯性器件模拟输出,捷联解算),标了详细的注释捷联惯导的仿真(包括轨迹仿真,惯性器件模拟输出,捷联解算),标了详细的注释

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

图书管理系统(Java + Mysql)我的第一个完全自己做的实训项目

图书管理系统 Java + MySQL 完整实训代码,MVC三层架构组织,包含所有用到的图片资源以及数据库文件,大三上学期实训,注释很详细,按照阿里巴巴Java编程规范编写

玩转Linux:常用命令实例指南

人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。 本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 --------------------------------------------------------------- 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+700元编程礼包。 &nbsp;

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

本课程适合CCNA或HCNA网络小白同志,高手请绕道,可以直接学习进价课程。通过本预科课程的学习,为学习网络工程师、思科CCNA、华为HCNA这些认证打下坚实的基础! 重要!思科认证2020年2月24日起,已启用新版认证和考试,包括题库都会更新,由于疫情原因,请关注官网和本地考点信息。题库网络上很容易下载到。

C++语言基础视频教程

C++语言基础视频培训课程:本课与主讲者在大学开出的程序设计课程直接对接,准确把握知识点,注重教学视频与实践体系的结合,帮助初学者有效学习。本教程详细介绍C++语言中的封装、数据隐藏、继承、多态的实现等入门知识;主要包括类的声明、对象定义、构造函数和析构函数、运算符重载、继承和派生、多态性实现等。 课程需要有C语言程序设计的基础(可以利用本人开出的《C语言与程序设计》系列课学习)。学习者能够通过实践的方式,学会利用C++语言解决问题,具备进一步学习利用C++开发应用程序的基础。

微信小程序 实例汇总 完整项目源代码

微信小程序 实例汇总 完整项目源代码

Python数据挖掘简易入门

&nbsp; &nbsp; &nbsp; &nbsp; 本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数据挖掘问题,为进一步深入学习数据挖掘打下扎实的基础。

2020-五一数学建模大赛C类问题饲料加工配比及优化.pdf

2020年,“51”数学建模C类问题,关于饲料配比问题以及加工优化方案。论文采用统计分析,建立了关于饲料加工的多目标优化模型。并利用蒙特卡罗算法对目标函数进行优化,解决了饲料加工质量最优配比问题并进行

MySQL数据库从入门到实战应用

限时福利1:购课进答疑群专享柳峰(刘运强)老师答疑服务 限时福利2:购课后添加学习助手(微信号:csdn590),按消息提示即可领取编程大礼包! 为什么说每一个程序员都应该学习MySQL? 根据《2019-2020年中国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。 使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。 学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python 还是 R;但无论如何, MySQL 都是 IT 从业人员不可或缺的技能! 【课程设计】 在本课程中,刘运强老师会结合自己十多年来对MySQL的心得体会,通过课程给你分享一条高效的MySQL入门捷径,让学员少走弯路,彻底搞懂MySQL。 本课程包含3大模块:&nbsp; 一、基础篇: 主要以最新的MySQL8.0安装为例帮助学员解决安装与配置MySQL的问题,并对MySQL8.0的新特性做一定介绍,为后续的课程展开做好环境部署。 二、SQL语言篇: 本篇主要讲解SQL语言的四大部分数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL,学会熟练对库表进行增删改查等必备技能。 三、MySQL进阶篇: 本篇可以帮助学员更加高效的管理线上的MySQL数据库;具备MySQL的日常运维能力,语句调优、备份恢复等思路。 &nbsp;

navicat简体中文版 绿色版 (64位)

解压后安装navicat,打开navicat执行PatchNavicat即破解成功。可以正常使用啦。

linux“开发工具三剑客”速成攻略

工欲善其事,必先利其器。Vim+Git+Makefile是Linux环境下嵌入式开发常用的工具。本专题主要面向初次接触Linux的新手,熟练掌握工作中常用的工具,在以后的学习和工作中提高效率。

机器学习初学者必会的案例精讲

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

Python代码实现飞机大战

文章目录经典飞机大战一.游戏设定二.我方飞机三.敌方飞机四.发射子弹五.发放补给包六.主模块 经典飞机大战 源代码以及素材资料(图片,音频)可从下面的github中下载: 飞机大战源代码以及素材资料github项目地址链接 ————————————————————————————————————————————————————————— 不知道大家有没有打过飞机,喜不喜欢打飞机。当我第一次接触这个东西的时候,我的内心是被震撼到的。第一次接触打飞机的时候作者本人是身心愉悦的,因为周边的朋友都在打飞机, 每

一学即懂的计算机视觉(第一季)

图像处理和计算机视觉的课程大家已经看过很多,但总有“听不透”,“用不了”的感觉。课程致力于创建人人都能听的懂的计算机视觉,通过生动、细腻的讲解配合实战演练,让学生真正学懂、用会。 【超实用课程内容】 课程内容分为三篇,包括视觉系统构成,图像处理基础,特征提取与描述,运动跟踪,位姿估计,三维重构等内容。课程理论与实战结合,注重教学内容的可视化和工程实践,为人工智能视觉研发及算法工程师等相关高薪职位就业打下坚实基础。 【课程如何观看?】 PC端:https://edu.csdn.net/course/detail/26281 移动端:CSDN 学院APP(注意不是CSDN APP哦) 本课程为录播课,课程2年有效观看时长,但是大家可以抓紧时间学习后一起讨论哦~ 【学员专享增值服务】 源码开放 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化 下载方式:电脑登录https://edu.csdn.net/course/detail/26281,点击右下方课程资料、代码、课件等打包下载

java jdk 8 帮助文档 中文 文档 chm 谷歌翻译

JDK1.8 API 中文谷歌翻译版 java帮助文档 JDK API java 帮助文档 谷歌翻译 JDK1.8 API 中文 谷歌翻译版 java帮助文档 Java最新帮助文档 本帮助文档是使用谷

Qt5.10 GUI完全参考手册(强烈推荐)

本书是Qt中文版的参考手册,内容详尽易懂,详细介绍了Qt实现的各种内部原理,是一本不可多得的参考文献

Python可以这样学(第四季:数据分析与科学计算可视化)

董付国老师系列教材《Python程序设计(第2版)》(ISBN:9787302436515)、《Python可以这样学》(ISBN:9787302456469)配套视频,在教材基础上又增加了大量内容,通过实例讲解numpy、scipy、pandas、statistics、matplotlib等标准库和扩展库用法。

设计模式(JAVA语言实现)--20种设计模式附带源码

课程亮点: 课程培训详细的笔记以及实例代码,让学员开始掌握设计模式知识点 课程内容: 工厂模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、原型模型、代理模式、单例模式、适配器模式 策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式 课程特色: 笔记设计模式,用笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力 笔记标题采用关键字标识法,帮助学员更加容易记住知识点 笔记以超链接形式让知识点关联起来,形式知识体系 采用先概念后实例再应用方式,知识点深入浅出 提供授课内容笔记作为课后复习以及工作备查工具 部分图表(电脑PC端查看):

进程监控软件 Performance Monitor中文版

告诉你每个程序现在在做什么,还可以根据你的要求过滤无关的内容。

八数码的深度优先算法c++实现

人工智能的八数码的深度优先算法c++实现

2021考研数学张宇基础30讲.pdf

张宇:博士,全国著名考研数学辅导专家,教育部“国家精品课程建设骨干教师”,全国畅销书《张宇高等数学18讲》《张宇线性代数9讲》《张宇概率论与数理统计9讲》《张宇考研数学题源探析经典1000题》《张宇考

2019 Python开发者日-培训

本次活动将秉承“只讲技术,拒绝空谈”的理念,邀请十余位身处一线的Python技术专家,重点围绕Web开发、自动化运维、数据分析、人工智能等技术模块,分享真实生产环境中使用Python应对IT挑战的真知灼见。此外,针对不同层次的开发者,大会还安排了深度培训实操环节,为开发者们带来更多深度实战的机会。

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

2020_五一数学建模_C题_整理后的数据.zip

该数据是我的程序读取的数据,仅供参考,问题的解决方案:https://blog.csdn.net/qq_41228463/article/details/105993051

机器学习实战系列套餐(必备基础+经典算法+案例实战)

机器学习实战系列套餐以实战为出发点,帮助同学们快速掌握机器学习领域必备经典算法原理并结合Python工具包进行实战应用。建议学习顺序:1.Python必备工具包:掌握实战工具 2.机器学习算法与实战应用:数学原理与应用方法都是必备技能 3.数据挖掘实战:通过真实数据集进行项目实战。按照下列课程顺序学习即可! 课程风格通俗易懂,用最接地气的方式带领大家轻松进军机器学习!提供所有课程代码,PPT与实战数据,有任何问题欢迎随时与我讨论。

实用主义学Python(小白也容易上手的Python实用案例)

原价169,限时立减100元! 系统掌握Python核心语法16点,轻松应对工作中80%以上的Python使用场景! 69元=72讲+源码+社群答疑+讲师社群分享会&nbsp; 【哪些人适合学习这门课程?】 1)大学生,平时只学习了Python理论,并未接触Python实战问题; 2)对Python实用技能掌握薄弱的人,自动化、爬虫、数据分析能让你快速提高工作效率; 3)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; 4)想修炼更好的编程内功,优秀的工程师肯定不能只会一门语言,Python语言功能强大、使用高效、简单易学。 【超实用技能】 从零开始 自动生成工作周报 职场升级 豆瓣电影数据爬取 实用案例 奥运冠军数据分析 自动化办公:通过Python自动化分析Excel数据并自动操作Word文档,最终获得一份基于Excel表格的数据分析报告。 豆瓣电影爬虫:通过Python自动爬取豆瓣电影信息并将电影图片保存到本地。 奥运会数据分析实战 简介:通过Python分析120年间奥运会的数据,从不同角度入手分析,从而得出一些有趣的结论。 【超人气老师】 二两 中国人工智能协会高级会员 生成对抗神经网络研究者 《深入浅出生成对抗网络:原理剖析与TensorFlow实现》一书作者 阿里云大学云学院导师 前大型游戏公司后端工程师 【超丰富实用案例】 0)图片背景去除案例 1)自动生成工作周报案例 2)豆瓣电影数据爬取案例 3)奥运会数据分析案例 4)自动处理邮件案例 5)github信息爬取/更新提醒案例 6)B站百大UP信息爬取与分析案例 7)构建自己的论文网站案例

相关热词 c#分级显示数据 c# 不区分大小写替换 c#中调用就java c#正则表达式 验证小数 c# vscode 配置 c#三维数组能存多少数据 c# 新建excel c#多个文本框 c#怎么创建tcp通讯 c# mvc 电子病例
立即提问