在MATLAB中添加图像时遇到麻烦保持轴固定

时间:2018-04-17 19:22:16

标签: image matlab matlab-figure

我目前正致力于在MATLAB中创建基于GUI的BlackJack游戏。我按照以下方式为经销商手和球员手设置了两个轴:

self.window = figure('Name', 'Blackjack',...
    'Units', 'normalized',...
    'Position', [.02, .05, .95, .85]);
self.dealerHand = axes('Parent', self.window,...
    'XLimMode', 'manual',...
    'XLim', [0, 10],...
    'YLimMode', 'manual',...
    'YLim', [0, 1],...
    'Title', 'Dealer',...
    'Units', 'normalized',...
    'Position', [.05, .70, .90, .25]);
self.playerHand = axes('Parent', self.window,...
    'XLimMode', 'manual',...
    'XLim', [0, 10],...
    'YLimMode', 'manual',...
    'YLim', [0, 1],...
    'Title', 'Player',...
    'Units', 'normalized',...
    'Position', [.05, .20, .90, .25]);

正如你所看到的,我已经设置了双手" XLim和YLim模式为手动。但是,当我运行此脚本时:

bjWindow = BlackJackWindow;
deck = DeckOfCards;
deck.shuffle
playerHand{1} = deck.cards{1};
dealerHand{1} = deck.cards{2};
playerHand{2} = deck.cards{3};
dealerHand{2} = deck.cards{4};
hold on
image(bjWindow.dealerHand, [0, 1], [0, 1], dealerHand{1}.img)
image(bjWindow.dealerHand, [1, 2], [0, 1], dealerHand{2}.img)
hold off
hold on
image(bjWindow.playerHand, [0, 1], [1, 0], playerHand{1}.img)
image(bjWindow.playerHand, [1, 2], [1, 0], playerHand{2}.img)
hold off
经销商"手"自动调整大小并拉伸第二张卡片如下:

BlackJack error in dealer hand

如果我在第一个代码块中反转指针的顺序,则错误发生在玩家手中。"换句话说,在初始化窗口时首先创建的轴具有此错误。另一个问题并不重要,因为我找到了一个解决方法,这就是为什么播放器" hand"翻转轴使得我必须将y位置设置为[1,0]而不是[0,1]?

1 个答案:

答案 0 :(得分:0)

hold on影响当前轴,这是您制作的最后一个轴。将图像添加到您创建的第一个轴时,它将被重置。反转是其中的一部分,因为image在显示图像时反转y轴。

解决方案是使用

hold(bjWindow.dealerHand,'on')
hold(bjWindow.playerHand,'on')

我建议不要在绘图后再次关闭。没有必要。

相反,要更改显示的卡片,请替换image object's CData property。这是存储像素数据的地方。通过更新此属性,而不是创建新的图像对象,您的应用程序将更加平滑,您不必担心删除和重新创建图像对象,保留轴属性等。更新属性是微不足道的所有的gliph(我猜)都是相同的大小。

set(image_handle,'CData',playerHand{1}.img)