我有一个应用程序,它从数据库中加载一些blob数据,可以表示各种位图和图标的png格式或原始二进制数据.这是存储在std::vector<unsigned char>
我正在使用CImageList对象在树视图,工具栏图像等中显示各种图像,但问题是从内存中的数据创建位图会变得模糊,好像它在执行如下操作时缺少像素:
std::vector<unsigned char> bits;
HBITMAP hbitmap = CreateBitmap(16, 16, 1, 32, bits.data());
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我现在只需将向量中的data()写入临时文件,然后使用LoadImage将其读回并从中创建HBITMAP.这是完美的,但无可否认,这是一个无耻的黑客,我希望完全没必要.
我在网上环顾四周,但没有找到任何关于如何"正确"从内存创建hbitmaps的好例子.我希望能够创建这些位图,以便添加到图像列表中,而无需任何文件i/o和有限数量的复制数据(如果可能).
寻找最好的方法来做到这一点,显然Windows特定的代码是好的.
更新:
根据jdv的回答,我开始使用CreateCompatibleBitmap,CreateDIBitmap,最后是CreateDIBSection.所有这些最终创建了可爱的黑色位图,而不是之前的模糊位图,所以我必须再次做错了我的猜测是因为这个位图创建是在一个没有屏幕直流或窗口概念的对象中完成的,使用GetDC(NULL)和CreateCompatibleDC(NULL)不好.示例代码:
BITMAPINFO bmi;
ZeroMemory(&bmi, sizeof(BITMAPINFO));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biBitCount = 32;
bmi.bmiHeader.biHeight = 16;
bmi.bmiHeader.biWidth = 16;
bmi.bmiHeader.biPlanes = 1;
HDC dc = CreateCompatibleDC(NULL);
HBITMAP hbitmap = CreateDIBSection(dc, &bmi, DIB_RGB_COLORS, (void**)blobData.GetMember<FILEDATAFIELD_DATA>().data(), NULL, 0);
Run Code Online (Sandbox Code Playgroud)
我现在当然认为必须有一个更简单的方法来解决这个问题,或许完全避免使用HBITMAP并直接与CBitmap班级合作?当它归结为将图像添加到CImageList我正在使用CBitmap::FromHandle(HBITMAP hbitmap, COLORREF mask)的时候.有谁知道CBitmap从一个初始化对象的简单方法std::vector<unsigned char>?
我有一个简单的类来尝试包装加密以便在我的程序中的其他地方使用.
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;
public final class StupidSimpleEncrypter
{
public static String encrypt(String key, String plaintext)
{
byte[] keyBytes = key.getBytes();
byte[] plaintextBytes = plaintext.getBytes();
byte[] ciphertextBytes = encrypt(keyBytes, plaintextBytes);
return new String(ciphertextBytes);
}
public static byte[] encrypt(byte[] key, byte[] plaintext)
{
try
{
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
SecretKeySpec spec = new SecretKeySpec(getRawKey(key), "AES");
cipher.init(Cipher.ENCRYPT_MODE, spec);
return cipher.doFinal(plaintext);
}
catch(Exception e)
{
// some sort of problem, return null because we can't encrypt it.
Utility.writeError(e); …Run Code Online (Sandbox Code Playgroud) 我试图通过将params传递到where来为我的编辑操作添加一些条件逻辑.
每当我使用.find(params [:id]以外的任何东西时,ActiveRecord :: Relation:Class的错误未定义方法`model_name'
我的代码如下
控制器:
def edit
@office = Office.where("id = ? AND company_id = ?", params[:id], @company.id )
end
Run Code Online (Sandbox Code Playgroud)
视图:
<%= simple_form_for @office, :url => settings_office_path, :html => { :class => "office_form" } do |f| %>
<h1>Edit <%= @office.office_name %> Details</h1>
<%= render :partial => 'form', :locals => { :f => f } %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
我输出了@office的类,它是ActiveRecord :: Relation.如果我只是用
@office = Office.find(params[:id])
Run Code Online (Sandbox Code Playgroud)
输出是Office.
我认为这是问题,但不知道如何解决它.有任何想法吗?
我目前正在尝试确保在文本框中输入的数字可以除以1.25或1.5.我决定天气将数字修改1.25或1.5的方式取决于另一个下拉列表中的内容.例如:如果DDL的选定索引为1,则I mod为1.5,如果为2 I mod为1.25.
但是,我需要向用户显示错误被抛出的原因.自定义验证器的错误消息需要类似"数字必须由1.25设计",反之亦然.
从我可以告诉我代码应该工作.但事实并非如此.我在另一个论坛上看到,获取源代码并使innerText成为错误信息应该可以解决问题.但我必须在某处做错事.当我单步执行我的javascript函数时,它会完美地逐步完成.只是没有错误消息.这是我的代码:
<asp:CustomValidator ID="ValidateFinHeight" runat="server" CssClass="NormLabel"
Display="Dynamic"
ControlToValidate="txtFinHeight"
ClientValidationFunction="validateFinHeight"></asp:CustomValidator>
<script type="text/javascript" language="javascript" >
function validateFinHeight(source, arguments)
{
var ddl = document.getElementById('cboTubeDia');
var ddlSelIndex = ddl.selectedIndex
switch(ddlSelIndex)
{
case 0:
arguments.isValid = true;
return;
case 1:
if(arguments.value%1.25 != 0)
{
source.innerText = "Height must be divisibly by 1.25";
arguments.isValid = false;
return;
}
else
{
arguments.isValid = true;
return;
}
case 2:
if(arguments.value%1.5 != 0)
{
source.innerText = "Height must be divisibly by 1.5";
arguments.isValid = false; …Run Code Online (Sandbox Code Playgroud) 我设法对以下所有内容进行了更改:
HttpClient client;
HttpPost method;
client = new DefaultHttpClient();
method = new HttpPost(url);
InputStream rstream;
try {
rstream = method.getResponseBodyAsStream();
} catch (IOException e) {
return BadSpot(e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
我不确定的是我应该替换getResponseBodyAsStream().
我想知道是否有办法避免“闪烁”或用某种类型的其他过渡代替它?如果需要,我不介意使用 JavaScript 或 jQuery - 这也只是指从一个网页到另一个网页的转换(都在同一个站点上)。
谢谢大家!
我一直在使用git-svn从svn克隆的git repo在本地工作.我现在需要从不同的svn repo中添加一些代码.代码是模块化的,因此新代码将位于不与现有代码重叠的新子目录中.我在本地开发环境中使用git-svn,登台服务器是svn checkout,而实时服务器是svn导出.
在某些情况下,我正在开发两个独立的Drupal站点,每个站点都有自己的svn repo.站点A有一些自定义模块,现在需要添加到站点B.管理单独站点和回购的最佳方法是什么?
看起来我可能最好设置第三个单独的svn repo,其中包含站点之间共享的模块.如果是这样,在单个项目中使用两个单独的回购的最佳方法是什么?
编辑:我特别感兴趣的是其他人如何在多个站点上混合Drupal贡献模块和自定义模块时处理版本控制.我如何改进第一段最后一句中描述的设置?
最近我的用户友好错误页面停止显示我的生产环境.我正在使用rails 3.0.3.
我有以下内容config/environments/production.rb:
config.action_controller.consider_all_requests_local = false
Run Code Online (Sandbox Code Playgroud)
当我使用生产环境在本地启动Web服务器时,用户友好的错误页面会正确显示.
还有其他人经历过这个吗?
我理解通过从类的构造函数中调用shared_from_this()来获取shared_ptr是不可能的,因为该对象尚未构造.但是有可能从构造函数中获取对象的weak_ptr吗?一些提升论坛帖子讨论"weak_from_raw()"方法表明它可能是有可能的.
编辑:提升形式讨论weak_from_raw http://lists.boost.org/boost-users/2010/08/61541.php
我写了spring webservice cleint示例这对springws1.5工作正常但是当使用spring ws 1.0.4运行时,我得到的是异常.请帮助我,为什么我们会得到这个例外以及如何解决.我只需使用down版本,因为我的弹簧版本是2.0.4.请尽可能尽快回复.
Unhandled exception:
org.springframework.oxm.jaxb.JaxbUnmarshallingFailureException: JAXB unmarshalling exception: unexpected element (uri:"http://yyy.org", local:"xxxResponse"). Expected elements are <{}xxx>,<{}xxxResponse>; nested exception is javax.xml.bind.UnmarshalException: unexpected element (uri:"yyy.org", local:"xxxResponse"). Expected elements are <{}xxx>,<{}xxxResponse>
Caused by:
javax.xml.bind.UnmarshalException: unexpected element (uri:"http://yyy.org", local:"xxxResponse"). Expected elements are <{}xxx>,<{}xxxResponse>
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:603)
at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:244)
at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:239)
at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:116)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1009)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:446)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:427)
at com.sun.xml.bind.v2.runtime.unmarshaller.InterningXmlVisitor.startElement(InterningXmlVisitor.java:71)
at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:137)
at com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:240)
at com.sun.xml.bind.unmarshaller.DOMScanner.scan(DOMScanner.java:123)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:314)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:297)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:107)
at org.springframework.oxm.jaxb.Jaxb2Marshaller.unmarshal(Jaxb2Marshaller.java:395)
at org.springframework.ws.support.MarshallingUtils.unmarshal(MarshallingUtils.java:62)
at org.springframework.ws.client.core.WebServiceTemplate$2.extractData(WebServiceTemplate.java:276)
at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:417)
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:265) …Run Code Online (Sandbox Code Playgroud)