我正在为交易软件(C#、winforms、.NET 3.5)编写一个插件,我想在面板(比方说ChartPanel)上绘制十字光标,其中包含绘制成本可能很高的数据。到目前为止我所做的是:
CursorControl我在面板中
添加了一个CursorControl位于主绘图面板上方,以便覆盖整个区域Enabled = false所有输入事件都会传递给父级
ChartPanelPaint方法被实现,以便它在当前鼠标位置从上到下、从左到右绘制线条ChartPanel.Invalidate(),但正如我所说,底层数据的绘制成本可能很高,这会导致每次我移动鼠标时所有内容都重新绘制,这是错误的(但这是我现在可以完成这项工作的唯一方法)CursorControl.Invalidate()并在绘制光标之前,我会拍摄当前绘制的数据的快照并将其保留为光标的背景,每次需要重新绘制光标时都会恢复该背景...问题是...我不知道该怎么做。2.B. 意思是:
Graphics对象变成Bitmap(它(图形)是通过 Paint 方法给我的,我必须在它上面绘画,所以我无法创建一个新的 Graphics 对象......也许我弄错了,但这就是我的方式明白它)我无法控制绘制昂贵数据的过程。我可以访问CursorControl通过 API 调用的我的方法和它的方法。
那么有没有办法将现有的Graphic内容存储到Bitmap中并在以后恢复呢?或者有没有更好的方法来解决这个问题?
已解决:经过几个小时的反复试验,我想出了一个可行的解决方案。我使用的软件有很多问题不能笼统讨论,但主要原理很清楚:
panel.DrawToBitmap@Gusman 的答案中首先提到的方法。我知道,我想避免,但最后我不得不接受,因为这似乎是唯一的办法ChartPanel. 鼠标移动而不更改图表图像后,我会进行快照显示DrawToBitmap并按照所选答案中的描述进行操作。我仍然每隔几秒钟左右就会偶尔遇到闪烁,但我想我可以以某种方式解决这个问题。虽然我选择了Gusman的答案,但我要感谢所有参与的人,因为我使用了其他答案中提到的许多其他技巧,例如Panel.BackgroundImage、使用Plot()方法而不是Paint()来锁定图像等。
有人可以帮我构建一个简单的函数来提取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
我目前有以下代码来查看位图的像素:
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) 我已将字符串编码为 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) 我正在尝试将 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 应用程序开发的新手,所以我可能会错过一些简单的东西。感谢帮助!
编辑:
我正在上传图片以供参考。
今天我试图从 BitMap 检查 CSharp 中的一种颜色是否与另一种颜色相似。这是代码,我正在使用:
Color blah = screenshot.GetPixel(x, y);
if (blah == Color.Red) {
...
Run Code Online (Sandbox Code Playgroud)
问题是,我从来没有得到过true,因为颜色有一点不同的色调。有什么方法可以比较这些颜色的公差吗?
谢谢!
我可以加载 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)
有人对如何解决这一点有很好的提示吗?谢谢!
我决定学习 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) 我在从 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) 我正在寻找镜像位图,以便可以将图像及其镜像彼此相邻。我正在使用 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 轴镜像,在画布上绘制位图,然后撤消变换以获得结果。
我的问题似乎是,当我开始使用缩放方法时,位图就消失了。如果我画一个圆圈之类的东西就不会发生这种情况。