从一组三角形创建位图:Matlab

从一组三角形创建位图:Matlab,matlab,bitmap,Matlab,Bitmap,我有一组三角形,由3(x,y)坐标定义。x轴从0到2,y轴的大小也相同(单位为英寸) 每个三角形都有一个RGB值 我想渲染每个三角形的顶部(顺序无关紧要),然后创建一个大小为400×400像素的位图图像(因为我的x和y是2英寸长,每英寸200像素) 下面给出了我的方法,但我希望我不会用我的解决方法影响读者的意见。重要的是问题 我的方法是:我使用matlab的fill()函数从每个三角形生成面片对象并绘制它们。然后使用getframe()从matlab图形生成位图。问题是,我的图形周围有一个白边,

我有一组三角形,由3(x,y)坐标定义。x轴从0到2,y轴的大小也相同(单位为英寸)

每个三角形都有一个RGB值

我想渲染每个三角形的顶部(顺序无关紧要),然后创建一个大小为400×400像素的位图图像(因为我的x和y是2英寸长,每英寸200像素)

下面给出了我的方法,但我希望我不会用我的解决方法影响读者的意见。重要的是问题

我的方法是:我使用matlab的fill()函数从每个三角形生成面片对象并绘制它们。然后使用getframe()从matlab图形生成位图。问题是,我的图形周围有一个白边,尺寸是420 x 560像素。我的代码如下

如果使用fill()和getframe()是解决此问题的唯一方法,请指出错误。我希望有一种不使用getframe()的方法来解决这个问题。谢谢

另外,我之前的问题是关于getframe()


您可以为
getframe
函数提供第二个参数,指示所需的裁剪矩形。只要找出你的人物感兴趣区域的边界


有关详细信息,请参见帮助获取框架。

您必须修改创建图像的
循环的
,以便让图形填充整个窗口,而无需任何灰色填充。您还需要关闭轴。另外,在生成每个图像时,需要关闭刻度。这是通过不写入任何记号标签以及将记号长度设置为0来完成的。换句话说,您需要修改代码,使其看起来像这样。通过查看代码中的
%//NEW
语句,您将看到我在何处插入了代码:

for c2=1:N;
    h = figure('Visible','off');
    subplot('position', [0 0 1 1]); %// NEW
    axis off; %// NEW
    set(h, 'PaperUnits', 'inches', 'PaperPosition', [0 0 400 400]/res);
    for c3 =1:Tri
        h1 = fill(G(c3,1:3,c2), G(c3,4:6,c2), [G(c3,7,c2) G(c3,8,c2) G(c3,9,c2)]);
        set(h1,'EdgeColor','None');
        set(gca,'xcolor','w','ycolor','w','xtick',[],'ytick',[]) %// NEW
        set(gca,'Ticklength',[0 0]); %// NEW
        hold on;
    end
    %print(h,'-dbmp',['-r' num2str(res)],['file' num2str(c2)]);

    F = getframe(h);
    close all; %// NEW
    [a, b] = frame2im(F);
    a = imresize(a, [400 400], 'nearest'); %// NEW
end

这仍然会为您创建的每个图像显示弹出的帧,但此时您应该能够获得纯图像数据。请注意,这些图像仍然显示为略大于
400 x 400
。这是因为,一旦我们删除了边框和记号等,图形将拉伸以填充整个图形。为了解决这个问题,我使用图像并根据您所需的大小将其缩小到
400 x 400
。另外,请注意,每次生成新图像时,都会生成一个新的图形。每次调用
getframe
,都会弹出带有此随机生成的多边形图像的图形,
getframe
会拍摄当前帧的快照。没有办法防止这种情况发生,因为您将无法拍摄该图形的快照。解决此问题的一种方法是在抓取图像后关闭该图形。您可以执行
全部关闭getframe
后,都会调用code>。这样,一次只能显示一个图形,但这仍然不会阻止图形显示


如果我真的找到了解决办法,我会让你知道的

我想这是一个选择。但是我在想,也许我根本不需要使用这个函数,而是将三角形渲染成位图,而不需要绘制图形。我不想用我的答案来改变观点。谢谢
for c2=1:N;
    h = figure('Visible','off');
    subplot('position', [0 0 1 1]); %// NEW
    axis off; %// NEW
    set(h, 'PaperUnits', 'inches', 'PaperPosition', [0 0 400 400]/res);
    for c3 =1:Tri
        h1 = fill(G(c3,1:3,c2), G(c3,4:6,c2), [G(c3,7,c2) G(c3,8,c2) G(c3,9,c2)]);
        set(h1,'EdgeColor','None');
        set(gca,'xcolor','w','ycolor','w','xtick',[],'ytick',[]) %// NEW
        set(gca,'Ticklength',[0 0]); %// NEW
        hold on;
    end
    %print(h,'-dbmp',['-r' num2str(res)],['file' num2str(c2)]);

    F = getframe(h);
    close all; %// NEW
    [a, b] = frame2im(F);
    a = imresize(a, [400 400], 'nearest'); %// NEW
end