标签: bitmap

将现有图形转换为位图

我正在为交易软件(C#、w​​informs、.NET 3.5)编写一个插件,我想在面板(比方说ChartPanel)上绘制十字光标,其中包含绘制成本可能很高的数据。到目前为止我所做的是:

  1. CursorControl我在面板中 添加了一个
    • CursorControl位于主绘图面板上方,以便覆盖整个区域
    • 这样Enabled = false所有输入事件都会传递给父级 ChartPanel
    • 它的Paint方法被实现,以便它在当前鼠标位置从上到下、从左到右绘制线条
  2. 当 MouseMove 事件被触发时,我有两种可能性:
    • A) Call ChartPanel.Invalidate(),但正如我所说,底层数据的绘制成本可能很高,这会导致每次我移动鼠标时所有内容都重新绘制,这是错误的(但这是我现在可以完成这项工作的唯一方法)
    • B)调用CursorControl.Invalidate()并在绘制光标之前,我会拍摄当前绘制的数据的快照并将其保留为光标的背景,每次需要重新绘制光标时都会恢复该背景...问题是...我不知道该怎么做

2.B. 意思是:

  • 将现有Graphics对象变成Bitmap(它(图形)是通过 Paint 方法给我的,我必须在它上面绘画,所以我无法创建一个新的 Graphics 对象......也许我弄错了,但这就是我的方式明白它)
  • 在绘制十字线之前,从位图中恢复图形内容并重新绘制十字线

我无法控制绘制昂贵数据的过程。我可以访问CursorControl通过 API 调用的我的方法和它的方法。

那么有没有办法将现有的Graphic内容存储到Bitmap中并在以后恢复呢?或者有没有更好的方法来解决这个问题?


已解决:经过几个小时的反复试验,我想出了一个可行的解决方案。我使用的软件有很多问题不能笼统讨论,但主要原理很清楚:

  • 已绘制内容的现有图形无法直接转换为位图,而是我必须使用panel.DrawToBitmap@Gusman 的答案中首先提到的方法。我知道,我想避免,但最后我不得不接受,因为这似乎是唯一的办法
  • 我还想避免每一帧的双重绘制,因此第一个十字准线油漆总是直接绘制到ChartPanel. 鼠标移动而不更改图表图像后,我会进行快照显示DrawToBitmap并按照所选答案中的描述进行操作。
  • 该控件必须是不透明的(未启用透明背景),以便刷新它不会在其父控件上调用 Paint(这将导致整个图表重新绘制)

我仍然每隔几秒钟左右就会偶尔遇到闪烁,但我想我可以以某种方式解决这个问题。虽然我选择了Gusman的答案,但我要感谢所有参与的人,因为我使用了其他答案中提到的许多其他技巧,例如Panel.BackgroundImage、使用Plot()方法而不是Paint()来锁定图像等。

.net c# bitmap winforms

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

Java 类似 Python 中的 getLeastSignificantBits() 和 getMostSignificantBits 函数?

有人可以帮我构建一个简单的函数来提取Python中的最低有效位和最高有效位吗?

Java 中的 Ex 代码:

UUID u = UUID.fromString('a316b044-0157-1000-efe6-40fc5d2f0036');
long leastSignificantBits = u.getLeastSignificantBits();

private UUID(byte[] data) {
    long msb = 0;
    long lsb = 0;
    assert data.length == 16 : "data must be 16 bytes in length";
    for (int i=0; i<8; i++)
        msb = (msb << 8) | (data[i] & 0xff);
    for (int i=8; i<16; i++)
        lsb = (lsb << 8) | (data[i] & 0xff);
    this.mostSigBits = msb;
    this.leastSigBits = lsb;
}
Run Code Online (Sandbox Code Playgroud)

--> 输出值:-1160168401362026442

python bitmap bit

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

在 C# 中确定位图中的像素是否为任何绿色阴影

我目前有以下代码来查看位图的像素:

public struct Pixel
{
    public byte Blue;
    public byte Green;
    public byte Red;
    public byte Alpha;

