我想绘制位图的子部分,但大小不同.如果大小比位图中的源矩形大,那么我希望位图的该部分平铺以填充目标区域.然而,他们没有得到平铺,而是被拉伸了.
我设置了所有变量如下:
Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.image);
Rect srcRect = ...
Rect dstRect = ...
Paint p = new Paint();
p.setShader(new BitmapShader(b, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT));
Run Code Online (Sandbox Code Playgroud)
然后在draw()方法中我绘制如下:
canvas.drawBitmap(b, srcRect, dstRect, p);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我该如何绘制srcRect以dstRect使位图的子部分得到平铺?
我这里有这个代码用于创建像素数组并将其绘制到图像中:
import javax.swing.JFrame;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferInt;
public class test extends Canvas implements Runnable {
private static final long serialVersionUID = 1L;
public static int WIDTH = 800;
public static int HEIGHT = 600;
public boolean running = true;
public int[] pixels;
public BufferedImage img;
public static JFrame frame;
private Thread thread;
public static void main(String[] arg) {
test wind = new test();
frame = new JFrame("WINDOW");
frame.add(wind);
frame.setVisible(true);
frame.setSize(WIDTH, HEIGHT);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
wind.init();
} …Run Code Online (Sandbox Code Playgroud) 我有一个Canvas带有Rectangle:
<Canvas>
<Rettangle/>
</Canvas>
Run Code Online (Sandbox Code Playgroud)
我希望,当我调整画布大小时,矩形保持相同的相对位置,例如:
----------------------------------------
| |
| |
| ____ |
| | | |
| |____| |
| |
|--------------------------------------
--------------------
| |
| ___ |
| |__| |
| |
|-------------------
Run Code Online (Sandbox Code Playgroud)
我能怎么做?
我试图将我的所有小图像,如草,水和沥青等,放到一个位图中.
我有一个像这样的数组:
public int Array[]={3, 1, 3, 3, 1, 1, 3, 3, 3, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1 ,1 ,1, 1, 1 ,1 ,1
,7 ,7 ,7, 7, 7 ,7, 7 ,7 ,7, 7
,7 ,7 ,7 ,7, 7 ,7, 7 ,7 ,7 ,7
,7 ,7 ,7 ,7, 7, 7, 7, 7 ,7 ,7
,7 ,7 ,7 ,7, 7, 7 ,7 ,7 ,7 ,7
,7 ,7 ,7 ,7, 7, 7, …Run Code Online (Sandbox Code Playgroud) 我正在尝试在画布上绘制一个矩形,中心位于触摸点.我正在使用以下代码:
canvas.drawRect((point.x + 15), (point.y + 15),(point.x + 15),(point.y + 15), paint);
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
但是当我使用时,
canvas.drawRect(point.x , point.y ,(point.x + 30),(point.y + 30), paint);
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,它有效.但唯一的危害是它不以触摸坐标为中心.矩形的左上角与触摸坐标重合.我哪里错了?
我想绘制一个像这个flash动画的画布图形:http: //www.cci.com.tr/tr/bizi-taniyin/tarihcemiz/
我画了六个弧,我想在这些弧中写六个字.有任何想法吗?
我正在创建一个气泡游戏,屏幕上有很多气泡在移动,我想在用鼠标点击它时弹出一个气泡.
我可以轻松获得鼠标的位置,但我不知道如何获得椭圆的位置以检查与鼠标点的交点.
关于如何获得椭圆位置的任何想法?!!
我使用Canvas作为我的容器.
我正在制作一个只在画布上显示形状的软件,如果用户点击该形状,它就会消失,并显示另一个形状,依此类推.我的问题是如何检查用户是否点击了形状?我的解决方案是获取画布中对象的位置和相对于画布的鼠标位置,并检查鼠标光标是否在形状区域的范围内.但我找不到在画布中获取对象位置的方法.
我为Delphi制作了一个日历组件.现在我想在更改月份时添加视觉效果(如Windows Vista标准日历).
现在我想创建一个组件的不可见副本,并在画布上绘制它以将其用于视觉效果.我试过BitBlt功能,但它不起作用,因为控件是不可见的.有没有办法在画布上绘制一个不可见的控件?
我一直在尝试制作一个简单的程序,它有一个像工具一样的画笔,打开时它创建了一个JFrame,在其中我放置了一个Canvas,用户可以在其中绘制.现在,我正在尝试使用在退出时调用的saveCanvas方法来保存绘图,但无论我做什么,我都会得到一个黑色图像.这是我的代码:
public class Test{
JFrame f;
Canvas c;
int x=-1, y=-1;
public Test() {
f = new JFrame();
f.setSize(1200, 800);
c = new Canvas(){
@Override
public void paint(Graphics g){
super.paint(g);
}
};
f.add(c);
c.addMouseMotionListener(new MouseMotionListener(){
@Override
public void mouseMoved(MouseEvent e) {
// empty
}
@Override
public void mouseDragged(MouseEvent e){
if(x==-1){
x = e.getX();
y = e.getY();
}
c.getGraphics().fillOval(x, y, 5, 5);
x = e.getX();
y = e.getY();
}
});
f.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent evt) {
onExit();
}
public …Run Code Online (Sandbox Code Playgroud)