我目前正在尝试使用 pytest 模块为我正在处理的项目创建单元测试。我正在尝试测试基于一组像素绘制椭圆的“add_point”方法。我想要做的是检查“绘制”以确保已成功创建椭圆。不幸的是,我不知道如何解决这个问题,所以任何帮助将不胜感激。到目前为止,这是我的代码:
(A) TheSlicePreviewMaker.py
import os, Image, ImageDraw, ImageFont
from json_importer import json_importer
class SlicePreviewer(object):
def __init__(self):
self.screen_size = (470, 470)
self.background_colour = (86,0,255)
self.platform_fill_colour = (100, 100, 100)
self.platform_outline_colour = (0, 0, 0)
self.platform_window = (0,0,469,469)
self.point_colour = (0,0,255)
self.config_object = json_importer("ConfigFile.txt")
self.image = None
def initialise_image(self):
self.image = Image.new('RGB',self.screen_size,self.background_colour)
draw = ImageDraw.Draw(self.image)
draw.rectangle(self.platform_window,outline=self.platform_outline_colour,fill=self.platform_fill_colour)
del draw
def add_point(self, px, py):
x1 = px - 1
y1 = py - 1
x2 = px + 1
y2 = py …Run Code Online (Sandbox Code Playgroud) 当我的应用程序第一次启动时,它让用户选择个人资料图片。这可以通过拍摄照片或从图库中选择来完成。
用户获得图片后,必须将其保存在设备的内部存储中,并将在应用程序中用作用户的个人资料图片。
这个过程工作正常,用户获取图片,并在保存之前显示在图像视图中。但是要将图像保存在内部存储器中,我遇到了一些麻烦。我尝试了几种方法来做到这一点,其中大多数似乎都有效。但是当我尝试它们时,图片没有被保存,或者至少我没有找到保存它的文件夹。
我已经尝试过这3种方式:
第一的:
File directory = getDir("profile", Context.MODE_PRIVATE);
File mypath = new File(directory, "thumbnail.png");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(mypath);
mybitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
第二:
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
mybitmap.compress(Bitmap.CompressFormat.PNG, 90, bytes);
FileOutputStream fos = null;
try {
fos = openFileOutput("thumbnail.png", Context.MODE_PRIVATE);
fos.write(bytes.toByteArray());
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
第三:
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
mybitmap.compress(Bitmap.CompressFormat.PNG, 90, bytes); …Run Code Online (Sandbox Code Playgroud) 我正在切割一些 int 数组的图像...
int[] imagenes_originales = new int[] {
R.drawable.image1,
R.drawable.image2,
R.drawable.image3,
R.drawable.image4
}
int[] new_images;
for (a = 0; a <= 3; a++) {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), imagenes_originales[a]);
int x = bitmap.getWidth(), y = bitmap.getHeight();
int escalax = getWindowManager().getDefaultDisplay().getWidth();
Bitmap recorte = Bitmap.createBitmap(bitmap, 0, y / 2, escalax, 100);
}
Run Code Online (Sandbox Code Playgroud)
如何在我的new_images[]变量中转换位图图像?
我有正在上传到ISSUU 的PDF 。
可以使用 FLASH 查看这些 PDF,但浏览器因 PDF 问题而崩溃。
ISSUU 诊断出 PDF 并检测到 PDF 在其页面上使用了透明度、径向和轴向阴影。他们建议我将它们转换为位图。不幸的是,他们不是 Ghostscript 的专家。
我需要使用 Ghostscript 重新渲染我的 PDF 以消除图像/页面上的透明度、径向和轴向阴影。
有人可以帮助我,哪个是 Ghostscript 尽可能简单地呈现我的 PDF 并使其在网络上轻松查看的正确命令?
也许按照ISSUU支持的建议显示如何转换为位图?
我尝试了以下但仍然无法解决我的问题:
我在 Android 上使用 renderscript 来编辑照片,目前由于 Android 上的纹理大小限制和内存限制,如果我尝试任何太大的东西,例如使用设备相机拍摄的照片,应用程序将崩溃。
我解决这个问题的第一个想法是使用 BitmapRegionDecoder 并将大照片平铺成可管理的部分,通过渲染脚本编辑它们并一次保存一个,然后使用 PNGJ 将它们拼接在一起 - 一个允许编写 PNG 的 PNG 解码和编码库图像分部分存入磁盘,因此我的内存中没有完整图像。
这工作正常,但将其拼接在一起需要相当长的时间 - 大约 1 分钟。
还有其他我应该考虑的解决方案吗?如果那里有解决方案,我可以更改为 JPEG,但我还没有找到。基本上我正在寻找 BitmapRegionDecoder 的另一面,一个 BitmapRegionEncoder。
为了清楚起见,我不想调整图像大小。
我尝试将 C# 中的字符串(单个字符)绘制到位图中的确切位置:
Bitmap bmp = new Bitmap(64, 64);
Graphics g = Graphics.FromImage(bmp);
g.DrawString("W", font1, new SolidBrush(myColor), new Point(32,32);
Run Code Online (Sandbox Code Playgroud)
单个字母周围有太多空白空间,我无法猜测绘制角色的“所需”位置,使其在最后的正确位置。
到现在为止,我已经有了字符的像素精确尺寸(查看单独呈现的位图中的位)。但是,如果我无法在确切位置(例如中心或右上角或....)绘制字符,则此信息是无用的。
是否有其他方法可以在 C# 中在位图上绘制文本?或者是否有任何转换方法可以转换 DrawString 需要的实际像素位置?
我没有什么问题。
我得到一个图像,转换为Bitmap并用这个Bitmap填充图像视图。
所以问题是,如何获取这个位图的真实坐标(X,Y)?
为了更好地说明,我附上了一张图片:

如图所示,例如我得到了一个自定义分辨率的图像,用户可以通过黄点制作透视图。
所以我需要知道,如何从 ImageView 中获取位图的真实坐标。
我目前所做的(但这种方法不正确):
我从 imageView 中获取宽度/高度并使用此分辨率重新创建新位图。
Bitmap bt = Bitmap.CreateScaledBitmap(BitmapFactory.DecodeResource(Activity.Resources, Resource.Drawable.test),800,1420,false); //800 width 1420 height
imgView.SetImageBitmap(bt);
Run Code Online (Sandbox Code Playgroud)
通过TouchListener 的实现(方法GetX() / GetY()),我得到了点的坐标(覆盖在位图上的黄色圆圈),问题是这些坐标不正确。
当我在 imageView 上通过 ScaleType.FitXY 拉伸位图时,它对我来说也很有趣(它可以获取位图的真实坐标)?
那么我怎样才能实现我的目标呢?
所以 - 这是我很少会问“我该怎么做”的问题之一,我实际上什么也没尝试,因为我不知道从哪里开始。
这是我的问题。
我有一张照片,我在绿色屏幕上键入了它,然后变成了一个蒙版,其中我有一些透明的像素,其余的像素是黑色的。假设这个黑色形状是照片主体的上胸部和头部。
我知道如何找到所有的黑色像素,我可以很容易地找出哪些黑色像素与透明像素相邻,这样我就可以轻松画出黑色形状的轮廓,但这就是我没有想法的地方……我该如何转换它将轮廓转换为可用作多边形的连续点数组?
我有一个图像,我想更改所述图像的宽度和高度。
(例如Width = 200 Height = 120,我想将其更改为Width = 30 Height = 50)
这样做的最佳方法是什么?

抱歉问了一个愚蠢的问题。但它解决了我的问题。请帮助我在 stackoverflow 上尝试了所有代码并遵循其他教程,但它根本没有帮助。在相机上,但为什么它在 galary 上不起作用,我不知道请帮助我。;(
这是选择图像的代码
private void selectImage() {
final CharSequence[] items = { "Take Photo", "Choose from Library",
"Cancel" };
AlertDialog.Builder builder = new AlertDialog.Builder(TestFragment.this);
builder.setTitle("Add Photo!");
builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
boolean result= Utility.checkPermission(TestFragment.this);
if (items[item].equals("Take Photo")) {
userChoosenTask ="Take Photo";
if(result)
cameraIntent();
} else if (items[item].equals("Choose from Library")) {
userChoosenTask ="Choose from Library";
if(result)
galleryIntent();
} else if (items[item].equals("Cancel")) {
dialog.dismiss();
}
}
});
builder.show();
}
Run Code Online (Sandbox Code Playgroud)
在这之后
private void …Run Code Online (Sandbox Code Playgroud) bitmap ×10
android ×6
c# ×2
image ×2
.net ×1
arrays ×1
coordinates ×1
drawable ×1
drawstring ×1
flash ×1
ghostscript ×1
graphics ×1
imageview ×1
int ×1
issuu ×1
pdf ×1
polygons ×1
pytest ×1
python ×1
renderscript ×1
resize ×1
shape ×1
svg ×1
unit-testing ×1
xamarin ×1