标签: paint

绘制具有特定像素宽度的线条

我想在画布上使用具有一定宽度(以像素为单位,或理想情况下为"dp")的线条显示X/Y数据.我已经尝试了Paint的setStrokeWidth(..)方法,这确实改变了线宽,但它不是我需要的.在我的例子中,我使用matrix.preScale(xScale,yScale)将我的画布缩放为"真实工程单位",因此X比例表示0到100,Y为0比1.Paint对象的setStrokeWidth()方法似乎设置笔划,使其遵循我的矩阵preScale()设置.换句话说,水平线绘制得非常薄,垂直线绘制得非常厚.

有没有办法配置Paint,这样无论绘制线的方向,其宽度都是一致的像素数?

我已经尝试定义一个Drawable,它是一个行,并从那里创建一个ShapeDrawable,然后将它应用到Paint但在运行时遇到一些讨厌的类转换错误.这让我觉得这是错误的做法.但也许我太早放弃了.

据我所知,有一些Android绘图/图表包可用,有些包含源代码,但我真的希望在这里了解平台,而不是使用第三方解决方案.

谢谢你的任何提示!丰富

android canvas paint stroke

10
推荐指数
1
解决办法
1万
查看次数

Android Paint.setTypeface不适用于斜体

Paint.setTypeface不适用于斜体或我正在以错误的方式做某事.我可以创建普通,粗体,等宽和衬线文本,但我不能创建斜体文本.它总是看起来很正常(或者在粗体斜体的情况下,它看起来很大胆).

    //This will appear monospace
    paint.setTypeface(Typeface.MONOSPACE);
    canvas.drawText("foo", 10, 10, paint);

    //This will appear serif
    paint.setTypeface(Typeface.SERIF);
    canvas.drawText("foo", 10, 10, paint);

    //This will appear bold
    paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
    canvas.drawText("foo", 10, 10, paint);

    //This will NOT appear italic <===  PROBLEM
    paint.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC));
    canvas.drawText("foo", 10, 10, paint);

    // This isn't working either <===  PROBLEM
    paint.setTypeface(Typeface.create(Typeface.SANS_SERIF, Typeface.ITALIC));
Run Code Online (Sandbox Code Playgroud)

所以现在问题是:有一个已知的解决方法吗?我的简单目标是用斜体绘制一些单词......

android paint italic typeface

10
推荐指数
2
解决办法
1万
查看次数

获取图像特定区域的所有多边形坐标?

我有一个图像,我把链接和文本与HTML图像映射.这很好.我想对图像的特定区域有一些悬停效果.例如,拍摄世界地图,当您将鼠标悬停在一个突出显示的国家/地区时.使用html图像映射和一些css它不是问题,也就是说,如果你有一个所有国家的所有多边形坐标的列表.

那我怎么得到那些?你不可能手动这样做.

我不是一个Photoshop专家,但我想你会在一个区域做一个"魔杖"选择,然后以某种方式列出用于创建选择的坐标.有这样的功能吗?

我个人使用Paint.Net进行简单的图像编辑,它没有我所知道的那个功能.

你知道这样做的方法吗?

html css photoshop image paint

10
推荐指数
1
解决办法
3137
查看次数

Android - 如何在视图上绘制

我想在我自己的观点(R.id.view)上画画,但这段代码似乎没有任何效果.它根本不允许我画任何东西.