    public Pixel(byte blue, byte green, byte red, byte alpha)
    {
        Blue = blue;
        Green = green;
        Red = red;
        Alpha = alpha;
    }
}

    public unsafe void Change(ref Bitmap inputBitmap)
    {
        Rectangle imageSize = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height);
        BitmapData imageData = inputBitmap.LockBits(imageSize, ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);

        for (int indexY = 0; indexY < imageData.Height; indexY++)
        {
            byte* imageDataBytes = (byte*)imageData.Scan0 + (indexY * imageData.Stride); …
Run Code Online (Sandbox Code Playgroud)

c# pixel bitmap

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

Android QR 位图需要帮助来删除边距

我已将字符串编码为 QR 位图。图片就变成了这样:

QR 位图图像

我需要更改什么才能使 QR 周围没有空格?我尝试阅读有关 MultiFormatWriter() 和 setPixels() 的文档,但找不到错误所在。这是代码:

Bitmap encodeAsBitmap(String str) throws  WriterException {
    BitMatrix result;
    try {
        result = new MultiFormatWriter().encode(str,
                BarcodeFormat.QR_CODE, 500, 500, null);
    } catch (IllegalArgumentException iae) {
        return null;
    }

    int w = result.getWidth();
    int h = result.getHeight();
    int[] pixels = new int [w * h];
    for (int i = 0; i < h; i++) {
        int offset = i * w;
        for (int j = 0; j < w; j++) {
            pixels[offset + …
Run Code Online (Sandbox Code Playgroud)

java android pixel bitmap

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

将 OpenCV mat 转换为 Android 位图

我正在尝试将 OpenCV mat 转换为 android 位图,但这给了我带有蓝色色调的图像(黄色变成蓝色)!即使我没有对图像进行任何处理!我不知道为什么会发生这种情况。下面是一些相关代码:

File file = new File(imgDecodableString);
image = Imgcodecs.imread(file.getAbsolutePath(),Imgcodecs.CV_LOAD_IMAGE_COLOR);
resultBitmap = Bitmap.createBitmap(image.cols(),  image.rows(),Bitmap.Config.ARGB_8888);;
Utils.matToBitmap(image, resultBitmap);
Bitmap mResult = resultBitmap;
ImageView imgView = (ImageView) findViewById(R.id.imgView);
imgView.setImageBitmap(mResult);
//imgView.setImageBitmap(BitmapFactory.decodeFile(imgDecodableString));
Run Code Online (Sandbox Code Playgroud)

我是 Android 应用程序开发的新手,所以我可能会错过一些简单的东西。感谢帮助!

编辑:

我正在上传图片以供参考。

原图

我得到的图像

java android opencv bitmap

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

比较颜色与容差

今天我试图从 BitMap 检查 CSharp 中的一种颜色是否与另一种颜色相似。这是代码,我正在使用:

Color blah = screenshot.GetPixel(x, y);
if (blah == Color.Red) {
...
Run Code Online (Sandbox Code Playgroud)

问题是,我从来没有得到过true,因为颜色有一点不同的色调。有什么方法可以比较这些颜色的公差吗?

谢谢!

c# image bitmap visual-studio

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

将 PIL 图像转换为 wxPython 位图图像

我可以加载 JPEG 图像,将其转换为位图并在 wx 应用程序中绘制它。然而,我很难将 PIL 图像对象转换为可以绘制到 wx 应用程序中的位图。

在网上,我能找到的最好的建议是做类似的事情

wx.Bitmap(PIL_image.tobytes())
Run Code Online (Sandbox Code Playgroud)

但是,这给了我以下错误

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 59: invalid start byte
Run Code Online (Sandbox Code Playgroud)

或者

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 51: invalid continuation byte
Run Code Online (Sandbox Code Playgroud)

有人对如何解决这一点有很好的提示吗?谢谢!

python wxpython bitmap python-imaging-library

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

如何在 C 中创建位图并使用 gcc 进行编译

我决定学习 C,我尝试遵循本教程http://ricardovelace.com/creating-bitmap-images-with-c-on-windows.html

但是当我尝试使用 gcc 编译我的代码时 >gcc -Wall testc o app

他不知道 type_rgb,我可以定义这个类型吗?如何定义?我的代码在哪里?

#include <stdio.h>


struct rgb_data {
  float r, g, b;
};

void save_bitmap( const char *file_name, int width, int height, int dpi, type_rgb  *pixel_data); 
/*
 next steps of the tutorial
*/

rgb_data *pixels = new rgb_data[width * height];

for( int x = 0; x < width; x++)
  {
    for(int y = 0; y < height; y++)
        int a = y * width +x; 
          {

            if ((x > 50 …
Run Code Online (Sandbox Code Playgroud)

c gcc bitmap

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

如何从 MediaStore.Images.Media.getBitmap(contentResolver, uri) 获取位图?

我在从 uri 检索位图时遇到困难。我试图通过意图打开相机后获取从相机拍摄的图像。

                    try {
                        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                            intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                            imageUri = FileProvider.getUriForFile(mContext, mContext.getApplicationContext().getPackageName(), createImageFile());
                            intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);   // set the image file name
                        }
                        startActivityForResult(intent, PERMISSION_REQUEST_CODE_CAMERA);
                    } catch (ActivityNotFoundException e) {
                        e.printStackTrace();
                    }
Run Code Online (Sandbox Code Playgroud)

登录时的 imageUri 是

内容://com.example/external_files/Pictures/CustomFolder/15122017_photo_115344.jpg

打开相机并拍照后,调用我的 onActivityResult 。因为我使用 MediaStore.EXTRA_OUTPUT,所以我的数据对象中没有收到任何内容,它为空。我尝试使用 MediaStore.Images.Media.getBitmap() 来检索位图。我传入 imageUri。我相信这可能不正确,因为我收到了异常。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == PERMISSION_REQUEST_CODE_CAMERA) {
        if (resultCode == Activity.RESULT_OK) {

            Bitmap bitmap;
            try {
                bitmap = MediaStore.Images.Media.getBitmap(mContext.getContentResolver(), …
Run Code Online (Sandbox Code Playgroud)

android bitmap mediastore android-camera-intent

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

SkiaSharp 镜像位图

我正在寻找镜像位图,以便可以将图像及其镜像彼此相邻。我正在使用 SkiaSharp,我的位图是 SKBitmap,我将它们绘制在画布上。

canvas.Translate( -imageWidth/ 2.0f, -imageHeight/ 2.0f );
canvas.Scale( -1, 1,0,0 );
canvas.DrawBitmap( bitmap, new SKPoint( 0.0f, 0.0f ) );
canvas.Scale( -1, 1, 0, 0 );
canvas.Translate( imageWidth/ 2.0f, imageHeight / 2.0f );
Run Code Online (Sandbox Code Playgroud)

我将图像围绕原点居中,围绕 Y 轴镜像,在画布上绘制位图,然后撤消变换以获得结果。

我的问题似乎是,当我开始使用缩放方法时,位图就消失了。如果我画一个圆圈之类的东西就不会发生这种情况。

c# android bitmap xamarin skiasharp

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