会員登録で5000円分が当たります

こんにちは,
VC++6.0 MFC ダイアログベースでソフトを作成しています.

そこでbmp画像を読み込んでjpeg画像に変換したいと思っています.
プログラム自体は前任者から引き継いだものです.
そこではJPEG-6bというオープンソース?を使って変換を行っています.
ただ処理速度が遅く,もっと早くしたいと思っています.

他によい(JPEG-6bより高速)変換方法はないでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>他によい(JPEG-6bより高速)変換方法はないでしょうか?



.NETが使えるなら
http://www.atmarkit.co.jp/fdotnet/dotnettips/533 …
の方法を用いて「WindowsにインストールされているJpegエンコーダを呼び出せる」のですが…。

MFCダイアログベースでは「コーデックのリストを取得し、エンコーダを特定し、エンコーダをロードして、エンコーダの初期化をして、エンコーダに静止画1枚をフレームデータとして入力ストリームに流し込み、出力ストリームに出て来たフレームデータをjpegデータとして保存する」と言う作業を「すべて自前で」行う必要があるでしょう。

.NETの場合、ImageオブジェクトのSaveメソッドで上記のような「色々と面倒な事」を内部でやってくれるので、簡単なんですが…。

簡単ではありませんが、MFCでコーデックを呼び出して使用する方法が、必ずある筈です(当方なら、そんな苦労はしたくないので.NETに乗り換えますが)

>そこではJPEG-6bというオープンソース?を使って変換を行っています.

今の時代、たいていのWindowsで標準でJpegのコーデックがインストール済みなので、自前で変換したり、追加ライブラリで変換するのは時代遅れと言えます。

.NETなど、コーデックを簡単に呼び出せる環境を使って「関数一発」が今のトレンディです。

全体を.NETに乗せ換えるのが無理なら、jpeg保存処理だけ.NETで組んで別モジュールにして、本体でモジュールをロードして呼び出して使う、などで良いかも知れません(要は、jpegの保存ルーチンをプラグイン化して、本体プログラムでプラグインをロードして使う、と言う事)
    • good
    • 0
この回答へのお礼

ありがとうございます.
その方法で試してみようかと思います.
今回は処理速度重視なので
簡単さも重要ですが,他にもよさそうな方法があれば
またお願いいたします.

お礼日時:2009/10/29 20:05

VC6からなら GDI+かなぁ ・・・



変換に時間がかかっているのか ファイルのIOで時間をとられているのか検証してみたほうがいいかも

VC6付属のMSDNに GDI+を使ってPNGで保存するサンプルがありますよ
『Converting a BMP Image to a PNG Image』
この保存方式を決めている
GetEncoderClsid(L"image/png", &encoderClsid);

GetEncoderClsid(L"image/jpeg", &encoderClsid);
に変更すれば出来るはずです

参考URLは 英語版です

参考URL:http://msdn.microsoft.com/en-us/library/ms533837(VS.85).aspx
    • good
    • 0
この回答へのお礼

返信遅くなり申し訳ありません.
ありがとうございます.
IOと比較して変換に多く時間がかかっているようです.
ちょっと難しそうですが,調べてやってみようと思います.

お礼日時:2009/11/06 18:16

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qbmp→jpgに、jpg→bmpに

bmpの画像や、jpgの画像の情報を交換して(例:bmpをjpgに変換したり、jpgの画像情報をbmpに変換)て、できますか??
拡張子を書き換える方法からbmp→jpg,jpg→bmpに変換する方法はわかりました。画像情報を交換するプロパティてありますか??

画像情報を変換する右方てありますか??適切なアドバイスくれたらうれしいです。

Aベストアンサー

Image^ imgBMP = Bitmap::FromFile( "bmpファイルパス" );
imgBMP->Save("jpgファイルパス");

Image^ imgJPG = Bitmap::FromFile( "jpgファイル名")
imgJPG->Save("bmpファイルパス");

といった具合でしょう
System.Drawing.ImageクラスのメソッドをMSDNなどで確認しましょう
Saveメソッドにもいろいろなやり方がありますので …

# 開発環境の情報などは最初の質問時に書きましょう

Q.jpgと.pngファイルを.bmpに変換したい

.jpgと.pngを.bmpに変換するプログラムを無償ボーランドC++5.5で作りたいのですが
.jpgと.pngのフォーマットについて詳しく説明しているサイトを教えてください

Aベストアンサー

↓ここなんかが最適かと思います。
http://www.amy.hi-ho.ne.jp/jbaba/image0.htm