public class MainActivity extends Activity implements OnTouchListener
        {
Path mPath;
Canvas canvas;
Paint mPaint;
MaskFilter mEmboss;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        View view=(View)findViewById(R.id.view1);
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setDither(true);
        mPaint.setColor(0xFFFF0000);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        mPaint.setStrokeWidth(12);

        canvas = null;
        //view.draw(canvas);
        mPath = new Path();
        Bitmap mBitmap;
        //Paint mBitmapPaint = new Paint(Paint.DITHER_FLAG);
        mBitmap = Bitmap.createBitmap(210, 170, Bitmap.Config.ARGB_8888);
        canvas = new Canvas(mBitmap);
        canvas.drawColor(0xFFAAAAAA);

        canvas.drawBitmap(mBitmap, 0, 0, mPaint);


        //canvas.drawPaint(mPaint);
        view.draw(canvas);
        canvas.drawPath(mPath, mPaint);


        mEmboss = new EmbossMaskFilter(new float[] { 1, 1, 1 }, …
Run Code Online (Sandbox Code Playgroud)

android view paint android-custom-view

10
推荐指数
1
解决办法
2万
查看次数

在Java中为网格创建绘制矩形(用黑色填充)功能

我在程序中创建了一个网格.以下是用于创建网格的代码.

import java.awt.Graphics;

import javax.swing.JComponent;
import javax.swing.JFrame;

class Grid extends JComponent {
    public void paint(Graphics g) {
        g.drawRect (10, 10, 800, 500);    

        for (int i = 10; i <= 800; i+= 10)
            g.drawLine (i, 10, i, 510);

        for (int i = 10; i <= 500; i+= 10)
            g.drawLine (10, i, 810, i);
    }
}

public class CoreControl {

    public static void main(String[] a) {
        JFrame window = new JFrame();
        window.setSize(840,560);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.getContentPane().add(new Grid());
        window.setVisible(true);
    }

}
Run Code Online (Sandbox Code Playgroud)

我想要做的是创建一个函数,它将根据我给它的坐标绘制一个矩形(填充黑色).基本上我想用黑色填充网格的某些单元格,我的想法是在单元格坐标上绘制黑色填充的矩形.我该如何使用这个功能?

我尝试创建另一个名为drawRectangle的类,并在main函数中调用它,如window.getContentPane().add(new drawRectangle()); 但是这不起作用(只有drawRectangle显示而不是网格). …

java graphics grid swing paint

10
推荐指数
1
解决办法
9万
查看次数

如何防止QWidget绘画,但仍然可以响应事件?

我有一个QGLWidget在Qt应用程序中呈现OpenGL场景.我想添加一些覆盖在其上的半透明Qt小部件QGLWidget.这比标准小部件更难,因为OpenGL绘图上下文对于Qt的画家类是未知的.因此,如果我只是做了明显的事情并在QGLWidget例如顶部放置一个透明工具栏,则工具栏的透明部分将呈现黑色(绘制时无法访问OpenGL帧缓冲区).

似乎处理此类事情的推荐方法是在绘制OpenGL场景后重绘2D内容.只要您只是绘制简单的形状,链接的示例似乎非常简单.相反,我想要做的是推迟绘制一些子QWidget对象的绘画,以便在绘画事件中完成QGLWidget.

所以,我的问题归结为:

  1. 防止叠加QWidget在正常的2D上下文中绘制.
  2. 在绘制事件处理程序中,在QGLWidget绘制构成背景的3D场景后绘制叠加层.

这个列表中的第二项似乎很简单:我可以QWidget::render()QGLWidget绘图事件中使用在视口顶部绘制所需的小部件.这很好用.

第一项更棘手:我需要一种方法来阻止小部件在正常的事件过程中绘画,并且只在QGLWidget油漆处理程序中绘制它们.一个显而易见的方法是使用隐藏叠加层QWidget::hide().这允许我按照我的意愿在OpenGL场景上绘制小部件.但是,由于窗口小部件是隐藏的,因此它们不响应鼠标或键盘事件.作为一个例子,我使用了一个QToolBar带有几个按钮,工具栏被正确绘制,但是没有功能(没有一个按钮响应点击).因此,如果沿着这条路走下去,似乎我需要一种方法来强制小部件仍然响应事件,即使它是隐藏的.

我尝试过的另一种方法是QToolBar使用事件过滤器拦截绘制事件,目的是阻止工具栏自行绘制.但是,工具栏仍然呈现; 我假设这是因为工具栏上的各种按钮都是仍然绘制的子窗口小部件,即使我拦截了父级的绘制事件.

关于我可以实现目标的方式的任何想法?

opengl qt paint qwidget

10
推荐指数
1
解决办法
7369
查看次数

在JPanel和JComponent上绘画有什么好处?

所以在最近的一个回答中,有人评论过此(关于绘画):

"这可能是90%Swing程序员的某种疾病:当他们制作自己的组件时,他们总是扩展JPanel而不是JComponent.为什么?"

我仍然是编程方面的新手,所以我认为现在称自己为Swing程序员为时尚早,因为我尚未找到自己的位置.但压倒一切JPanel只是我教的方式.所以我开始找到"为什么?"的答案.评论者的问题.这些是我找到的一些答案.


背景画是主要的区别.JComponent类不绘制其背景,因此您必须在重写的paintComponent方法中绘制背景.相比之下,JPanel有一个不透明的背景,可以通过调用它的paintComponennt方法来绘制.


一些程序员喜欢扩展JPanel类,而不是扩展JComponent.JPanel旨在成为可以包含其他组件的容器,但也可以在其上绘制.只有一个区别.面板是不透明的,这意味着它负责绘制其边界内的所有像素.最简单的方法是使用背景颜色绘制面板,方法是在每个面板子类的paintComponent方法中调用super.paintComponent:


如果将opaque属性设置为true ...那么Swing绘图系统不必浪费时间尝试在组件后面进行绘制,从而提高性能.


我认为最后一句话真的解释得最好.但是,除了透明度外,还有其他有益的原因"90%的Swing程序员都有这样的疾病"延伸JPanel,而不是JComponent

java swing paint jcomponent jpanel

10
推荐指数
2
解决办法
1470
查看次数

使用Android Paint进行背景图像颜色检测

当我开始绘画时,它会为整个背景着色,我的意思是它应该只绘制白点.应用程序截图如下.使用Android Paint,我想在背景可绘制的[Panda]上仅绘制白点并跳过任何其他颜色.

onDraw() 功能是:

protected void onDraw(Canvas canvas) {

    canvas.drawPath(path, paint);
    canvas.drawPath(circlePath, circlePaint);

    for (Pair<Path,Integer> path_clr : path_color_list ){
        paint.setColor(path_clr.second);
        canvas.drawPath( path_clr.first, paint);
    }

    for (Pair<Path,Integer> path_clr : circular_path_color_list ){
        circlePaint.setColor(path_clr.second);
        canvas.drawPath( path_clr.first, paint);
    }
}
Run Code Online (Sandbox Code Playgroud)

onTouchEvent功能是:

public boolean onTouchEvent(MotionEvent event) {

    float pointX = event.getX();
    float pointY = event.getY();
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        circlePath.reset();
        path.moveTo(pointX, pointY);

        return true;
    case MotionEvent.ACTION_MOVE:
        path.lineTo(pointX, pointY);
        circlePath.reset();
        circlePath.addCircle(pointX, pointY, 10, Path.Direction.CW);

        break;

    case MotionEvent.ACTION_UP:
        circlePath.reset();

        break;
    default:
        return false;
    } …
Run Code Online (Sandbox Code Playgroud)

android paint android-drawable

10
推荐指数
1
解决办法
815
查看次数

获取仅绘制特定区域边界的UIImage - PaintView

我已经使用以下方法实现了绘画/绘画:

- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event
-(void) touchesMoved: (NSSet *) touches withEvent: (UIEvent *) event
- (void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event
Run Code Online (Sandbox Code Playgroud)

现在的问题是,对于任何绘制的线,我想得到那个特定的线/油漆图像.我不想要整个屏幕的图像,只需要绘制线条/绘图的区域/边界.

原因是我想在该行/绘制的绘图上执行平移手势/删除功能.

用户可以绘制多条线,因此需要分别UIImage使用所有这些线.

任何逻辑或代码片段都会非常有用

提前致谢

iphone paint objective-c uiimage ios

10
推荐指数
1
解决办法
165
查看次数

创建没有标题栏的窗口,可调整边框,没有虚假的6px白色条纹

我想要一个没有标题栏但有可调整大小的框架和阴影的窗口.这可以通过删除WS_CAPTION和添加WS_THICKFRAME轻松实现,但是,从Windows 10开始,有一个6px的白色非客户区域.

使用以下代码我创建一个窗口并用黑色绘制所有客户区域,窗口获得左,右和底部6px透明边距,但是上边距是白色.

#ifndef UNICODE
#define UNICODE
#endif 

#include <windows.h>

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
{
    // Register the window class.
    const wchar_t CLASS_NAME[]  = L"Sample Window Class";

    WNDCLASS wc = { };

    wc.lpfnWndProc   = WindowProc;
    wc.hInstance     = hInstance;
    wc.lpszClassName = CLASS_NAME;

    RegisterClass(&wc);

    // Create the window.

    HWND hwnd = CreateWindowEx(
        0,                              // Optional window styles.
        CLASS_NAME,                     // Window class
        L"",    // Window text
                0,
        // …
Run Code Online (Sandbox Code Playgroud)

winapi gdi paint windows-10

10
推荐指数
1
解决办法
3527
查看次数