Output of -RGBimage seems to have changed, any help?
5 views (last 30 days)
Show older comments
I have worked on a function (applyhatch_plusC) which has been on the file exchange now for 15years. Recently, the functionality fails.
What seems to be the issue is the print(gcf,'-RGBimage') does not behave as before, and appears to be doing some internal dithering that I can't seem to turn off. In previous MatLab versions, even back to <2011 with the funtion hardcopy, an RGB copy of a figure (say, containing a red, green, and blue object) would output a cdata matrix of the image, with 5 unique colores (rgb and b&w). I do the same thing now, on the same image, and I get a whole slew of shades, maybe occuring on a few dozen pixels only.
Now, as my work exploits the unique colors to convert 1 color to soemthing else, this no longer works. hardcopy no longe exists, and I don't see how to get print(gcf,'-RGBimage') to accept options. I would like to avoid passing through a temp file, as this requires write access and isn't very elegant.
This is rather frustrating, as this undocumented MatLab change ruins a nice little function that's been download thousands of times...
9 Comments
Walter Roberson
on 26 Nov 2020
Try the below both with graphics smoothing on and off.
The [38 38 38] you are seeing is due to the default XColor and YColor for the tick marks and text.
Your countEntries appears to be from a file exchange submission https://www.mathworks.com/matlabcentral/fileexchange/23661-violin-plots-for-plotting-multiple-distributions-distributionplot-m so I substituted standard code for that part.
fig = gcf;
ax = axes(fig);
bar(ax, rand(1,3)); % create simple 1 color bar graph
%set(fig,'GraphicsSmoothing','off')
ax.XColor = [0 0 0];
ax.YColor = [0 0 0];
fr = getframe(ax);
getf_r = fr.cdata(:,:,1);getf_g = fr.cdata(:,:,2);getf_b = fr.cdata(:,:,3);getf_rgb = [getf_r(:) getf_g(:) getf_b(:)];
[uniqueEntries,~,G] = unique(getf_rgb,'rows');
numberOfOccurences = accumarray(G, 1);
uniqueEntries
numberOfOccurences
Accepted Answer
More Answers (2)
Image Analyst
on 18 Sep 2019
Maybe try the attached MaximizeFigureWindow function first, and then call either saveas(), imwrite(), or (on the File Exchange) export_fig
0 Comments
Image Analyst
on 25 Nov 2020
Try
theImage = getimage(gca);
or else
frame = getframe(gcf)
figure;
imshow(frame.cdata);
axis off
3 Comments
Image Analyst
on 25 Nov 2020
Can you give a small example with an actual RGB image that you synthesize? Be aware that if you use something like plot() over the image, it will antialias the line so that line won't be that one single color that you drew it in.
See Also
Categories
Find more on Interactive Control and Callbacks in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!