あと定番どころといえば↓
http://www.wotsit.org/

参考URL:http://www.amy.hi-ho.ne.jp/jbaba/image0.htm

QLNK2019: 未解決の外部シンボルのエラーが出る

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自キャラのデータ
Point2D g_jikipos = {40, 400};//自キャラの座標

//画像ハンドル
int g_jikiimage[11];

//色々なファイルの読み込み
int LoadFiles(){
//画像ファイル読み込み
if(LoadDivGraph("media\\player01.bmp",
11,11,1,64,64,g_jikiimage) == -1) return -1;

return 1;
}


 mymain.h
//他から呼び出させるMyMainの関数
void MyMain();
int LoadFiles();


 myhelper.h(サンプルなので打ちミスはない)
#include "DxLib.h"
#include <limits.h>
#include <math.h>

//構造体宣言
//座標またはベクトルを記録する構造体
struct Vector{
float x,y;
};
typedef Vector Point2D;
//線を記録する構造体
struct Line2D{
Point2D startpos, endpos;
float katamuki;//傾きをラジアン値で記録
Vector speed;//移動している場合は速度をセット
};
//球体を記録する構造体
struct Ball2D{
Point2D position;
float hankei;//半径
};
//四角形を記録する構造体
struct Rect2D{
Point2D lefttop;
Point2D rightbottom;
float width;
float height;
};


//ライブラリ関数
Point2D PosInView(Point2D in);
int XInView(float inx);
int YInView(float iny);
void ScrollToLeft(float jikiposx);
void ScrollToRight(float jikiposx);
void ScrollToUp(float jikiposy);
void ScrollToDown(float jikiposy);
void DrawLineInView(float x1, float y1, float x2, float y2, int Color, int Thickness);
void DrawCircleInView(float x, float y, float r, int Color, int FillFlag);
void DrawAnimation(float x, float y, double ExtRate, double Angle,int TurnFlag,
int *imgarray, int allframe, float fps);
//ベクトル関数
Vector CreateVector(Vector in, float veclen);
Vector AddVector(Vector v1, Vector v2);
Vector SubVector(Vector v1, Vector v2);
Vector AddVectorInFrameTime(Vector pos, Vector speed);
Vector AddVectorInFrameTime2(Vector pos, Vector speed, Vector accel);
Vector Normalize(Vector in);
Vector RotateVector(Vector in, float radian);
float VectorLengthSquare(Vector in);
float DotProduct(Vector v1, Vector v2);
float CrossProduct(Vector v1, Vector v2);
void SetLine2DKatamuki(Line2D *in);
void DrawLine2D(Line2D in, int Color, int Thickness);
void DrawBall2D(Ball2D in, int Color, int Fill);
//当たり判定関数
bool HitTestLineAndBall(Line2D linein, Ball2D ballin);
bool IsPointAtLineFace(Line2D linein, Point2D ptin);
bool HitTestLineAndLine(Line2D line1, Line2D line2);
bool HitTestBallAndBall(Ball2D a, Ball2D b);
bool HitTestPointAndBox(Rect2D rect, Point2D pt);
//タイマー関数
void SetSimpleTimer(int idx, int time);
int GetPassedTime(int idx);


//グローバル変数
extern float g_frametime;
extern Rect2D g_framerect;//画面領域(当たり判定)
extern Point2D g_current_field_pos;//現在の左上座標
extern Rect2D g_stagesize;//ステージサイズ

//定数宣言
const float ZEROVALUE = 1e-10f;
const float PIE = 3.1415926f;
const int SCROLL_LIMIT = 200;
----------------------------------------------------------------
 エラー内容
