我有一个视图,我想将其存储为图像(例如截取它的屏幕截图)。为此,我使用以下代码:
View view = findViewById(R.id.share_preview);
Bitmap b = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
view.draw(c);
Run Code Online (Sandbox Code Playgroud)
然后我将位图存储到图库中。
问题是,保存的图像始终与视图具有相同的大小。由于视图的大小取决于手机屏幕的大小,因此图像在每个设备上的大小都不同。
是否有可能获得更高分辨率的视图图像(并且每个设备上的分辨率相同)?
我尝试过的是在绘制到画布上之前在视图上调用scaleX()和scaleY()。视图由此缩放,但图像仍然具有旧大小(我还更改了位图的大小)。代码如下所示:
View view = findViewById(R.id.share_preview);
// here's the difference
view.setScaleX(2);
view.setScaleY(2);
Bitmap b = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
view.draw(c);
Run Code Online (Sandbox Code Playgroud)
也许需要很长时间才能更新秤。但我不知道如何检查缩放何时完成(并且缩放视图也不应该被渲染,因为它看起来完全错误)。
我知道这个问题以前被问过很多次,但每次我尝试从 ImageView 检索位图时,它都会返回 null 对象
我试过 :
ImageView imageView = findViewById(R.id.image);
Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
Run Code Online (Sandbox Code Playgroud)
和
imageView.setDrawingCacheEnabled(true);
imageView.buildDrawingCache();
Bitmap bmap = imageView.getDrawingCache();
Run Code Online (Sandbox Code Playgroud)
而且还有滑行。
我错过了什么还是有其他方法可以实现这一目标?
感谢帮助
所以我一直在尝试在6502(针对Commodore 64)中绘制位图。当我将图像加载到地址2000时,它工作正常,但一旦尝试其他地址(例如2400),它就不再工作了。
另外,我使用 CBM prg Studio 作为我的 IDE,使用 Vice 作为我的 C64 模拟器...不知道这是否重要。
这是我的代码
*=$0801
BYTE $0E, $08, $0A, $00, $9E, $20, $28
BYTE $32, $33, $30, $34, $29, $00, $00, $00
*=$0900
; **************************************************************
; VARIABLES
; **************************************************************
TITLE_CHARMEM = $4340
TITLE_COLRMEM = $4728
TITLE_BACKMEM = $4B10
; **************************************************************
; MACROS
; **************************************************************
; **************************
; KEYWAIT
defm KEYWAIT ; Paramters: [Key]
@WAITLOOP
lda #$CB
cmp /1
bne @WAITLOOP
endm
; **************************
; PRINT
defm …Run Code Online (Sandbox Code Playgroud) 我有4个小的tiff图像,我想通过合并4个单个图像来生成一个大图像.有没有人知道如何直接使用Delphi或一些可以做到的好组件?
使用C++和.net我想要显示一个数据流作为滚动图像.每次我得到一些新数据时,我想将其添加为新行(128x1像素)并将之前的内容滚动到一侧.
我对这个问题的第一次尝试涉及每次获得新行时渲染整个数据集.这有效,但速度太慢,所以我认为写入某种缓冲区可能更有意义(可能是位图?).问题是我无法看到我能做到这一点; Graphic对象允许你画得很开心,但我看不出一种明显的方法告诉我的控件使用一个Bitmap对象作为它的缓冲区?同样,我看不到一种绘制位图的方法,然后我可以将其写入屏幕.
这一定是可能的,但到目前为止我的google-foo已经失败了......
[编辑1]为了澄清,数据是一个频谱图.下图显示了我试图实现的那种事情:
我正在绘制的数据来自浮点数组.没有什么可以限制我会得到多少,所以我只想忘记数据,因为它从情节的一侧掉落.
我目前正在从a继承System::Windows::Forms::UserControl,但如果有更好的替代品,可以切换到别的东西吗?
有没有人有一个如何用Delphi TImage做掩盖的例子,所以我可以将一个图像放在另一个上?
使用2009年
有没有人知道加载位图和处理所有情况的好C样本:rle,b/w位图,等等?
代码应该是跨平台的.
谢谢.
所以,我的bitmapA是矩形的.我有一个我要复制的裁剪区域......
但是,位图与裁剪成一定角度.
如何从位图复制一个部分,该部分不是在x,y轴上布置的矩形?
或复制自定义形状????
谢谢
我试图了解Matrix类中的方法转换.我用它来复制bitMapData的片段.但我需要更好地了解转换的作用.
我有一个瓷砖表,上面有3个图像.所有30x30像素.总位图的宽度为90pxs.
第一个瓷砖是绿色,第二个是棕色,第三个是黄色.如果我使用转换的矩阵移动超过30pxs,而不是变成棕色,我会变黄,如果我移动超过60px,我会变成棕色.
如果我移动-30像素,那么顺序是正确的.我对发生的事感到困惑.
tileNum -= (tileNumber * tWidth);
theMatrix = new Matrix();
theMatrix.translate(tileNum,0);
this.graphics.beginBitmapFill(tileImage,theMatrix);
this.graphics.drawRect(0, 0,tWidth ,tHeight );
this.graphics.endFill();
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我转换是如何工作的,或者是一些显示它们如何工作的资源.我最终想知道在每个瓷砖之间来回切换的好方法.
我自己在Windows上使用C++的位图来处理:
HBITMAP hBitmap;
Run Code Online (Sandbox Code Playgroud)
在这张图片上,我想做一些图像识别,模式分析,这种事情.在我在大学的学习中,我在Matlab中完成了这项工作,根据他们的位置很容易得到单个像素,但我不知道如何在Windows下用C++做到这一点 - 我还没有真正能够明白我到目前为止所阅读的内容.我已经看到一些漂亮的Bitmap类的引用,它允许你setPixel()和getPixel()等等,但我认为这是与.net.
我应该如何将HBITMAP变成我可以轻松玩的东西?我需要能够获得RGBA信息.是否有库允许我使用数据而无需了解DC和BitBlt等等?