1>myhelper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl MyMain(void)" (?MyMain@@YAXXZ) が関数 _WinMain@16 で参照されました
1>C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\my\Debug\my.exe : fatal error LNK1120: 外部参照 1 が未解決です
1>my - エラー 2、警告 0
ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ
----------------------------------------------------------------
画像を貼り付けときます
(見えにくい場合→http://www.dotup.org/uploda/www.dotup.org154142.jpg.html)
初心者なのでわかりやすくお願いします

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自...続きを読む

Aベストアンサー

ファイル構成から推測するに
mymain.cpp というファイルに
void MyMain(void) {
// ここに処理を書く
}
という関数が必要なようです。

Qbmp(ビットマップ)からjpg(ジェーペグ)に変換??

あの。bmp(ビットマップ)形式の画像を
jpg(ジェーペグ)に変換ってできないんですかねぇ??
もしできるのなら、やり方教えてもらいたいです(>_<)

Aベストアンサー

できます。
ウィンドウズのスタートページ⇒プログラムファイル⇒アクセサリ⇒ペイント

を開く。

BMPの画像を開いて、ファイルを保存する時、
ファイルの種類をJPGで保存すればいいのです。

QMFC - ダイアログボックスのPictureControlへの画像表示

はじめまして。
現在MFCにおいて、ダイアログ形式のアプリケーションを作成しています。環境はVisual Studio 2005になります。
内容はWebカメラからのキャプチャを行い、そのキャプチャされた画像をダイアログ上に配置したPictureControlへ表示するというものです。

キャプチャされた画像は、1チャネルのグレースケールでありunsigned char型の1次元配列で格納されています。よってビットマップとして表示するには自身で構造体BITMAPINFOを作成しなければなりません。現状以下のように作成したのですが、うまく表示されません。

画像サイズは 320×240 です。
PictureControlのIDを IDC_BITMAP と設定し、
画素情報が格納されている配列を m_pbit とします。

int i;
CWnd *pWnd = GetDlgItem( IDC_BITMAP );
CDC *Capt = pWnd->GetDC();
BITMAPINFO bmif;

bmif.bmiHeader.biBitCount   =8;
bmif.bmiHeader.biClrImportant =0;
bmif.bmiHeader.biClrUsed    =256;
bmif.bmiHeader.biCompression  =0;
bmif.bmiHeader.biHeight     =240;
bmif.bmiHeader.biPlanes     =1;
bmif.bmiHeader.biSize      =sizeof(BITMAPINFOHEADER);
bmif.bmiHeader.biSizeImage   =320*240;
bmif.bmiHeader.biWidth     =320;
bmif.bmiHeader.biXPelsPerMeter =0;
bmif.bmiHeader.biYPelsPerMeter =0;

for(i=0; i<256; i++){
 bmif.bmiColors[i].rgbBlue = i;
 bmif.bmiColors[i].rgbGreen = i;
 bmif.bmiColors[i].rgbRed  = i;
 bmif.bmiColors[i].rgbReserved = 0;
}

SetDIBitsToDevice(Capt->m_hDC, 0, 0, 320, 240, 0, 0, 0, 240, m_pbit, &bmif, DIB_RGB_COLORS);

グレースケール画像なので配列bmiColorsは全て同色としました。
また、PictureControlのTypeをオーナ描画など全てのTypeを試しましたが、表示されませんでした。

必ずPictureControlに描画しなければならないという決まりはないのですが、ダイアログボックスにビットマップを表示するにはPictureControlだと考え、それに表示するようプログラムを組みました。

画素情報(グレースケールの輝度情報)のみ既知である状態からビットマップをダイアログに表示するためには他に方法があるのでしょうか?
上記のプログラムにおける間違い、またその他の方法についてアドバイスを頂けたらと思います。

よろしくお願いいたします。

はじめまして。
現在MFCにおいて、ダイアログ形式のアプリケーションを作成しています。環境はVisual Studio 2005になります。
内容はWebカメラからのキャプチャを行い、そのキャプチャされた画像をダイアログ上に配置したPictureControlへ表示するというものです。

キャプチャされた画像は、1チャネルのグレースケールでありunsigned char型の1次元配列で格納されています。よってビットマップとして表示するには自身で構造体BITMAPINFOを作成しなければなりません。現状以下のように作成したのですが、うま...続きを読む

Aベストアンサー

 こんにちは。
 パレットサイズ(biClrUsedの数字)の分だけRGBQUADの配列を拡張して割り当てないといけません。
 正しくは、以下です。実際には、予め割り当てておくのが良いでしょう。

//割り当てる
LPBITMAPINFO pbmi = static_cast<LPBITMAPINFO>(::malloc(sizeof(BITMAPINFOHEADER) + (sizeof(RGBQUAD) * 256)));

pbmi->bmiHeader.biBitCount=8;
pbmi->bmiHeader.biClrImportant=0;
pbmi->bmiHeader.biClrUsed=256;
pbmi->bmiHeader.biCompression=0;
pbmi->bmiHeader.biHeight=240;
pbmi->bmiHeader.biPlanes=1;
pbmi->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
pbmi->bmiHeader.biSizeImage=320*240;
pbmi->bmiHeader.biWidth=320;
pbmi->bmiHeader.biXPelsPerMeter=0;
pbmi->bmiHeader.biYPelsPerMeter=0;

for(i=0;i<256;i++)
{
pbmi->bmiColors[i].rgbBlue=i;
pbmi->bmiColors[i].rgbGreen=i;
pbmi->bmiColors[i].rgbRed=i;
pbmi->bmiColors[i].rgbReserved=0;
}

::SetDIBitsToDevice(Capt->m_hDC, 0, 0, 320, 240, 0, 0, 0, 240, m_pbit, pbmi, DIB_RGB_COLORS);

//開放する
::free(pbmi);
--------------------------------------------------------------------------------------------------------------
強引ですが、以下の様なやり方も出来ます。

struct BMI
{
BITMAPINFOHEADER bmiHeader;
RGBQUAD arrPalette[256];
};

//キャストする
BMI bmi;
LPBITMAPINFO pbmi = reinterpret_cast<LPBITMAPINFO>(&bmi);

//ヘッダとパレットの代入をする
pbmi->bmiHeader.biBitCount=...

//使用する
::SetDIBitsToDevice(...)

//開放は必要ない

 こんにちは。
 パレットサイズ(biClrUsedの数字)の分だけRGBQUADの配列を拡張して割り当てないといけません。
 正しくは、以下です。実際には、予め割り当てておくのが良いでしょう。

//割り当てる
LPBITMAPINFO pbmi = static_cast<LPBITMAPINFO>(::malloc(sizeof(BITMAPINFOHEADER) + (sizeof(RGBQUAD) * 256)));

pbmi->bmiHeader.biBitCount=8;
pbmi->bmiHeader.biClrImportant=0;
pbmi->bmiHeader.biClrUsed=256;
pbmi->bmiHeader.biCompression=0;
pbmi->bmiHeader.biHeight=240;
pbmi->b...続きを読む

Qbmp画像をjpegやpng画像に圧縮する方法

http://oshiete.goo.ne.jp/qa/8809275.html

このページでbmp画像をtiff圧縮する方法を教えていただきました。


このプログラムを改良して
jpegやpng画像にも対応したプログラムを作ることはできないでしょうか?

恐らく、

   CLSIDFromString StrPtr("{E09D739D-CCD4-44EE-8EBA-3FBF8BE4FC58}"), .Guid ' 圧縮方法

というところを書き換えれば、他の形式にも対応できると思うのですが、
CLSIDFromString で検索しても、情報は見つかりませんでした。

どうか教えてください。

Aベストアンサー

#1,2です。KenKen_SP様には失礼して、改造部分のコードを提示させていただきます。Win7Home(64) xl2010(32) で試しています。
出典:http://oshiete.goo.ne.jp/qa/5124395.html

' // Bitmapオブジェクトからファイルへ書き出し
Public Function SaveImageToFile( _
ByVal hBmp As OLE_HANDLE, _
ByVal sFilename As String, _
Optional ByVal sFormat As String = "JPG", _
Optional ByVal nQuarity As Long = 60 _
) As Boolean

'@ sFormat : BMP, JPG, GIF, TIF, PNG
'@ nQuality: 0-100(0:高圧縮低画質, 100:低圧縮高画質, Jpg のみ有効)

Dim sEncoderStr As String
Dim nStatus As Long

Select Case UCase$(sFormat)
Case "JPG": sEncoderStr = ENCODER_JPG
Case "GIF": sEncoderStr = ENCODER_GIF
Case "TIF": sEncoderStr = ENCODER_TIF
Case "PNG": sEncoderStr = ENCODER_PNG
Case Else: sEncoderStr = ENCODER_BMP
End Select

Dim uEncoderParams As EncoderParameters
' Jpeg のクオリティー設定
If UCase$(sFormat) = "JPG" Then
nQuarity = Abs(nQuarity)
If nQuarity > 100 Then nQuarity = 100
uEncoderParams.count = 1
With uEncoderParams.Parameter(0)
.GUID = pvToCLSID(QUALITY_PARAMS)
.TypeAPI = 4 ' Type Long
.Value = VarPtr(nQuarity)
.NumberOfValues = 1
End With
End If

' 保存処理
If UCase$(sFormat) = "JPG" Then
nStatus = GdipSaveImageToFile(hBmp, _
StrPtr(sFilename), _
pvToCLSID(sEncoderStr), _
VarPtr(uEncoderParams))
Else
nStatus = GdipSaveImageToFile(hBmp, _
StrPtr(sFilename), _
pvToCLSID(sEncoderStr), _
ByVal 0&)
End If
SaveImageToFile = CBool(nStatus = 0)
Call GdipDisposeImage(hBmp)

End Function

' // サンプル
Sub Sample()
Dim hBmp As OLE_HANDLE
Dim file1 As String

file1 = GetDesktopPath & "\Hydrangeas.bmp"
' GDI+ を初期化する
If GDIplus_Initialize() = False Then
MsgBox "GDI+ を初期化できません", vbCritical
Exit Sub
End If
'変換元ファイル読込
If GdipCreateBitmapFromFile(ByVal StrPtr(file1), hBmp) <> 0 Then
Gdiplus_Shutdown
Exit Sub
End If

' 保存(JPEG でクオリティー30の場合)
If SaveImageToFile(hBmp, GetDesktopPath & "\sample.jpg", "jpg", 30) = False Then
MsgBox "保存に失敗", vbCritical
Else
MsgBox "保存に成功", vbInformation
End If
' GDI+ を終了させる(必ず呼び出すこと)
Call Gdiplus_Shutdown
End Sub

'テスト用
Private Function GetDesktopPath() As String
Dim wScriptHost As Object, strInitDir As String
Set wScriptHost = CreateObject("Wscript.Shell")
GetDesktopPath = wScriptHost.SpecialFolders("Desktop")
Set wScriptHost = Nothing
End Function

#1,2です。KenKen_SP様には失礼して、改造部分のコードを提示させていただきます。Win7Home(64) xl2010(32) で試しています。
出典:http://oshiete.goo.ne.jp/qa/5124395.html

' // Bitmapオブジェクトからファイルへ書き出し
Public Function SaveImageToFile( _
ByVal hBmp As OLE_HANDLE, _
ByVal sFilename As String, _
Optional ByVal sFormat As String = "JPG", _
Optional ByVal nQuarity As Long = 60 _
) As Boolean

'@ sFormat : BMP, JPG, GIF, TIF, PNG
'@ nQuality: 0-...続きを読む

QcharからLPTSTRへの変換方法

リストコントロールにchar型の変数の値を数値として表示させたいのですが、charからLPTSTRへの洗練された変換方法がよくわからないです。

char tempChar;
CString tempString;
tempString.Format("%s", tempChar);
LPTSTR lpsz = new TCHAR[tempString.GetLength()+1];
_tcscpy(lpsz, tempString);

こんなプログラムを考えてみたのですが、汚いような気がします。もっと簡単で洗練された変換方法はないのでしょうか?

Aベストアンサー

wsprintfを使ってはどうでしょうか?

char tmpChar = 100;//表示する数値
TCHAR buf[5];
wsprintf(buf, "%d", tempChar);

QDWORDの実際の型は何でしょうか

VC++.NETの環境です。
DOWRD dw1 = 1;
int i = 2; と定義し
ここで
if ( i > dw1 ){
何かの処理;
}
とコーディングすると
warning C4018: '>' : signed と unsigned の数値を比較しようとしました。
のワーニングがでます。
これは、DWORDがint型でなくunsigned int型のようにも見えます。
ある本によれば(VC++.V.NET逆引き大全500の極意)
DWORD はint型であると記述されています。
もし、int型ならこのワーニングはでないはずなのですが、
なぜでるのでしょうか。又、DWORDの実際の型は何なのでしょうか。ご存じのかたおりましたら、教えていただけませんでしょうか。

Aベストアンサー

型定義が知りたいのならば、宣言ファイルを見れば疑問を挟む余地もありません。
DWORD型はwindef.hで
"typedef unsigned long DWORD;"
と宣言されています。

Visual Studioを使っているのならば、知りたい型の上にマウスポインタを置いて右クリック、ポップアップメニューの「定義へ移動」または「宣言へ移動」で簡単に知ることが出来ます。

QVC++プログラムをつかったBMP画像の拡大縮小について

現在VC++をつかった画像を扱うプログラミングを学習中なのですが、画像データの取り扱いについてわからないことがあるため教えていただきたいです。

BMP画像をバッファに取り込んだあとで、画像の縦横を拡大縮小したデータを新たなバッファに格納したいのですが、画像を拡大縮小する方法がわかりません。いくつかのプログラムのソースを見させていただいたのですが、BITMAPINFOHEADER構造体の中のbiWidthやbiHeightの値を変えているだけのようなのです。

これらの値を変えるだけで、指定した幅と高さに変換された画像データが得られるのでしょうか?
また、それで拡大縮小されるならば、変換された画像データは輝度情報が滑らかになるように何かしらの補正が加えられていたりするのでしょうか?それとも、途中途中の輝度を単純に抜いていたりするだけなのでしょうか。
その辺の原理についても教えていただけるとうれしいです。

お手数をかけますが、よろしくお願いします。

Aベストアンサー

> 実際に拡大縮小された画像のデータ(バッファ)がどこに格納されたのかわかりません・・・。

一般的には、メモリやVRAMに載ります。取得もできますが、DIBSectionを使うと、メモリとして参照しやすいです。

> また、StretchBlt関数は、描画を目的としているようなのですが、今回の場合、
> -- snip --
> 描画は無駄な手間のように思われます。

実際の画面に表示するかにかかわらず、WindowsのAPIにおける画像の操作は原則として「DC」という概念を使います。
メモリやプリンタもDCの一種と扱われますし、必ずしも画面描画は意味しません。
ビットマップに何か書くのも、DCと関連付けてそこに描画する仕組みです。

メモリ上で拡大縮小するということは、結局のところ突き詰めれば
元画像を読んで拡大縮小した画像をそこ(メモリ上)に描画している、
ということだと思いますが、いかがでしょう。

# C言語の入出力がコンソールにもファイルにも使えるようにFILE*を使うのとかと大差ない、
# DCってのはWindowsにおける「描画先」の抽象化された概念です。

> 何かスマートな方法はないものでしょうか?

DCという概念自体はWindows GDIの根底ですから、WindowsのAPIである限り、
他を使ってもIFは違えど内部的にはDCと大差ないと思われますが。
「質問者さんにとってのスマート」が不明ですが、自前で変換処理を書くか、
完全独自処理の画像変換ライブラリを持ってくるのがスマートですか。

> 実際に拡大縮小された画像のデータ(バッファ)がどこに格納されたのかわかりません・・・。

一般的には、メモリやVRAMに載ります。取得もできますが、DIBSectionを使うと、メモリとして参照しやすいです。

> また、StretchBlt関数は、描画を目的としているようなのですが、今回の場合、
> -- snip --
> 描画は無駄な手間のように思われます。

実際の画面に表示するかにかかわらず、WindowsのAPIにおける画像の操作は原則として「DC」という概念を使います。
メモリやプリンタもDCの一種と扱われま...続きを読む

QC++で表示したグラフをbmpやjpgに保存する方法

C++でグラフを作成して
ダイアログに表示したりは出来るのですが
そうやって表示したグラフを
bmpやjpgに保存する方法はあるのでしょうか?
できれば例のソースや
詳しい解説をしてもらえるとうれしいです

Aベストアンサー

★次のサイトをどうぞ。
・http://www.sm.rim.or.jp/~shishido/windows.html→『Windowsプログラミング研究室』
・http://www.sm.rim.or.jp/~shishido/gamedev.html→『ゲーム制作研究室』
・http://www.sm.rim.or.jp/~shishido/→『創作プログラミングの街』

参考項目:
・DIB(デバイス独立ビットマップ)
・24ビットDIB
・256色DIB
・16ビットDIB
・DIB操作関数を作る
・DIB操作関数を作る第2回
・BMPファイルからDIBを読み込む

関連ヘッダ:
・BITMAPFILEHEADER
・BITMAPINFO
・RGBQUAD

最後に:
・『ゲームプログラミング練習帳』という本を紹介します。→http://www.amazon.co.jp/gp/product/4875934424
・『ゲームプログラミング練習帳』の第1章に描画・保存・読み込みの基本が載っています。
・詳しくは、上記の本を参考にして下さい。→bmp の保存方法が載っています。
・以上。おわり。

参考URL:http://www.amazon.co.jp/gp/product/4875934424

★次のサイトをどうぞ。
・http://www.sm.rim.or.jp/~shishido/windows.html→『Windowsプログラミング研究室』
・http://www.sm.rim.or.jp/~shishido/gamedev.html→『ゲーム制作研究室』
・http://www.sm.rim.or.jp/~shishido/→『創作プログラミングの街』

参考項目:
・DIB(デバイス独立ビットマップ)
・24ビットDIB
・256色DIB
・16ビットDIB
・DIB操作関数を作る
・DIB操作関数を作る第2回
・BMPファイルからDIBを読み込む

関連ヘッダ:
・BITMAPFILEHEADER
・BITMAPIN...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング